NServiceBus so với MassTransit


85

Tôi đang đấu tranh với danh sách ưu và nhược điểm liên quan đến NServiceBus và MassTransit.

Bây giờ tôi biết đã có một chủ đề ở đây, nhưng nó không thực sự trả lời câu hỏi của tôi.

Đây là những gì tôi đã đọc cho đến nay:

  1. NServiceBus, vâng, nó được cấp phép và không miễn phí.
  2. MassTransit, vâng, nó là mã nguồn mở, nhưng tài liệu có vẻ thiếu phần nào.

NServiceBus cũ hơn và có nhiều tài liệu tham khảo hơn. Thật khó để tìm thông tin về MassTransit, nhưng tôi rất cởi mở. Tuy nhiên, tôi phải đưa ra một giải pháp vững chắc, và vì vậy tôi phải hỏi.

Vì vậy, xin vui lòng, một người có kinh nghiệm với cả hai khuôn khổ. Tại sao tôi nên chọn NServiceBus? HOẶC Tại sao tôi nên chọn MassTransit?

Đó là hiệu suất, bảo mật, quy mô hay?

Câu trả lời:


102

Nếu tôi phải tóm tắt, đây là những gì tôi muốn nói:

Nếu bạn cần hỗ trợ thương mại, hãy sử dụng NServiceBus. Nếu bạn cảm thấy thoải mái với việc sử dụng diễn đàn như một phương tiện hỗ trợ, thì MassTransit là một lựa chọn tuyệt vời. Các nhà phát triển đã rất phản hồi các vấn đề của chúng tôi cho đến nay. Nếu bạn chọn MassTransit, bây giờ bạn sẽ chọn giữa MSMQ và RabbitMQ. Nếu bạn cần DTC, hãy sử dụng MSMQ. Nếu bạn muốn có nhiều tính năng hơn và quản trị tốt hơn, hãy sử dụng RabbitMQ.

Trong dự án của chúng tôi, chúng tôi chuyển từ NServiceBus sang MassTransit vì hai lý do:

  1. MassTransit miễn phí
  2. Chúng tôi yêu RabbitMQ

Tôi đã sử dụng cả hai khuôn khổ. Tôi đã sử dụng MassTransit lâu hơn NServiceBus. Đây là những điểm nổi bật như tôi thấy.

Giá cả:

  • MassTransit là Apache 2.0 được cấp phép và miễn phí để sử dụng sản xuất thương mại, trong khi NServiceBus thì không.

Ủng hộ:

  • Như Udi đã đề cập, có một tùy chọn để hỗ trợ NServiceBus thương mại, tôi chưa thấy điều đó cho MassTransit.

Vận chuyển:

  • MassTransit hỗ trợ MSMQ và RabbitMQ
  • NServiceBus chỉ hỗ trợ MSMQ RabbitMQ được hỗ trợ trong NServiceBus 4+

RabbitMQ vs MSMQ:

  • MSMQ hỗ trợ DTC (điều phối viên giao dịch phân tán) cho các giao dịch liên quan đến nhiều quy trình trên nhiều máy có khả năng xảy ra (ví dụ: máy chủ SQL, Dịch vụ Windows)
  • RabbitMQ có giao diện Quản trị tuyệt vời
  • MSMQ đã tồn tại lâu hơn và là một sản phẩm của Microsoft
  • RabbitMQ mới hơn, mã nguồn mở, miễn phí và được tài trợ bởi VMWare
  • MSMQ được cài đặt trên hầu hết các máy Windows theo mặc định

Udi Dahan và các anh chàng MassTransit (Chris Patterson, Dru Sellers, và Travis Smith) đều là những người tài giỏi.


8
Câu trả lời tốt, Clay. Cho phép tôi thêm điều đó trong phiên bản tiếp theo (sẽ ra mắt sau vài tuần) NServiceBus cũng sẽ hỗ trợ ActiveMQ. Chúng tôi đã cố tình trì hoãn việc hỗ trợ RabbitMQ cho đến khi chúng tôi có thể đưa ra một câu chuyện khử trùng lặp mạnh mẽ để bù đắp cho việc thiếu DTC - đó là kế hoạch cho năm tới. MassTransit không thực hiện việc khử trùng lặp này (nhưng nó có thể nằm trong lộ trình của họ, tôi không biết).
Udi Dahan

1
Thật tuyệt khi nghe. Việc thiếu các giao dịch end-to-end thực sự sẽ là yếu tố phá vỡ giao dịch đối với các hệ thống quan trọng.
Clay

