2012-06-04 3 views
1

동시에 동일한 blob에서 임대를 얻으려고하는 여러 개의 COMPUTE 인스턴스가있는 경우에는 상당히 자주 성공한 것 같습니다. 나는 한 번 임대 계약이 주어지면서 (따라서 고객이 인수 한) 다른 서버가 동시에 제공 될 수 없어야한다는 인상하에있었습니다.얼룩에 대한 다중리스 획득

저는 Azure에서 BLOB 임대를 분산 잠금으로 사용하고 싶습니다. @Smarx으로

:

답변

2

당신은 정확한 답을 얻기 위해 @Smarx에서 "리스와 윈도우 Azure에서 동시성 관리"이 문서를 읽을 필요 "A 임대는 잠금의 분산과 동일 잠금입니다. 분산 시스템에서 구성 요소 나 네트워크가 작동하지 않을 때 시스템 전체가 교착 상태에 빠지기 쉽기 때문에 빌트인 타임 아웃이 있기 때문에리스가 문제를 해결합니다. 다시 접근 가능해. "

http://blog.smarx.com/posts/managing-concurrency-in-windows-azure-with-leases

0

는만큼 임대가 개최 될 때, 또 다른 임대 획득 할 수 없습니다. 그러나 갱신되지 않으면 임대가 만료됩니다.

+0

답장을 보내 주셔서 감사합니다. 실제로 [github] (https://github.com/smarx/WazStorageExtensions/blob/master/AutoRenewLease.cs)에서 코드를 사용하고있었습니다. AutoRenewLease.Dispose() 메서드에서 임대가 수동으로 해제되었습니다. 한 스레드가 임대를 해제하고 두 번째 스레드가 임대를 획득 할 수 있습니다. 전달 된 액션은 두 번 호출됩니다. – robertkroll

+0

나는 잘 모르겠다. 코드를 공유하거나 할 일을 더 잘 설명해 주시겠습니까? 한 스레드가 임대를 해제하면 다른 스레드는이를 가져올 수 있어야합니다. – smarx

+0

물론입니다. 그러나 호출 할 동작은 한 번만 발생해야합니다. 두 스레드가 AutoRenewLease를 사용하면 스레드가 AutoRenewLease 생성자를 입력하고 두 번째리스를 획득 할 수있는 동안 한 스레드가 임대를 획득하고 작업을 수행하며 임대를 릴리스하는 경우가 발생할 수 있습니다. 따라서 액션은 결코 일어나지 않아야하는 두 번 호출됩니다. Dispose() 메서드에서 _blob.ReleaseLease() 줄을 제거했습니다. – robertkroll