NServiceBus vs MassTransit

85

Zmagam się z listą zalet i wad dotyczących NServiceBus i MassTransit.

Teraz wiem, że jest tu już wątek, ale tak naprawdę nie odpowiada na moje pytania.

Oto, co do tej pory przeczytałem:

  1. NServiceBus, tak, jest licencjonowany i nie jest darmowy.
  2. MassTransit, tak, to open source, ale wydaje się, że brakuje dokumentacji.

NServiceBus jest starszy i ma więcej odniesień. Trudno znaleźć informacje o MassTransit, ale mam otwarty umysł. Muszę jednak zapewnić solidne rozwiązanie, więc muszę o to zapytać.

Więc proszę, ktoś z doświadczeniem w obu frameworkach. Dlaczego powinienem wybrać NServiceBus? LUB Dlaczego powinienem wybrać MassTransit?

Czy to wydajność, bezpieczeństwo, skala czy?

Jack Andersen
źródło

Odpowiedzi:

102

Gdybym miał podsumować, oto co bym powiedział:

Jeśli potrzebujesz wsparcia komercyjnego, wybierz NServiceBus. Jeśli nie masz nic przeciwko używaniu forów jako środka wsparcia, MassTransit jest świetną opcją. Jak dotąd deweloperzy bardzo szybko reagowali na nasze problemy. Jeśli wybierzesz MassTransit, teraz możesz wybrać między MSMQ i RabbitMQ. Jeśli potrzebujesz usługi DTC, skorzystaj z usługi MSMQ. Jeśli chcesz mieć więcej funkcji i lepszą administrację, skorzystaj z RabbitMQ.

W naszym projekcie przesiedliśmy się z NServiceBus do MassTransit z dwóch powodów:

  1. MassTransit jest bezpłatny
  2. Kochamy RabbitMQ

Użyłem obu frameworków. Używałem MassTransit dłużej niż NServiceBus. Oto najważniejsze informacje, jakie widzę.

Koszt:

  • MassTransit ma licencję na Apache 2.0 i jest darmowy do komercyjnego użytku produkcyjnego, podczas gdy NServiceBus nie.

Wsparcie:

  • Jak wspomniał Udi, istnieje opcja komercyjnej obsługi NServiceBus, nie widziałem tego w przypadku MassTransit.

Transport:

  • MassTransit obsługuje usługi MSMQ i RabbitMQ
  • NServiceBus obsługuje tylko MSMQ RabbitMQ jest obsługiwany w NServiceBus 4+

RabbitMQ vs MSMQ:

  • Obsługa MSMQ DTC (rozproszony koordynator transakcji) dla transakcji obejmujących wiele procesów na potencjalnie wielu komputerach (np. Serwer SQL, usługa Windows)
  • RabbitMQ ma doskonały interfejs administracyjny
  • Usługa MSMQ istnieje już dłużej i jest produktem firmy Microsoft
  • RabbitMQ jest nowszy, open source, darmowy i sponsorowany przez VMWare
  • Usługa MSMQ jest domyślnie instalowana na większości komputerów z systemem Windows

Udi Dahan i chłopaki z MassTransit (Chris Patterson, Dru Sellers i Travis Smith) to genialni ludzie.

Glina
źródło
8
Dobra odpowiedź, Clay. Pozwólcie, że dodam, że w następnej wersji (która wyjdzie za kilka tygodni) NServiceBus będzie również obsługiwał ActiveMQ. Celowo opóźnialiśmy nasze wsparcie dla RabbitMQ, dopóki nie będziemy mogli przedstawić solidnej historii o deduplikacji, aby zrekompensować brak DTC - to jest planowane na przyszły rok. MassTransit nie robi tej deduplikacji (ale może to być również na ich mapie drogowej, nie wiem).
Udi Dahan
1
Świetnie to słyszeć. Brak prawdziwych transakcji typu end-to-end byłby przełomem dla systemów o znaczeniu krytycznym.
Clay
Skonfigurowaliśmy system za pomocą nServiceBus i naprawdę podoba nam się responsywność społeczności i ogólnie jest dość łatwy w konfiguracji. Na razie używamy MSMQ, ponieważ jest to bardziej powszechne. Jednak pomimo tego, że nServiceBus ma wiele modeli licencjonowania, wciąż nie jestem pewien, którą licencję musiałbym (lub nasz zespół) kupić, aby zgadzać się z warunkami użytkowania. Zespół liczy około 5 osób, każda z nich będzie programować pod kątem API, ale na razie więcej w trybie POC (tak w produkcji :)). MassTransit jest następny do przeglądu. Wydaje się, że jest to całkiem dobrze udokumentowane.
Guillaume Schuermans
MassTransit nie ma obecnie wsparcia komercyjnego ani żaden z nas nie planuje go oferować. Sugerowałbym listę mailingową do obsługi MassTransit, ale mam rzeczy oznaczone tagami MassTransit pojawiają się w moim czytniku RSS, więc zwykle odpowiadam w ciągu jednego lub dwóch dni na SO.
Travis
W przypadku MT możesz również przejść do rozmowy Gitter: gitter.im/MassTransit/MassTransit
CrusherJoe
36