Chúng tôi đã thiết lập một hệ thống bằng nServiceBus và chúng tôi thực sự thích sự phản hồi từ cộng đồng và nhìn chung nó khá dễ dàng để cấu hình. Chúng tôi sử dụng MSMQ cho đến bây giờ vì nó là điểm chung hơn. Tuy nhiên, mặc dù nServiceBus có nhiều mô hình cấp phép, tôi vẫn khá bối rối về việc tôi (hoặc nhóm của chúng tôi) sẽ phải mua giấy phép nào để phù hợp với các điều khoản sử dụng. Nhóm có khoảng 5 người, mỗi người trong số họ sẽ lập trình dựa trên API, nhưng nhiều hơn ở chế độ POC (có trong sản xuất :)). MassTransit là tiếp theo để xem xét. Nó có vẻ được ghi lại khá tốt.
Guillaume Schuermans

MassTransit không có hỗ trợ thương mại cũng như không có bất kỳ ai trong chúng tôi có kế hoạch cung cấp nó, tại thời điểm này. Tôi sẽ đề xuất danh sách gửi thư để hỗ trợ MassTransit nhưng tôi có nội dung được gắn thẻ MassTransit hiển thị trong trình đọc RSS của tôi, vì vậy tôi thường trả lời trong vòng một hoặc hai ngày trên SO.
Travis

Đối với MT, bạn cũng có thể tham gia cuộc trò chuyện Gitter
CrusherJoe

36

Là tác giả ban đầu của NServiceBus, tôi có lẽ hơi thiên vị về công nghệ của riêng mình, nhưng tôi sẽ cố gắng giữ điều này cân bằng nhất có thể.

Hỗ trợ vận chuyển

Cả NServiceBus và MassTransit đều hỗ trợ RabbitMQAzure Service Bus , nhưng NServiceBus cũng hỗ trợ:

Về chủ đề RabbitMQ

Lập luận có thể được đưa ra rằng NServiceBus hỗ trợ mạnh mẽ hơn cho RabbitMQ - ví dụ: trong chức năng phân phối bị trì hoãn trong khi Mass Transit tuyên bố rằng "plugin của họ vẫn được coi là thử nghiệm. Nó được hỗ trợ bởi MassTransit, nhưng chúng tôi không thể đảm bảo bất kỳ điều gì hơn ngoài plugin tự đảm bảo. "

Chúng tôi cũng làm việc rất chặt chẽ với nhóm RabbitMQ, đóng góp vào SDK .net vì lợi ích của toàn bộ hệ sinh thái.

Khi nói đến Xe buýt Dịch vụ Azure

Mức độ cộng tác mà chúng tôi có với nhóm Azure Service Bus thậm chí còn cao hơn, với hơn 70 PR cho SDK lõi .net của họ .

Khi bạn sử dụng NServiceBus, bạn được hưởng lợi từ toàn bộ kiến ​​thức chuyên sâu đó.

Dụng cụ

Đây là điểm khác biệt lớn nhất.

Khi bạn đã xây dựng được một hệ thống đáng kể, thì việc có tầm nhìn về cách tất cả các bộ phận chuyển động khác nhau nói chuyện với nhau trở nên thực sự quan trọng. MassTransit không có nhiều thứ trong lĩnh vực này ngoài một tích hợp nhỏ thông qua Nguồn chẩn đoán với các công cụ của bên thứ 3 như Thông tin chi tiết về ứng dụng hoặc Theo dõi mở.

Nền tảng dịch vụ xung quanh NServiceBus đi xa hơn một chút, cho bạn khả năng xem sơ đồ trình tự trên tất cả các điểm cuối với ServiceInsight :

Biểu đồ trình tự với ServiceInsight

Bạn cũng có thể có được chế độ xem logic của tất cả các điểm cuối và thông báo của mình:

Quan điểm logic của hệ thống NServiceBus

Về bản chất, bạn nhận được tài liệu sống về kiến ​​trúc hệ thống của mình.

Quản lý & Giám sát

Đây là một lĩnh vực khác mà MassTransit không có nhiều. Khi hệ thống của bên thứ ba mà bạn đang tích hợp trở nên không khả dụng và một loạt thông báo trong hệ thống của bạn kết thúc trong hàng đợi lỗi, giải pháp duy nhất mà MassTransit có để bạn di chuyển các thông báo đó trở lại theo cách thủ công sau này bằng cách sử dụng plugin RabbitMQ Shovel .

Nền tảng dịch vụ xung quanh NServiceBus bao gồm việc giám sát hàng đợi lỗi đó, công cụ đồ họa để xem nguyên nhân của những lỗi đó là gì, cũng như khả năng phát lại nhóm của những thông báo bị lỗi đó và xem chúng đã được xử lý thành công thực sự trong một ứng dụng web đơn giản. được gọi là ServicePulse .

Không thể nhóm thư với ServicePulse

Ngoài ra còn có hình ảnh về các kiểm tra sức khỏe được chạy định kỳ có thể đưa ra cảnh báo sớm về các vấn đề trước khi các thông báo bắt đầu không thành công.

