Dlaczego warto używać AMQP / ZeroMQ / RabbitMQ

W przeciwieństwie do pisania własnej biblioteki.

Pracujemy tutaj nad projektem, który będzie samodzielną pulą serwerów, Jeśli jedna sekcja będzie zbyt ciężka, menedżer podzieli ją i umieści na innej maszynie jako oddzielny proces. Alertowałby również wszystkich podłączonych klientów, których to dotyczy, aby połączyć się z nowym serwerem.

Jestem ciekaw używania ZeroMQ do komunikacji między serwerami i między procesami. Mój partner wolałby zrobić to samo. Szukam społeczności, aby odpowiedzieć na to pytanie.

Jestem całkiem początkującym programistą i właśnie dowiedziałem się o kolejkach wiadomości. Jak już googlowałem i czytałem, wydaje się, że wszyscy używają kolejek Wiadomości do różnych rzeczy, ale dlaczego? Co czyni je lepszymi niż pisanie własnej biblioteki? Dlaczego są one tak powszechne i dlaczego jest ich tak wiele?

Author: Community, 2009-12-01

6 answers

Co czyni je lepszymi niż pisanie własnej biblioteki?

Podczas wdrażania pierwszej wersji aplikacji, prawdopodobnie nic: twoje potrzeby są dobrze zdefiniowane i stworzysz system wiadomości, który będzie pasował do Twoich potrzeb: mała lista funkcji, mały kod źródłowy itp.

Te narzędzia są bardzo przydatne po pierwszym wydaniu, kiedy faktycznie trzeba rozszerzyć aplikację i dodać do niej więcej funkcji. Pozwól, że dam ci kilka przydatnych przypadki:

  • Twoja aplikacja będzie musiała rozmawiać z dużą maszyną endian (sparc/powerpc) z małej maszyny endian (x86, intel/amd). Twój system wiadomości miał pewne założenie endian: go and fix it
  • zaprojektowałeś swoją aplikację tak, aby nie była binarnym protokołem / systemem wiadomości, a teraz jest bardzo powolna, ponieważ spędzasz większość czasu na jej parsowaniu( liczba wiadomości wzrosła, a parsowanie stało się wąskim gardłem): dostosuj ją tak, aby mogła transportować binarne / stałe kodowanie
  • Na początku miałeś 3 maszyny W SIECI lan, bez zauważalnych opóźnień wszystko trafia do każdej maszyny. pojawia się klient/szef/pointy-haired-devil-boss i mówi ci, że zainstalujesz aplikację na WAN, którym nie zarządzasz - a potem zaczynasz mieć awarie połączeń, złe opóźnienia itp. musisz zapisać wiadomość i spróbować wysłać ją później: wróć do kodu i podłącz to (i ciesz się)

  • Wysyłane wiadomości muszą mieć odpowiedzi, ale nie wszystkie z nich: wysyłasz niektóre parametry i oczekujesz arkusza kalkulacyjnego w wyniku czego zamiast po prostu wysyłać i potwierdzać, wróć do kodu i podłącz to (i ciesz się.)

  • niektóre wiadomości są krytyczne i tam odbiór / wysyłanie wymaga odpowiedniej kopii zapasowej/trwałości/. Dlaczego pytasz ? cele audytu

I wiele innych przypadków użycia, o których zapomniałem ...

Możesz zaimplementować go samodzielnie, ale nie spędzaj na tym zbyt wiele czasu: prawdopodobnie i tak go zastąpisz później.

 77
Author: ppi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-21 18:07:00

To bardzo podobne do pytania: po co korzystać z bazy danych, skoro można pisać własne?

Odpowiedź jest taka, że korzystanie z narzędzia, które istnieje już od jakiegoś czasu i jest dobrze zrozumiałe w wielu różnych przypadkach użycia, opłaca się coraz bardziej w czasie i wraz z rozwojem wymagań. Jest to szczególnie ważne, jeśli więcej niż jeden deweloper jest zaangażowany w projekt. Czy chcesz zostać pracownikiem wsparcia dla systemu kolejkowego, jeśli zmienisz się na nowy projekt? Korzystanie z narzędzia zapobiega temu. Informatyka staje się problemem kogoś innego.

Przykład: wytrwałość. Pisanie narzędzia do przechowywania jednej wiadomości na dysku jest łatwe. Pisanie persistora, który skaluje się i dobrze działa i stabilnie, w wielu różnych przypadkach użycia, jest łatwe do opanowania i tanie w utrzymaniu, jest trudne. Jeśli chcesz zobaczyć, jak ktoś narzeka na to, jakie to trudne, spójrz na to: http://www.lshift.net/blog/2009/12/07/rabbitmq-at-the-skills-matter-functional-programming-exchange

