2011-10-20 2 views
4

옛날 옛적에 문제점.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을 사용할 것인가?
  • 내 디자인이 합리적입니까? 그렇지 않다면 어떻게 개선 될 수 있습니까?
  • 새 응용 프로그램의 목표를 달성하기 위해 시스템을 어떻게 설계 하시겠습니까?

저는 이것이 광범위한 질문이지만, 제 목표를 분명하게 설명했기를 바랍니다. 미리 감사드립니다.

+0

@ 클로 저 : 너무 현지화 되었습니까? –

+0

MVC (또는 다른 WEB GUI)가 들어오는 곳이 어디인지 알지 못합니다. 이것은 WCF의 문제처럼 보입니다. 어쩌면 MSMQ를 사용하는 것 같습니다. –

+0

@HenkHolterman IMHO는 질문이 질문자 시스템의 디자인과 더 관련이 있으며 특정 프로그래밍 문제 /로드 블록과는 관련이 적습니다. – Yuck

답변

3

MSMQ를 고려하셨습니까? 대기열에있는 메시지를 푸시하고 N 분마다 하나씩 읽은 다음 전원 장애가 발생하면 중복성을 내장하십시오.로드 밸런싱 환경에서는 공유 대기열에 게시 할 수 있습니다. 응답에서

질문은 :

나는 .NET MVC 환경에서 멀티 스레딩에 대한 몇 가지 부정적인 것들을 읽었습니다. 정말 CPU 집약적 인 작업을 수행하지 않기 때문에 여러 스레드를 사용하지 않아야합니까?
ASP.NET에서 ThreadPool을 사용하지 않는 것이 좋으므로 MVC에도 동일하게 적용됩니다. 그것은 귀하의 응용 프로그램을 조절할 수 있습니다.

Quartz.NET은 많은 멋진 것들을 할 수있는 것처럼 보입니다. 이런 식으로 Quartz.NET을 사용할 것인가?
이것은 cronjob과 비슷한 큐가 아닌 스케줄링을 대신합니다.

내 디자인이 합리적입니까? 그렇지 않다면 어떻게 개선 될 수 있습니까?
직렬화 부분이 훌륭하게 들리지만 SUCCESS, FAILURE, TIMEOUT 또는 ABORTED 부분이 좋게 들립니다. 언급 한 바와 같이, MSMQ는 중복 쓰기와 메시지 대기열 시스템의 번거 로움을 덜어줍니다.

새 응용 프로그램의 목표를 달성하기 위해 시스템을 어떻게 설계 하시겠습니까?
메시지 대기열에서 자주 읽는 서비스로 원하는 작업을 수행합니다. MSMQ 대신 SQL Server Message Broker을 사용할 수도 있습니다. MSMQ에는 관리 도구가 없기 때문에 MSMQ를 빌드해야합니다. 그러나 .NET Framework를 사용하기 위해 프레임 워크에 전체 .NET 어셈블리가 내장되어 있습니다.

.NET 4를 사용하는 경우 시스템의 HTTP 전송 부분을 수동으로 스레드 관리하는 대신 병렬 작업을 수행 할 수도 있습니다.

관련 문제