Và cuối cùng, có giám sát hiệu suất có sẵn trong nền tảng:

Giám sát hiệu suất NServiceBus

Bạn thực sự nhận được gói đầy đủ khi nói đến hỗ trợ sản xuất.

Hỗ trợ lâu dài & Tương thích ngược

Mặc dù những người của Mass Transit luôn cực kỳ giỏi trong việc giúp đỡ bất kỳ ai có thắc mắc về vấn đề này trên Gitter hoặc Nhóm Google của họ , nhưng tôi không nghĩ rằng họ cung cấp các bản sửa lỗi trên các phiên bản cũ hơn. Khi hệ thống sản xuất của bạn đã tồn tại được vài năm và bạn không thể luôn nâng cấp mọi thứ, điều đó bắt đầu quan trọng.

Với NServiceBus hỗ trợ bao gồm :

  • Hơn 2 năm cho mỗi phiên bản chính
  • Thêm 2 năm hỗ trợ mở rộng
  • Thời gian phản hồi được đảm bảo về các vấn đề quan trọng
  • Tính khả dụng 24x7

Tư vấn & Đào tạo

Từ góc độ ngoại tuyến, có các khóa học công khai trên khắp thế giới trên NServiceBus cũng như nhiều chuyên gia tư vấn có thể được đưa đến tận nơi để bắt đầu một dự án hoặc để hỗ trợ trong trường hợp có vấn đề. Tôi đã nghe tin từ một số công ty quyết định chuyển từ MassTransit sang NServiceBus vì họ không thể tìm được ai đó tại chỗ khi họ cần.

Cấp phép

Điều mà một số người vẫn chưa biết về NServiceBus là nó MIỄN PHÍ cho mục đích sử dụng cá nhân và khởi nghiệp .

MIỄN PHÍ cho sử dụng cá nhân và khởi động

Khi nói đến việc sử dụng thương mại , các mô hình cấp phép xung quanh NServiceBus rất linh hoạt, như phạm vi rộng của khách hàng cho thấy và có thể được chứng minh tốt cho ban quản lý. Tất nhiên, với MassTransit, việc cấp phép là miễn phí.

Hy vọng rằng sẽ giúp một cách nào đó.


6
Tôi muốn nghe những gì bạn nói về MassTransit theo cách không thiên vị. Cố gắng 'bảo vệ' việc triển khai MassTransit theo một cách nào đó. Tuy nhiên, tôi thực sự thích nServiceBus, chúng tôi chỉ đang vật lộn với chi phí giấy phép để thử điều này trong môi trường sản xuất thực nhưng chỉ dành cho các tính năng mới được bổ sung trong nền tảng của chúng tôi. Bạn có thể nói bằng chứng về mã khái niệm.
Guillaume Schuermans

1
Còn những khác biệt về kỹ thuật thì sao? Còn về độ tin cậy, chống trùng lặp, gửi tin nhắn lớn, v.v. Làm thế nào để các khung / biểu mẫu này so sánh? Có danh sách nào so sánh nhiều bus nhắn tin theo cách này không?
Steven

1
Theo như tôi biết, @Steven, MassTransit không có chức năng khử trùng lặp được tìm thấy trong tính năng Hộp thư đi của NServiceBus. Một phần của vấn đề với việc cung cấp loại danh sách bạn muốn là mỗi công nghệ này tiếp tục phát triển, điều này sẽ làm cho bất kỳ danh sách nào thuộc loại đó trở nên cũ kỹ.
Udi Dahan

@udidahan, có lẽ bạn nên cập nhật quan điểm của mình vì chúng ta sẽ kết thúc vào năm 2021. Tôi muốn biết liệu MT có phần nào được nâng cao công nghệ cốt lõi của nó trong vài năm qua cũng như NServiceBus hay không
Volkan Güven

Vâng, Volkan. Cả MassTransit và NServiceBus đã tiếp tục phát triển theo thời gian.
Udi Dahan

8

Tôi biết đã muộn để trả lời câu hỏi này, nhưng vì lý do dễ hiểu, tôi phải đề cập đến Rebus (mà tôi tình cờ là tác giả chính của nó).

Rebus bây giờ khoảng 8 tuổi, và nó đã được sử dụng để chuyển tiền xung quanh và kiểm soát các nhà máy điện ngay từ đầu.

Nó hỗ trợ hầu hết các hệ thống xếp hàng cơ bản, như MSMQ, RabbitMQ, Azure Service Bus, Azure Storage Queues, Amazon SQS, v.v., nhưng nó cũng hỗ trợ nhiều thứ vui nhộn hơn như sử dụng MSSQL, PostgreSQL và Oracle làm phương tiện vận chuyển.

