2009-08-26 39 views
9

Tôi hiện đang thiết kế một ứng dụng mà cuối cùng tôi sẽ muốn chuyển sang Windows Azure. Trong ngắn hạn, tuy nhiên, nó sẽ được chạy trên một máy chủ mà tôi sẽ lưu trữ bản thân mình.Chiến lược tốt cho thư xếp hàng?

Ứng dụng này bao gồm một số ứng dụng web riêng biệt - một số trong số này chủ yếu là các dịch vụ WCF nhận dữ liệu và một số là các trang web để người dùng quản lý dữ liệu. Ngoài ra, sẽ cần phải có một dịch vụ công nhân đang chạy trong nền sẽ xử lý dữ liệu theo nhiều cách khác nhau.

Tôi rất muốn sử dụng kiến ​​trúc được tách riêng cho việc này. Lý tưởng nhất là tôi muốn các thành phần (ví dụ: các ứng dụng web và dịch vụ công nhân) biết càng ít càng tốt về nhau. Dường như việc sử dụng hàng đợi tin nhắn sẽ là giải pháp tốt nhất ở đây - các ứng dụng web có thể enqueue tin nhắn với đơn vị công việc vào hàng đợi và dịch vụ công nhân có thể chọn chúng và xử lý chúng khi cần thiết.

Tuy nhiên, tôi muốn tập hợp các công nghệ tốt để thực hiện việc này, nhớ rằng cuối cùng tôi sẽ chuyển sang Azure và muốn giảm thiểu số lượng công việc tôi sẽ cần làm khi tôi di chuyển sang đám mây. Azure có một thành phần Queue được xây dựng trong đó có vẻ lý tưởng cho các nhu cầu của tôi. Những gì tôi muốn làm là tạo ra một cái gì đó bản thân mình mà sẽ bắt chước này càng chặt chẽ càng tốt.

Dường như có một số tùy chọn (Tôi đang sử dụng .NET trên Windows, với một SQL Server vào cuối năm 2005 trở lại) - những cái tôi đã tìm thấy cho đến nay là:

  • MSMQ
  • SQL server môi giới dịch vụ
  • lăn riêng tôi sử dụng một bảng cơ sở dữ liệu và một số được lưu trữ procs

tôi đã tự hỏi nếu có ai có bất cứ đề nghị cho điều này - hoặc nếu có ai đã làm bất cứ điều gì tương tự và có lời khuyên về điều cần làm/để tránh. Tôi nhận ra rằng mọi tình huống đều khác nhau, nhưng trong trường hợp này tôi nghĩ rằng các yêu cầu xếp hàng của tôi khá phổ biến nên tôi rất muốn nghe suy nghĩ của người khác về cách tốt nhất để làm điều này.

Cảm ơn trước,

John

Trả lời

18

Nếu bạn có Azure trong tâm trí, có lẽ bạn nên bắt đầu ngay trên Azure như các API và semnatics là khác nhau đáng kể giữa các hàng đợi Azure và bất kỳ MSMQ hoặc SSB.