Jako oryginalny autor NServiceBus, prawdopodobnie jestem nieco stronniczy w stosunku do własnej technologii, ale postaram się, aby było to jak najbardziej wyważone.

Wsparcie transportowe

Oba NServiceBus i MassTransit wsparcie RabbitMQ i Azure Autobus , ale NServiceBus obsługuje również:

Na temat RabbitMQ

Można argumentować, że NServiceBus ma silniejsze wsparcie dla RabbitMQ - na przykład w jego funkcji opóźnionej dostawy, podczas gdy Mass Transit stwierdza, że ich "wtyczka jest nadal uważana za eksperymentalną. Jest obsługiwana przez MassTransit, ale nie możemy zagwarantować nic więcej niż wtyczka gwarantuje sobie. "

Współpracujemy również bardzo blisko z zespołem RabbitMQ, przyczyniając się do tworzenia .net SDK z korzyścią dla całego ekosystemu.

Jeśli chodzi o Azure Service Bus

Poziom współpracy, jaki mamy z zespołem Azure Service Bus, jest jeszcze wyższy, z ponad 70 żądaniami PR do ich zestawu SDK .net core .

Korzystając z NServiceBus, czerpiesz korzyści z pełnej głębi tej wiedzy.

Obróbka

To jest największa różnica.

Po zbudowaniu solidnego systemu, wgląd w to, jak różne ruchome części rozmawiają ze sobą, staje się naprawdę ważny. MassTransit nie ma wiele w tej dziedzinie poza małą integracją poprzez źródło diagnostyczne z narzędziami innych firm, takimi jak Application Insights lub Open Trace.

Platforma usługowa wokół NServiceBus idzie trochę dalej, dając Ci możliwość zobaczenia diagramów sekwencji we wszystkich punktach końcowych dzięki ServiceInsight :

Diagramy sekwencji z ServiceInsight

Możesz również uzyskać logiczny widok wszystkich punktów końcowych i komunikatów:

Logiczny widok systemu NServiceBus

Zasadniczo otrzymujesz żywą dokumentację architektury swojego systemu.

Zarządzanie i monitorowanie

To kolejny obszar, w którym MassTransit nie ma zbyt wiele. Kiedy system innej firmy, z którym się integrujesz, staje się niedostępny, a kilka komunikatów w Twoim systemie kończy się w kolejce błędów, jedynym rozwiązaniem, jakie ma MassTransit, jest możliwość ręcznego przeniesienia tych wiadomości później za pomocą wtyczki RabbitMQ Shovel .

Platforma usługowa wokół NServiceBus obejmuje monitorowanie tej kolejki błędów, narzędzia graficzne pozwalające zobaczyć, jakie były przyczyny tych błędów, a także możliwość odtwarzania grup tych nieudanych komunikatów i sprawdzania, czy zostały one pomyślnie przetworzone w prostej aplikacji internetowej o nazwie ServicePulse .

Nieudane grupowanie wiadomości za pomocą usługi ServicePulse

Dostępna jest również wizualizacja okresowych kontroli stanu, które mogą zapewnić wczesne ostrzeżenia o problemach, zanim wiadomości zaczną kończyć się niepowodzeniem.

I wreszcie na platformie dostępne jest monitorowanie wydajności :