Tài liệu wiki khá toàn diện, mặc dù nhiều người có vẻ hiểu được, bởi vì các API của Rebus rất dễ phát hiện.

Rebus luôn (và sẽ luôn) hoàn toàn miễn phí. Nó được MIT cấp phép, vì vậy về cơ bản bạn có thể làm với nó những gì bạn cảm thấy thích.

Nếu bạn là một người dùng Rebus nghiêm túc và bạn cần một thỏa thuận hỗ trợ chính thức và thêm công cụ, bạn có thể đăng ký Rebus Pro , được cung cấp bởi Rebus FM (công ty đứng sau Rebus).

"Công cụ bổ sung" được đề cập ở trên hiện đang ở dạng Fleet Manager , có thể giúp bạn giải quyết mọi việc. Ví dụ: Fleet Manager thay thế hoàn toàn các hàng đợi lỗi , vì vậy các thông báo lỗi sẽ được lưu trữ ở đó. Điều này có nghĩa là các tin nhắn bị lỗi có thể được xem, quản lý và thử lại bất cứ lúc nào bằng một vài cú nhấp chuột trong Fleet Manager.


2
Rebus bị đánh giá thấp. Đó là một viên ngọc nhẹ thực sự trong hệ sinh thái .NET.
ThomasDC

4

Bạn luôn có thể sử dụng Shuttle (FOSS): https://github.com/Shuttle/shuttle-esb :)

Tài liệu (luôn cải tiến): http://shuttle.github.io/shuttle-esb/

Dự án Shuttle đã trải qua gần 2 năm và sử dụng hệ thống sản xuất. Vấn đề sẽ là lựa chọn những gì phù hợp với bạn.

NServiceBus có một thành tích tốt. Tôi đã sử dụng nó trước đây trên hệ thống sản xuất (1.9) nhưng không phải vì nó đã được thương mại hóa (thời điểm mà tôi bắt đầu với Shuttle).

Tôi chưa thử MassTransit.

Tôi đoán tất cả các tùy chọn của bạn sẽ có những điều cơ bản (lệnh / sự kiện / pub-sub). Tuy nhiên, NServiceBus không có sagas và dữ liệu bus mặc dù tôi nghĩ rằng nó đủ dễ dàng để xử lý dữ liệu bên ngoài bus dịch vụ, chẳng hạn như trong trình xử lý thông báo điểm cuối của bạn. Tôi không biết MassTransit có sagas / data bus hay không nhưng Shuttle chắc chắn không.

Một cân nhắc khác có lẽ là bạn dự định sử dụng xe buýt dịch vụ như thế nào. Nếu nó là một phần của một sản phẩm thì đối với một lựa chọn thương mại chẳng hạn như NServiceBus, bạn sẽ cần phải xem xét các tác động chi phí đối với người dùng sản phẩm của bạn và mặc dù nó vẫn là thứ cần được xem xét để phát triển nội bộ nhưng chắc chắn có thể chính đáng.



1

Chỉ để đưa ra một câu trả lời cập nhật hơn, tôi đã phát triển chuyên nghiệp với cả hai hệ sinh thái và cả hai hiện đều hỗ trợ một loạt các công nghệ MQ và .NET Core.

Tôi đã sử dụng NServicebus vài năm trước trên một sản phẩm đám mây mới, chúng tôi cần .NET Core mà Mass Transit không hỗ trợ vào thời điểm đó. Tôi phải nói - đó là một điều tuyệt vời khi sử dụng với tư cách là nhà phát triển, có rất nhiều lớp lót tốt, công cụ / giám sát tuyệt vời và tài liệu thực sự tốt.

Có nhiều mức hỗ trợ và giấy phép khác nhau, và trong một lần chúng tôi cần một số trợ giúp, nó có chất lượng tốt.


Tôi đã sử dụng Mass Transit được vài tháng tại một công ty mới và họ thích có một thư viện mã nguồn mở, miễn phí. Cuộc hành trình trở nên khó khăn hơn một chút - tài liệu về MT còn thiếu ở nhiều nơi và rất nhiều ví dụ / vấn đề đã lỗi thời. Cũng không có nhiều tính năng nâng cao, nhưng bạn có thể không cần chúng cho trường hợp sử dụng của chúng.

Tuy nhiên, nó hoạt động tốt và các nhà phát triển MT dường như đã nỗ lực rất nhiều để hỗ trợ PMNM của họ - theo cách vượt quá những gì bạn có thể mong đợi một cách hợp lý.

Vì vậy, theo cá nhân tôi, TLDR của tôi sẽ là - hãy mua NServicebus nếu công ty của bạn có thể được thuyết phục trả tiền cho nó, nhưng MT là một giải pháp thay thế có thể sử dụng được và tốt nhất bạn có thể nhận được miễn phí.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.