2011-08-31 3 views
5

동일한 역할을하는 여러 파란색 인스턴스를 동기화하는 모범 사례에 대해 궁금합니다. 좀 더 정확히 말하면, 여러 작업자 역할이 동일한 작업 단위에서 작동하지 못하도록하고 싶습니다.Azure 역할 간 동기화

하늘빛 대기열은이 문제에 도움이되지 않습니다. 하나의 옵션은 잠금 및 저장 프로 시저가있는 SQL 테이블을 사용하는 것입니다. 그러나 Azure에서 SQL 동기화를 사용하는 것은 약간 어색한 것으로 보입니다.

아이디어가 있으십니까?

  • N 목표 있습니다 : 다음과 같이

    편집, 내 세부 (그러나 간단한 문제)입니다.

  • 작업 단위 (UOW)는 지정된 간격 (예 : 30 초 - 각 대상마다 다름)으로 각 대상에서 수행되어야합니다.
  • 저는 m 명의 근로자가 있습니다 (h 인스턴스에서 호스팅 됨).
  • 작업 단위 (UOW)를 처리하는 데는 10 초에서 1 시간이 걸릴 수 있습니다.

아이디어 내가 푸른 대기열에서 작업 단위를두고 스케줄러을 가지고 있고, m 근로자의 각이를 읽고이를 처리 할 것입니다.

문제 :

  • worker1에 시작은 (이 target1가 관련되어) 유니트 1 작업 -이 사람이 오래 걸릴 것입니다, 10 분
  • 30 초
  • 을 통과 말 스케줄러가 다른 작업 단위를 대상 1, 예를 들어 unit13
  • 나는 몇 가지 아이디어를 가지고 있지만, 그들은 흐린 충분하지 않는 것, 그래서에 관심이

좋지 않다 - 같은 이 target1에 대해, unit13 작업

  • worker2에 시작 이 문제에 대해 어떤 솔루션을 적용 할 것인지 확인하십시오.

  • +2

    왜 대기열이 여기에서 작동하지 않을 것이라고 생각하십니까? 대기열은 한 번 수행해야하는 작업을 조정하는 전통적인 방법입니다. 약간의 미묘한 차이가 있지만 90 %의 경우에는 대기열이 있습니다. – dunnry

    +0

    David의 답변에 동의합니다. 대기열은 일반적으로 좋은 옵션입니다. 대기열을 수행 할 수없는 경우도 있습니다. 그러나 그러한 경우 문제를 자세하게 설명하십시오. 더 나은 답변을 제공하려고 노력할 것입니다. –

    +0

    나는 Azure를 위해 UserVoice에 아이디어를 게시했습니다. - http://entlib.uservoice.com/forums/101257-windows-azure-integration-pack/suggestions/2050987-distributed-synchronization?ref=title 대기열이 작동하지 않는 경우 유용 할 수 있습니다. –

    답변

    4

    방금 ​​BLOB리스를 사용하여 블로그 게시물을 작성했습니다. http://blog.smarx.com/posts/managing-concurrency-in-windows-azure-with-leaseshttp://blog.smarx.com/posts/building-a-task-scheduler-in-windows-azure을 참조하십시오.

    +0

    답변 해 주셔서 감사합니다. 사실, 원래의 아이디어는 작업 배포를위한 대기열과 동기화를위한 대기열을 사용하는 것이지만 다른 라이브러리를 사용하고있었습니다. 나는 너의 것을 가져다가 시험해 보겠다. – Flavius

    2

    dunnry는 spot-on입니다. 대기열은 여러 인스턴스가 동일한 작업 항목에서 작업하지 못하게하는 데 효과적입니다. GetMessage으로 전화하면 검색 한 메시지가 지정한 시간대에 표시되지 않습니다 (기본값 : 30 초). 그 시간대에 다른 어떤 독자도이 대기열 메시지를 검색 할 수 없습니다.

    다음과 같이 말하면 : 귀하의 처리가 멱등수인지 확인해야합니다. 처리 시간이 보이지 않는 시간보다 오래 걸리면 메시지가 다시 표시됩니다. 이 시점에서 원래의 독자는 메시지를 삭제할 수 없으며 일부 다른 리더 메시지를 읽습니다 (다시 한번 보이지 않음).이 경우 동일한 메시지를 다시 처리 할 수 ​​있습니다. 일반적으로이 문제를 방지하려면 타임 아웃 창을 신중하게 설정해야합니다.

    참고 : 각 CloudQueueMessageDequeueCount 속성을 가지므로 메시지가 두 번 이상 표시되는지 (따라서 독이있는 메시지도 처리 할 수 ​​있음) 확인할 수 있습니다.

    +0

    하나의 사소한 설명 - 마지막 대기열 수신자의 소유자 만 대기열 메시지를 삭제할 수 있습니다. 따라서 메시지가 다시 '가시적'으로 된 경우에도 임시로 대기열에서 빠져 나오지 않는 한 원래 판독기에서 삭제할 수 있습니다 (새로운 팝 영수증을 생성 함). – dunnry

    0

    CloudFX에는 이러한 시나리오 중 일부에 사용할 수있는 PrimaryInstanceManager 클래스가 있습니다.

    관련 문제