0

우리는 앞으로 전송할 데이터를 얻기 위해 다양한 전송을 통해 제 3 자와 통합해야하는 프로젝트를 준비하고 있습니다.Azure Worker의 여러 인스턴스 비 트랜잭션 통합 작업을위한 역할

WCF 끝점과 같은 항목 & 웹 API 나머지 끝점은 정상입니다.

그러나 2 시나리오에서는 pop3 계정에서 xml을 포함하는 자동 생성 전자 메일을 선택하거나 외부 SFTP 계정에서 XML 파일을 가져와야합니다.

지금부터 프로토 타입을 시작하려고합니다. 그러나 다중 인스턴스 작업자 역할 환경에서 이러한 비 트랜잭션 시스템을 처리하는 방법에 대한 표준 사례, 패턴 또는 지침이 있는지 궁금합니다. 즉

동시에 2 명의 근로자가 동시에 팝 계정에 연결하거나 동일한 FTP에 연결하면 어떻게됩니까?

다른 사람이 다운로드 중간에있는 동안 1 명의 작업자가 FTP에서 파일을 삭제하면 어떻게됩니까?

중복을 제어하면 문제가되지 않아야합니다. 애플리케이션 측의 모든 것을 데이터베이스에 로깅 할 것이고, 모든 것이 고유하게 식별 가능해야합니다. if-not-exists-create-else를 추가 할 수 있어야합니다. - 직원들에게 논리를 넘겨 줘야하지만 더 탄력적 인/멱등동을 만들기 위해 고려해야 할 것이 있는지 궁금 할뿐입니다.

답변

1

데이터가 주로 파일과 이메일이기 때문에 당신이 할 수있는 일은 작업자 역할을 통해 직접 처리하는 대신 블롭 저장소에 저장하는 것입니다. 따라서 POP3 서버/SFTP 사이트를 주기적으로 폴링하고 거기에서 데이터를 가져 와서 BLOB 저장소에 밀어 넣는 작업자 역할 인스턴스가있을 것입니다. 블롭이 쓰여질 때, 같은 인스턴스는 소스에서 데이터를 삭제할 수 있습니다. 이 방법을 사용하면 blob을 덮어 쓰기 (각 메시지/파일에 고유 한 식별자가 있고 blob의 이름이 해당 식별자라고 가정)하기 때문에 중복 레코드에 대해 걱정할 필요가 없습니다.

파일이 BLOB 저장소에 저장되면이 BLOB에 대한 세부 정보가있는 Windows Azure 대기열에 BLOB URL 등의 메시지를 작성할 수 있습니다. 그런 다음 Windows Azure 대기열의 '가져 오기'의미를 사용하여 작업자 역할 인스턴스가 이러한 메시지를 가져 와서 처리하기 시작합니다. Get 의미론으로 인해 큐에서 메시지를 가져 오면 다른 호출자 (이 경우 작업자 역할 인스턴스)는 보이지 않게됩니다. 이렇게하면 중복 메시지 처리를 처리 할 수 ​​있습니다. 이를 위해

UPDATE

So I'm trying to combat against two competing instances pulling the same file at the same moment from the SFTP

, 내가 좋아 Master/Slave Concept : 피치 것이다. 본질적으로 아이디어는 각 인스턴스가 하나의 blob에 임대를 얻으려고 시도한다는 것입니다. 리스를 얻는 인스턴스는 마스터가되고 다른 인스턴스는 슬레이브가됩니다. 마스터는 슬레이브가 대기하는 동안 SFTP에서 데이터를 가져옵니다. 나는 블로그 포스트에서이 개념을 설명했다 : 여기서는 http://gauravmantri.com/2013/01/23/building-a-simple-task-scheduler-in-windows-azure/을 읽을 수있다. 그러나 블로그의 맥락은 다소 다르다.

+0

정확히 내가하고자하는 것은 :-) (위대한 마음). 그런 다음이 수신기는 무거운 짐을 수행 할 다른 작업을 위해 대기열에서 작업을 팝업합니다.(a ProcessorWorkerRole) 그래서 나는 SFTP에서 같은 순간에 같은 파일을 당기는 두 경쟁 인스턴스에 맞서 싸우려고하고있어. –

+0

내 대답이 업데이트되었습니다. –

+0

아 ... 꽤 재미있을 것 같습니다. 고마워. –