Monitorowanie wydajności NServiceBus

Naprawdę otrzymujesz pełny pakiet, jeśli chodzi o wsparcie produkcyjne.

Długoterminowe wsparcie i kompatybilność wsteczna

Podczas gdy ludzie z Mass Transit zawsze byli bardzo dobrzy w pomaganiu każdemu, kto ma pytania na ten temat w Gitter lub w ich Grupie Google , nie sądzę, aby dostarczali poprawki błędów w starszych wersjach. Kiedy systemy produkcyjne istnieją już od kilku lat i nie możesz po prostu aktualizować wszystkiego przez cały czas, zaczyna to być ważne.

Z obsługą NServiceBus obejmuje :

  • Ponad 2 lata dla każdej głównej wersji
  • Dodatkowe 2 lata rozszerzonego wsparcia
  • Gwarantowane czasy reakcji w krytycznych kwestiach
  • Dostępność 24x7

Doradztwo i szkolenia

Z perspektywy offline, na całym świecie dostępne są kursy publiczne w NServiceBus, a także wielu konsultantów, których można sprowadzić na miejsce, aby rozpocząć projekt lub pomóc w przypadku problemów. Słyszałem od kilku firm, które zdecydowały się przejść z MassTransit na NServiceBus, ponieważ nie mogły znaleźć kogoś na miejscu, gdy tego potrzebowały.

Koncesjonowanie

Niektórzy ludzie nadal nie wiedzą o NServiceBus, że jest BEZPŁATNY do użytku osobistego i dla startupów .

BEZPŁATNE do użytku osobistego i startupów

Jeśli chodzi o komercyjne wykorzystanie , modele licencjonowania NServiceBus są bardzo elastyczne, jak wskazuje szerokie spektrum klientów, i mogą być dobrze uzasadnione kierownictwem. Oczywiście w przypadku MassTransit licencja jest bezpłatna.

Mam nadzieję, że to w jakiś sposób pomoże.

Udi Dahan
źródło
6
Chciałbym usłyszeć, co masz do powiedzenia o MassTransit w sposób nieobiektywny. Próbując w pewien sposób „obronić” implementację MassTransit. Bardzo podoba mi się jednak nServiceBus, po prostu zmagamy się z kosztami licencji, próbując tego w prawdziwym środowisku produkcyjnym, ale tylko w przypadku nowo dodanych funkcji na naszej platformie. Można by powiedzieć, że to dowód koncepcji.
Guillaume Schuermans
1
A co z bardziej technicznymi różnicami? A co z niezawodnością, deduplikacją, wysyłaniem dużych wiadomości itp. Jak wypada porównanie tych platform / formularzy? Czy istnieje lista porównująca w ten sposób kilka magistral komunikacyjnych?
Steven
1
O ile wiem, @Steven, MassTransit nie ma funkcji deduplikacji, którą można znaleźć w funkcji skrzynki nadawczej NServiceBus. Częścią problemu z dostarczeniem listy, którą chcesz, jest to, że każda z tych technologii nadal ewoluuje, co może spowodować, że każda taka lista stanie się nieaktualna.
Udi Dahan
@udidahan, prawdopodobnie powinieneś zaktualizować swój widok, ponieważ zbliżamy się do 2021 r. Chcę wiedzieć, czy MT ulepszyło swoją podstawową technologię w ciągu ostatnich kilku lat, a także NServiceBus
Volkan Güven
Tak, Volkan. Zarówno MassTransit, jak i NServiceBus nieustannie ewoluowały.
Udi Dahan
8

Wiem, że jest późno, aby odpowiedzieć na to pytanie, ale ze względu na bingleability muszę wspomnieć o Rebusie (którego jestem głównym autorem).

Rebus ma teraz około 8 lat i od samego początku był używany do przenoszenia pieniędzy i kontrolowania elektrowni.

Obsługuje większość podstawowych systemów kolejkowania, takich jak MSMQ, RabbitMQ, Azure Service Bus, Azure Storage Queues, Amazon SQS itp., Ale obsługuje również bardziej zabawne rzeczy, takie jak używanie MSSQL, PostgreSQL i Oracle jako transportu.

