문제

앞으로 웹 팜이 만들어 질 때까지 ...

전자 메일 보내기, 썸네일/처리 파일 등 다양한 백상 작업을 수행하는 다양한 Windows 서비스 응용 프로그램이 있습니다.

서버 팜 환경에서는 이론적으로 각 컴퓨터에 각 서비스를 설치하고 실행할 수 있지만 비즈니스 오브젝트 기반 "First-Write-Win"또는 바람직하지 않은 작업 복제로 인해 충돌이 발생할 수 있습니다. 때때로.

"첫 번째 쓰레기 윈"시나리오는 문제를 해결하거나 항목을 건너 뛰는 코드 또는 논리를 통해 극복 할 수 있습니다. (기본 대기열 메커니즘 (쿼리 목록 및 프로세스 레코드) 인 경우 다시 시도됩니다)

작업의 복제를 위해 다른 프로세스가 동일한 리소스를 잡는 것을 방지하기 위해 거래에서 작업을 수행 할 수 있지만, 기다릴 것이며 다시 발생하는 일에 따라 일부 로그인을 처리해야한다고 생각합니다. 이것이 사실일까요?

작업의 복제를 방지하기 위해 최초의 서비스가 설정할 데이터베이스에 "잠금 플래그"를 작성하는 메커니즘을 구축 할 수 있다고 생각합니다. 이 깃발은 날짜가 있으며 서비스 인스턴스를 참조합니다. "소유"하는 서비스는 깃발이 작업을 실행 하고이 날짜를 정기적으로 업데이트합니다. 서비스가 플래그를 소유하지 않은 상황에서 각 서비스에 대한 시간 초과/공차 설정이있을 것입니다. 허용 오차를 확인하고 필요한 경우 인수합니다.

이것은 공명 가능한 솔루션처럼 들리나요? 아니면 해당 단계에서 더 나은 메시지 대기열 기반 솔루션으로 가야합니까 (농장 환경에서 어떻게 작동하는지 잘 모르겠습니까?

tecnologies : c# / asp.net / sql server

도움이 되었습니까?

해결책

두 가지 메커니즘을 생각할 수 있습니다.

  1. 모든 작업이 데이터베이스 활동에서 파생 된 경우 새 "작업"테이블을 작성하고 작업 정보가 포함 된 새 레코드가 삽입되도록 활동을 트리거 할 수 있습니다. 그런 다음 Windows 서비스는 "작업"테이블을 폴링하고 원자 선택 및 삭제 트랜잭션을 사용하여 하나의 서비스 만 수행 할 수 있습니다.

  2. 메시지 대기열을 사용하고 작업을 삭제 한 다음 Windows 서비스가 큐를 설비하도록 할 수 있습니다. 각 대기 메시지는 단일 서비스로만 탈취 할 수 있으므로 각 작업이 한 번만 수행되도록 할 수 있습니다. 물론 메시지 대기열의로드에 대해 걱정해야합니다. 응용 프로그램에 따라 Amazon의 간단한 대기열 서비스와 같은 것을 사용하여 신뢰성과 확장성에 대해 걱정해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top