옛날 옛적에 문제점.NET 4 MVC 3 작업/대기열 시스템은 어떻게 만듭니 까?
, 나는 내부 데이터베이스에서 데이터를 읽고, 그 데이터를 가지고 웹 서비스에 게시하기위한 내부 응용 프로그램을 썼다. 응용 프로그램은 단일 스레드 및 동기 HTTP 요청을 사용하여 매우 간단합니다.
이 응용 프로그램의 범위가 변경되어 이제까지 의도했던 것보다 훨씬 더 많은 데이터를 전달하려고합니다. 내부 데이터베이스에서 1,000 개의 레코드를 읽으면 단일 HTTP POST로 모든 레코드를 래핑하여 데이터를받는 웹 서비스를 호스팅하는 서버에 CPU 부하가 많이 듭니다. 또한 POST의 레코드 중 하나를 처리하는 동안 웹 서비스에서 오류가 발생하면 문제가 발생합니다. XML 응답은 실패한 특정 레코드를 지정하지 않으므로 요청 성공 여부가 제한적입니다.
나는 그것은
내가 믿을 수 있고 웹 서비스를 호스팅하는 서버의 더 배려 내 응용 프로그램을 다시 설계하기 위하여려고하고 수정하고 싶습니다 방법. 특히 15 분마다 내부 데이터베이스에서 레코드를 수집하여 작업으로 전환시키는 작업자가 필요합니다. 이러한 작업은 직렬화되어 대기열 (아마도 데이터베이스 테이블)에 저장됩니다. 그런 다음 몇 가지 작업자 스레드를 사용하여 대기열을 처리하는 응용 프로그램을 만들고 싶습니다 (좋은 생각입니까?). 스레드는 대기열에서 작업을 팝하고 웹 서비스 업스트림에 대한 비동기 HTTP POST를 작성하여 처리합니다. 요청의 상태에 따라 작업은 SUCCESS, FAILURE, TIMEOUT 또는 ABORTED가됩니다. 작업이 데이터베이스에서 갱신되고 프로세스가 로깅 된 후 작업 큐가 비어 있으면 작업 스레드가 다음 작업으로 이동하여 대기 상태가됩니다.
저는 건축가가 아니기 때문에 이런 식으로 구현하는 가장 좋은 방법을 모르겠습니다. 다음은 디자인에 대한 몇 가지 구체적인 질문입니다.
- .NET MVC 환경에서 멀티 스레딩에 대한 몇 가지 부정적인 점을 읽었습니다. 정말 CPU 집약적 인 작업을 수행하지 않기 때문에 여러 스레드를 사용하지 않아야합니까?
- Quartz.NET은 많은 멋진 것들을 할 수있는 것처럼 보입니다. 이런 식으로 Quartz.NET을 사용할 것인가?
- 내 디자인이 합리적입니까? 그렇지 않다면 어떻게 개선 될 수 있습니까?
- 새 응용 프로그램의 목표를 달성하기 위해 시스템을 어떻게 설계 하시겠습니까?
저는 이것이 광범위한 질문이지만, 제 목표를 분명하게 설명했기를 바랍니다. 미리 감사드립니다.
@ 클로 저 : 너무 현지화 되었습니까? –
MVC (또는 다른 WEB GUI)가 들어오는 곳이 어디인지 알지 못합니다. 이것은 WCF의 문제처럼 보입니다. 어쩌면 MSMQ를 사용하는 것 같습니다. –
@HenkHolterman IMHO는 질문이 질문자 시스템의 디자인과 더 관련이 있으며 특정 프로그래밍 문제 /로드 블록과는 관련이 적습니다. – Yuck