1

수천 가지의 시간 초과 이벤트가 아니라 수백 가지를 갖는 최상의 방법은 무엇입니까?대규모 시스템을위한 ASP.Net 스케쥴링 시간 초과 이벤트

저는 C# ASP.Net 웹 기반 응용 프로그램을 가지고 있습니다.이 응용 프로그램은 Microsoft Exchange와 다른 웹 기반 서비스 사이에 있습니다. Exchange는 사용자 약속에 대해 매시간 한 번 확인되며이 약속은 다른 웹 기반 서비스로 전달되어야하지만 즉시 전달되지 않아야합니다. 약속에 근접한 위치에 따라 전달되어야하므로 약속 시작 15 분 전에 말하십시오. 나는 이것에 대한 예정된 작업을 생각하고 있었는데, 어떻게 시스템이 많은 수의 사용자를 견뎌 낼지 모르겠다.

Exchange의 확인은 실제로 문제가 아니지만 Exchange에서 가져온 데이터를 기반으로 다른 이벤트를 실행하는 것은 약간 힘듭니다. Quartz.Net을 살펴 봤는데 아마도 도움이 될 수 있습니다. 나는 사람들이 현재 디자인에 대해 생각할 수있는 다른 설계 솔루션에 대해 궁금합니다. 물론 이상적인 세계 인 Exchange 플러그인이 선호되는 솔루션이지만, 실제로는 옵션이 아닙니다.

감사합니다.

답변

0

아마도 더 나은 솔루션은 준비 영역에 이벤트를 저장하고 해당 테이블을 매분마다 쿼리하고 관련 이벤트를 사용자에게 전달하는 것입니다. 즉, 매분마다 한 번만 쿼리하는 것이지만 사용자에게 다시 푸시하는 방법은 확실하지 않습니다.

이것은 완전히 생각한 선택 사항과는 거리가 멀지 만 다른 방향으로 생각하게하는 데 충분할 수 있습니다.

1

어플은 아마 웹 앱이 아니어야합니다. 이상적으로는 Windows 서비스 여야합니다. 그러나 그게 반드시 단순하지는 않다는 점에 감사드립니다. 따라서 당신이해야 할 일은 화재가 발생한 모든 코드가 자체 포함되어 있다는 것입니다. 최소한 호스팅 앱에 의존해야합니다.

나는 데이터를 전송하는 측면에서 다음과 같이 생각할 것입니다. 1) 전달 처리가 각 항목에 대해 수행되어야하는 시간을 결정하는 교환 처리를 가져옵니다. - 그래서 열이있는 테이블이 있습니다. "또 다른"보낸 ". 2) 그런 다음 지금까지 보내지 않은 모든 것을 보내라는 메시지가 매분마다 처리됩니다. 약간의 주름은 오버런이 발생하면 즉시 다시 실행해야한다는 것입니다. 지속적으로 오버런되면 용량 문제가 있습니다.

포인트는 매우 간단합니다. 명확하게 정의 된 작업을 수행하고 특별히 복잡한 작업을 수행하지 않는 고 빈도 작업이있는 교환 프로세스가 있습니다. table = sent와 false를주고 < 값을 보냄) - 전송을 완료 한 후 단일 쿼리 업데이트를 실행할 수 있도록 임시 테이블에 저장 - 인덱스를 최적화 할 수 있습니다. 거대한 더미의 이벤트 트리거를 대기 행렬에 넣으려고하지 않고 단지 1 분에 한 번 실행되고 만기가되는 것을 처리합니다.