2011-08-31 40 views
5

Tôi đã tự hỏi về các phương pháp hay nhất trong việc đồng bộ hóa nhiều cá thể xanh chạy cùng một vai trò. Chính xác hơn, tôi muốn ngăn một số vai trò công nhân làm việc trên cùng một đơn vị công việc.Đồng bộ hóa vai trò của Azure

Hàng đợi Azure dường như không giúp ích gì cho vấn đề này. Một tùy chọn là sử dụng bảng sql có khóa và các thủ tục được lưu trữ; nhưng sử dụng đồng bộ hóa sql trong Azure có vẻ hơi khó xử.

Bất kỳ ý tưởng nào?

Chỉnh sửa, chi tiết (nhưng đơn giản hóa vấn đề) của tôi là như sau:

  • n mục tiêu.
  • Một đơn vị công việc phải được thực hiện trên mỗi mục tiêu tại một khoảng thời gian cụ thể (nói 30 giây - nhưng nó khác nhau đối với từng mục tiêu).
  • Tôi có m công nhân (được lưu trữ trong h trường hợp).
  • Xử lý một đơn vị công việc có thể mất từ ​​10 giây đến 1 giờ.

Ý tưởng là tôi có một scheduler mà đặt đơn vị làm việc trong một hàng đợi Azure, và mỗi m công nhân sẽ đọc những điều này và xử lý chúng.

Vấn đề:

  • worker1 bắt đầu làm việc trên unit1 (được liên quan đến target1) - một trong những điều này sẽ mất nhiều thời gian, nói 10 phút
  • 30 giây trôi qua
  • sự công cụ lập lịch biểu đặt một đơn vị công việc khác cho target1, nói unit13
  • worker2 bắt đầu làm việc trên unit13, so với cùng target1 - không tốt

Tôi có một số ý tưởng, nhưng họ không có vẻ mây đủ, vì vậy tôi đang quan tâm đến xem bạn sẽ áp dụng giải pháp nào cho vấn đề này.

+2

Tại sao bạn cho rằng hàng đợi sẽ không hoạt động ở đây? Hàng đợi là cách truyền thống để điều phối công việc cần được thực hiện một lần. Có một số sắc thái chắc chắn, nhưng trường hợp 90% là với hàng đợi. – dunnry

+0

Tôi đồng ý với câu trả lời của David, hàng đợi thường là một lựa chọn tốt. Mặc dù có những lúc bạn không thể làm hàng đợi. Nhưng nếu đúng như vậy, hãy mô tả chi tiết vấn đề của bạn và chúng tôi sẽ cố gắng cung cấp câu trả lời tốt hơn. –

+0

Trong thời gian đó, tôi đã đăng một ý tưởng cho UserVoice cho Azure - http://entlib.uservoice.com/forums/101257-windows-azure-integration-pack/suggestions/2050987-distributed-synchronization?ref=title cái gì đó có thể hữu ích cho những trường hợp đó khi Hàng đợi sẽ không hoạt động –

Trả lời

4

Tôi vừa mới viết một vài bài đăng trên blog về việc sử dụng blob cho thuê để thực hiện việc này. Xem http://blog.smarx.com/posts/managing-concurrency-in-windows-azure-with-leaseshttp://blog.smarx.com/posts/building-a-task-scheduler-in-windows-azure.

+0

Cảm ơn bạn rất nhiều vì câu trả lời. Trên thực tế, ý tưởng ban đầu của tôi là sử dụng hàng đợi để phân phối nhiệm vụ và các đốm màu để đồng bộ hóa, nhưng tôi đã sử dụng một thư viện khác. Tôi cũng sẽ lấy của bạn và kiểm tra nó. – Flavius

2

dunnry là spot-on: hàng đợi hoạt động tốt để ngăn không cho nhiều trường hợp hoạt động trên cùng một mục công việc. Khi bạn gọi GetMessage, tin nhắn bạn truy xuất hiện không hiển thị cho khoảng thời gian bạn chỉ định (mặc định: 30 giây). Trong khoảng thời gian đó, không người đọc nào khác có thể truy xuất thông điệp xếp hàng này.

Có nói rằng: Bạn cần đảm bảo quá trình xử lý của bạn là không cần thiết. Trong trường hợp quá trình xử lý của bạn mất nhiều thời gian hơn khoảng thời gian ẩn danh, thông báo sẽ hiển thị lại. Tại thời điểm này, người đọc ban đầu không thể xóa tin nhắn, và một số người đọc khác có thể đọc tin nhắn (làm cho nó một lần nữa vô hình).Trong trường hợp này, có thể bạn xử lý lại cùng một thông báo. Bạn sẽ cần phải cẩn thận đặt thời gian chờ của bạn để tránh điều này như một quy tắc chung.

Lưu ý: Mỗi CloudQueueMessage có thuộc tính DequeueCount, vì vậy bạn có thể xác định xem thư có được xem nhiều lần không (và vì vậy bạn cũng có thể xử lý thư độc).

+0

Làm rõ một chút - chủ sở hữu của cửa sổ bật lên cuối cùng là người duy nhất có thể xóa thông điệp xếp hàng. Vì vậy, ngay cả trong trường hợp một tin nhắn đã được 'nhìn thấy' một lần nữa, nó vẫn có thể bị xóa bởi người đọc ban đầu miễn là nó không được xếp hàng sau đó trong thời gian tạm thời (mà sẽ tạo ra một biên nhận pop mới). – dunnry

0

CloudFX có lớp PrimaryInstanceManager có thể được sử dụng cho một số trường hợp này.

Các vấn đề liên quan