W każdym razie, mam nadzieję, że to pomaga. Oczywiście napisz własne narzędzie. Wiele osób tak zrobiło. Cokolwiek rozwiąże twój problem, jest dobre.

 41
Author: alexis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-14 15:18:14

Sam rozważam użycie ZeroMQ - stąd natknąłem się na to pytanie.

Załóżmy na chwilę, że masz możliwość wdrożenia systemu kolejkowania wiadomości, który spełnia wszystkie twoje wymagania. Po co mielibyście stosować ZeroMQ (lub inną bibliotekę stron trzecich) w oparciu o podejście "roll-your-own"? Proste-koszt.

Załóżmy przez chwilę, że ZeroMQ spełnia już wszystkie twoje wymagania. Wszystko, co trzeba zrobić, to zintegrować go z kompilacją, przeczytaj trochę doco a potem zacznij go używać. To musi być o wiele mniej wysiłku niż kręcenie własnych. Ponadto ciężar utrzymania został przeniesiony na inną firmę. Ponieważ ZeroMQ jest darmowy, to tak, jakbyś właśnie powiększył swój zespół programistów, aby włączyć (część) zespół ZeroMQ.

Jeśli prowadzisz firmę zajmującą się tworzeniem oprogramowania, to myślę, że równoważysz koszty / ryzyko korzystania z bibliotek stron trzecich przed zwijaniem własnych, a w tym przypadku użycie ZeroMQ wygrałoby z rąk do rąk.

Być może ty (a raczej twój partner) cierpi, jak wielu deweloperów, z powodu syndromu"nie wymyślonego tutaj" ? Jeśli tak, Dostosuj swoją postawę i ponownie Oceń stosowanie preparatu ZeroMQ. Osobiście zdecydowanie wolę korzyści z dumnie znalezionej postawy gdzie indziej. Mam nadzieję, że uda mi się znaleźć ZeroMQ... czas pokaże.

EDIT: natknąłem się na ten filmik od programistów ZeroMQ, który mówi o dlaczego powinieneś używać ZeroMQ.

 18
Author: Daniel Paull,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-04 14:41:45
Co czyni je lepszymi niż pisanie własnej biblioteki?

Systemy kolejkowania wiadomości są transakcyjne, co jest koncepcyjnie łatwe w użyciu jako klient, ale trudne do uzyskania jako wykonawca, szczególnie biorąc pod uwagę trwałe kolejki. Możesz pomyśleć, że możesz uciec od pisania biblioteki szybkich wiadomości, ale bez transakcji i wytrwałości, nie będziesz miał pełnych zalet systemu wiadomości.

Trwałość w tym kontekście oznacza, że wiadomości middleware przechowuje nieobsługiwane wiadomości na stałe (na dysku) na wypadek awarii serwera; po ponownym uruchomieniu wiadomości mogą być obsługiwane i nie jest konieczna retransmisja (nadawca nawet nie wie, że wystąpił problem). Transakcyjne oznacza, że możesz odczytywać wiadomości z różnych kolejek i zapisywać wiadomości do różnych kolejek w sposób transakcyjny, co oznacza, że albo wszystkie odczyty i zapisy powiodą się, albo (jeśli jedna lub więcej nie powiedzie się) żadna nie powiedzie się. Nie różni się to zbytnio od transakcyjność znana z interakcji z bazami danych i ma te same zalety (upraszcza obsługę błędów; bez transakcji musiałbyś mieć pewność, że każdy odczyt/zapis powiedzie się, a jeśli jedna lub więcej nie powiedzie się, musisz cofnąć te zmiany, które się powiodły).

 6
Author: pmf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-04 04:01:04

Zanim napiszesz własną bibliotekę, przeczytaj przewodnik 0MQ tutaj: http://zguide.zeromq.org/page:all

Są szanse, że albo zdecydujesz się zainstalować RabbitMQ, albo zrobisz swoją bibliotekę na szczycie ZeroMQ, ponieważ zrobili już wszystkie trudne części.

 4
Author: Michael Dillon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-11 02:59:37

Jeśli masz trochę czasu daj mu spróbować i wdrożyć własną implementację! Nauka tego ćwiczenia przekona Cię o mądrości korzystania z już przetestowanej biblioteki.

 2
Author: bubblecyber,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-20 16:43:16