Một 3048 mét nhanh chóng so sánh của MSMQ vs SSB (Tôi sẽ để lại một tùy chỉnh bảng-as-hàng đợi ra so sánh vì nó thực sự phụ thuộc vào cách bạn thực hiện nó ...)

  • Deployment : MSMQ là một thành phần Windows, SSB là một compoenent SQL. SSB yêu cầu một cá thể SQL để lưu trữ bất kỳ thư nào, vì vậy các ứng dụng bị ngắt kết nối cần truy cập vào một cá thể (có thể là Express). MSMQ yêu cầu triển khai MSMQ trên máy khách (một phần của hệ điều hành, nhưng cài đặt tùy chọn).
  • Khả năng lập trình: MSMQ cung cấp kênh WCF được hỗ trợ đầy đủ. SSB chỉ cung cấp kênh WCF thử nghiệm tại http://ssbwcf.codeplex.com
  • Hiệu suất: SSB sẽ nhanh hơn đáng kể so với MSMQ ở chế độ giao dịch.MSMQ sẽ nhanh hơn nếu hoạt động ở chế độ không được giao dịch (nỗ lực tốt nhất, không sắp xếp, phân phối)
  • Khả năng đáp ứng: Hàng đợi SSB có thể là SELECTE-ed uppon (xem bất kỳ thông báo nào, toàn bộ lệnh SQL JOIN/WHERE/ORDER/GROUP), Có thể nhìn thấy hàng đợi MSMQ (chỉ tin nhắn tiếp theo)
  • Khả năng phục hồi: Hàng đợi SSB được tích hợp trong cơ sở dữ liệu để sao lưu và khôi phục cơ sở dữ liệu, giữ trạng thái đồng ý với trạng thái ứng dụng. Hàng đợi MSMQ được sao lưu trong tệp phụ sao lưu NT, do đó, để giữ sao lưu đồng bộ (kết hợp), cơ sở dữ liệu hàng đợi phải bị treo.
  • Giao dịch (vì mỗi lần enqueue/dequeue là luôn kèm theo cập nhật cơ sở dữ liệu): SSB được tích hợp đầy đủ trong SQL để khử và enqueueing là các hoạt động giao dịch cục bộ. MSMQ là một TM riêng biệt (Transaction Manager) nên hàng đợi/dequeue phải là một hoạt động giao dịch phân tán để đăng ký cả SQL và MSMQ trong giao dịch.
  • Quản lý và giám sát: cả hai đều xấu. Không có công cụ nào.
  • Tin nhắn tương ứng xử lý: SSB có thể chặn xử lý thông điệp tương quan theo chủ đề đồng nhất qua tích hợp Conversation Group Locking.
  • Điều khiển sự kiện: SSB có Activation để khởi chạy các thủ tục được lưu trữ, MSMQ sử dụng dịch vụ Windows Activation. Giống. SSB mặc dù có cân bằng tải tự cân bằng do cách WAITFOR (RECEIVE) và MAX_QUEUE_READERS tương tác.
  • Tính khả dụng: SSB piggybacks trên SQL Server Tính khả dụng cao, nó có thể hoạt động trong môi trường được nhóm hoặc trong cơ sở dữ liệu. MSMQ chỉ sử dụng câu chuyện phân cụm Windows. Cơ sở dữ liệu Mirroring rẻ hơn nhiều so với clustering như là một giải pháp HA.

Ngoài ra tôi muốn thêm rằng SSB và MSMQ khác biệt đáng kể ở cấp ofthe nguyên thủy chúng tôi cung cấp: SSB nguyên thủy là một cuộc trò chuyện , trong khi MSMQ nguyên thủy là một thông điệp . Hãy suy nghĩ ngữ nghĩa của TCP so với UDP.

+0

Cảm ơn! Điều đó rất hữu ích. Có vẻ như MSMQ có thể là một lựa chọn tốt hơn cho mục đích của chúng tôi - tôi đoán một bước tiếp theo sẽ là so sánh MSMQ với Azure xếp hàng. Tôi biết, ví dụ, Azure không đảm bảo tin nhắn sẽ được gửi theo thứ tự (hoặc chỉ một lần) vì vậy tôi sẽ cần phải kiểm tra này chống lại MSMQ để xem những gì hành vi tương ứng là. Nhưng nhờ một lần nữa cho điều này - đó là một so sánh rất nhiều thông tin. – John

10

Chọn kết thúc hàng đợi phù hợp với bạn hoặc phù hợp hơn với môi trường của bạn. @Remus đã đưa ra một so sánh tuyệt vời giữa MSMQ và SSB. MSMQ sẽ dễ thực hiện hơn, nhưng có một số hạn chế đáng chú ý, trong khi SSB sẽ cảm thấy rất nặng nề khi nó ở đầu kia của quang phổ.

Have It Way của bạn
Để giảm thiểu làm lại từ bạn ứng dụng, trừu tượng hàng đợi truy cập vào đằng sau một giao diện, và sau đó cung cấp một thực hiện cho việc vận chuyển hàng đợi cuối cùng bạn quyết định đi với. Khi đến lúc chuyển sang Azure hoặc vận chuyển hàng đợi khác, bạn chỉ cần cung cấp một triển khai mới cho giao diện của mình.

Bạn có thể kiểm soát ngữ nghĩa về cách bạn muốn tương tác với hàng đợi để cung cấp API có thể sử dụng nhất quán từ các ứng dụng của bạn.

Một ý tưởng thô có thể là:

interface IQueuedTransport 
{ 
    void SendMessage(XmlDocument); 
    XmlDocument ReceiveMessage(); 
} 

public class MSMQTransport : IQueuedTransport {} 
public class AzureQueueTransport : IQueuedTransport {} 

Bạn có thể không được xây dựng be-tất cả các phương tiện giao thông xếp hàng, chỉ là những gì đáp ứng nhu cầu của bạn. Nếu bạn làm việc với Xml, vượt qua xml. Nếu bạn làm việc trong mảng byte, vượt qua mảng byte.:)

Chúc bạn may mắn!
Z

0

Sử dụng Win32 Mailslots. Chúng sẽ đáng tin cậy trên một máy chủ duy nhất, dễ thực hiện và không yêu cầu bất kỳ phần mềm bổ sung nào.

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