우리는 StackOverflow에서 흥미로운 문제를 다루고 있습니다.
우리는 "조만간해야 할"작은 일들이 많이 있습니다. 예를 들어 "관련 질문"목록을 업데이트하고 있습니다. 과거에 우리가 한 일은 이러한 작업을 일부 사용자의 페이지로드로 피기 백하는 것입니다.
이것은 이상적이지 않았지만 실제로 눈에 띄지는 않았습니다. SO가 1,000,000 개의 물음표를 통과 했으므로, 운이 좋지 않은 사용자는 그것을 느끼기 시작했습니다.
자연스러운 해결책은 실제로 이러한 작업을 백그라운드로 푸시하는 것입니다. 내가 생각하고있는 두 가지 광범위한 방법이 있습니다.
1. IIS에서 사용자 정의 Thread-Pool / Work-Queue로
기본적으로, 우리는 몇 개의 ( ThreadPool 이외의 IIS를 방해하지 않기 위해) 스레드를 돌리고 Funcs 에 밀어 넣는 일부 컬렉션을 서비스 하게합니다.
여기서 큰 프로는 단순성입니다. 우리는 마샬링에 대해 걱정할 필요가 없으며 외부 서비스가 작동하고 응답하는지 확인할 필요가 없습니다.
또한 모든 공통 코드에 액세스 할 수 있습니다.
단점은 백그라운드 스레드를 사용해서는 안된다는 것입니다. 내가 아는 이의는 모두 굶주린 IIS (ThreadPool을 사용하는 경우)와 스레드가 임의로 죽는 것 (AppPool 재활용으로 인해)에 집중되어 있습니다.
우리는 랜덤 쓰레드 데스를 이슈가 아닌 것으로 만들 수있는 기존 인프라를 가지고있다.
실제로 해결되지 않았으므로 StackOverflow로 이동했습니다 .
2. 서비스로
일부 타사 솔루션 또는 사용자 지정 솔루션
기본적으로 프로세스 경계를 넘어서 서비스를 일부 서비스에 마샬링하고 잊어 버립니다. 아마도 우리는 일부 코드를 링크하거나 원시 SQL + 연결 문자열로 제한하고 있습니다.
전문가는이를위한 "올바른 방법"입니다.
단점은 우리가 할 수있는 일이 매우 제한적이거나이 서비스를 코드 기반과 동기화하기 위해 일부 시스템을 개발해야한다는 것입니다. 또한 모든 모니터링 및 오류 로깅을 어떻게 든 연결해야하며 "IIS에서"옵션으로 무료로 사용할 수 있습니다.
서비스 접근 방식에 다른 이점이나 문제점이 있습니까?
간단히 말해서, 접근 # 1을 실현할 수 없게 만드는 예측할 수없고 극복 할 수없는 문제가 있습니까? 그렇다면 좋은 타사 서비스가 있다면 접근 # 2를 살펴 봐야합니까?