Wiki dokumentacji jest dość obszerne, chociaż wydaje się, że wiele osób sobie z tym radzi, ponieważ interfejsy API Rebusa są tak łatwe do znalezienia.

Rebus zawsze był (i zawsze będzie) całkowicie darmowy. Jest na licencji MIT, więc możesz w zasadzie robić z nim to, na co masz ochotę.

Jeśli skończysz jako poważny użytkownik Rebus i potrzebujesz formalnej umowy na wsparcie i dodatkowe narzędzia, możesz subskrybować Rebus Pro , który jest oferowany przez Rebus FM (firmę stojącą za Rebus).

Wspomniane powyżej „dodatkowe narzędzia” mają obecnie postać Menedżera floty , który może w tym pomóc. Na przykład Fleet Manager całkowicie zastępuje kolejki błędów , więc zamiast tego zapisywane są tam komunikaty o błędach. Oznacza to, że wiadomości, które nie powiodły się, mogą być przeglądane, zarządzane i ponawiane w dowolnym momencie za pomocą kilku kliknięć w Fleet Manager.

mookid8000
źródło
2
Rebus jest niedoceniany. To prawdziwy lekki klejnot w ekosystemie .NET.
ThomasDC
4

Zawsze możesz użyć Shuttle (FOSS): https://github.com/Shuttle/shuttle-esb :)

Dokumentacja (zawsze ulepszana): http://shuttle.github.io/shuttle-esb/

Projekt Shuttle trwa już prawie 2 lata i wykorzystuje systemy produkcyjne. Będzie to kwestia wyboru tego, co będzie do ciebie pasować.

NServiceBus ma dobre osiągnięcia. Używałem go wcześniej w systemie produkcyjnym (1.9), ale nie od czasu, gdy stał się komercyjny (punkt, w którym zacząłem z Shuttle).

Nie próbowałem MassTransit.

Myślę, że wszystkie opcje będą miały podstawy (polecenie / wydarzenie / pub-sub). Jednak NServiceBus ma sagi i elementy magistrali danych, chociaż uważam, że jest wystarczająco łatwe do obsługi danych poza samą magistralą usług, na przykład w programach obsługi komunikatów punktu końcowego. Nie wiem, czy MassTransit ma sagi / magistralę danych, ale Shuttle na pewno nie.

Inną kwestią jest prawdopodobnie sposób korzystania z magistrali usług. Jeśli ma być częścią produktu, to w przypadku opcji komercyjnej, takiej jak NServiceBus, należy wziąć pod uwagę koszty dla użytkowników produktu i chociaż nadal jest to coś, co należy wziąć pod uwagę przy wewnętrznym rozwoju, z pewnością można to zrobić usprawiedliwiony.

Eben Roux
źródło
1

Aby udzielić bardziej aktualnej odpowiedzi, opracowałem zawodowo oba ekosystemy i oba obsługują teraz szeroką gamę technologii MQ i .NET Core.

Użyłem NServicebus kilka lat temu w nowym produkcie chmurowym, potrzebowaliśmy platformy .NET Core, której Mass Transit wtedy nie obsługiwał. Muszę powiedzieć - jest to cudowna rzecz w użyciu jako programista, jest wiele fajnych linerów, świetne narzędzia / monitorowanie, a dokumentacja jest naprawdę dobra.

Dostępne są różne poziomy wsparcia i licencji, a przy jednej okazji potrzebowaliśmy pomocy, była to dobra jakość.


Używam Mass Transit od kilku miesięcy w nowej firmie i zdecydowanie wolą mieć darmową bibliotekę o otwartym kodzie źródłowym. Podróż była nieco trudniejsza - dokumentacja dotycząca MT jest miejscami niewystarczająca, a wiele przykładów / problemów jest nieaktualnych. Nie ma też szerokiego zakresu zaawansowanych funkcji, ale możesz ich nie potrzebować w ich przypadku.

Działa jednak dobrze, a programiści MT wydają się wkładać DUŻO wysiłku we wspieranie ich OSS - znacznie wykraczając poza to, czego można się spodziewać.

Tak więc osobiście mój TLDR byłby - kup NServicebus, jeśli przekonasz się, że Twoja firma za niego zapłaci, ale MT to użyteczna alternatywa i najlepsze, co możesz dostać za darmo.

Phil S.
źródło