Współczesne aplikacje charakteryzują się coraz większym stopniem skomplikowania. Programiści nieustannie zmagają się z procesami, które pochłaniają znaczne ilości czasu i zasobów.
Przesyłanie danych między różnymi serwisami oraz przetwarzanie ogromnych zbiorów informacji to tylko niektóre z typowych wyzwań, z którymi na co dzień mierzą się twórcy oprogramowania. Na szczęście, powstają nowe technologie i narzędzia, które mają na celu rozwiązanie tych problemów. Jednym z takich rozwiązań jest broker komunikatów.
Brokerzy komunikatów umożliwiają systemom sieciowym sprawną wymianę informacji i komunikację między sobą. Przyjrzyjmy się bliżej tej innowacyjnej technologii.
Czym jest broker komunikatów?
Broker komunikatów to specjalistyczne oprogramowanie, które ułatwia serwisom i aplikacjom przesyłanie komunikatów w celu komunikacji i wymiany danych. Brokerzy ci tworzą wspólny mechanizm integracyjny, który wspiera chmurowe, bezserwerowe, mikroserwisowe i hybrydowe architektury chmurowe.
Działanie brokera komunikatów polega na transformacji wiadomości między różnymi, autoryzowanymi protokołami. Umożliwia to natychmiastową komunikację pomiędzy zależnymi od siebie serwisami, niezależnie od języków programowania, w których zostały napisane.
Jak działają brokerzy komunikatów?
Brokerzy komunikatów są odpowiedzialni za zabezpieczanie, archiwizację, kierowanie oraz wysyłkę wiadomości do odpowiednich odbiorców. Działają jako łącznik pomiędzy różnymi aplikacjami, pozwalając nadawcom na wysyłanie komunikatów bez konieczności znajomości lokalizacji, statusu czy liczby odbiorców.
Brokerzy komunikatów często wykorzystują element zwany kolejką komunikatów, która zapewnia niezawodne przechowywanie i bezpieczne dostarczanie wiadomości. Kolejka ta magazynuje i indeksuje wiadomości, dopóki aplikacje docelowe nie będą gotowe do ich przetworzenia. Wiadomości przechowywane są w kolejności ich przesłania i pozostają tam do czasu potwierdzenia ich odbioru.
Aby lepiej zrozumieć, w jaki sposób brokerzy komunikatów realizują swoje zadania, przyjrzyjmy się ich podstawowym koncepcjom:
- Producent (ang. producer) to interfejs, który komunikuje się bezpośrednio z brokerem komunikatów w celu przesłania wiadomości do dystrybucji.
- Konsument (ang. consumer), zwany też subskrybentem, to podmiot, który ma otrzymać komunikat i pobiera dane od brokera.
- Kolejka (ang. queue) lub temat (ang. topic) to struktura danych wykorzystywana przez brokerów do przechowywania komunikatów. Można je traktować jako foldery w komputerze, działające na zasadzie FIFO (pierwsze weszło, pierwsze wyszło).
- Wreszcie, Exchanger to jednostka logiczna zarządzająca kolejkami, która tworzy grupy wiadomości, umożliwiając konsumentom ich wymianę.
Komunikacja z wykorzystaniem brokerów komunikatów odbywa się w oparciu o dwa główne modele: komunikację typu punkt-punkt (point-to-point) oraz komunikację publikuj-subskrybuj (publish/subscribe).
Komunikacja punkt-punkt: Model ten wykorzystuje kolejki komunikatów, gdzie nadawca i odbiorca każdej wiadomości są powiązani w relacji jeden do jednego. Każda wiadomość w kolejce jest odczytywana tylko raz i wysyłana do pojedynczego odbiorcy.
Ten model znajduje zastosowanie w sytuacjach, gdzie niezbędne jest zapewnienie, że każda operacja zostanie wykonana tylko raz, na przykład w systemach płacowych czy przetwarzaniu transakcji finansowych. Jeśli odbiorca jest niedostępny, broker przechowuje wiadomość w kolejce i dostarcza ją w późniejszym czasie.
Komunikacja publikuj-subskrybuj: W tym modelu producent nie ma wiedzy o tym, kto konkretnie jest odbiorcą wiadomości. Producent wysyła wiadomości dotyczące określonego tematu, a wszystkie aplikacje, które subskrybują ten temat, otrzymują te wiadomości.
Relacja między konsumentem a producentem jest typu jeden-do-wielu, a model ten jest często stosowany w systemach o architekturze sterowanej zdarzeniami, gdzie aplikacje nie są od siebie zależne.
Oto cykl życia transmisji wiadomości z wykorzystaniem brokera komunikatów:
- Proces rozpoczyna się od wysłania wiadomości do jednego lub kilku miejsc docelowych.
- Następnie wiadomości są konwertowane na inny model.
- Wiadomości są dzielone na mniejsze części, przekazywane konsumentowi, a następnie odpowiedzi są agregowane i przekształcane w jedną wiadomość, która jest odsyłana do użytkownika.
- Wykorzystuje się pamięć zewnętrzną do dodawania lub zapisywania wiadomości.
- Pobierane są niezbędne dane za pomocą usług internetowych.
- Wysyłane są odpowiedzi w przypadku niepowodzenia lub błędu wiadomości.
- Wzorzec publikuj-subskrybuj jest wykorzystywany do kierowania wiadomości na podstawie ich zawartości i tematu.
Korzyści wynikające z używania brokerów komunikatów
Poniżej przedstawiono główne korzyści wynikające z używania brokerów komunikatów w sieci:
- Producenci i konsumenci mogą wymieniać wiadomości niezależnie od tego, czy druga strona jest aktualnie dostępna. Broker dostarczy wiadomość, gdy tylko odbiorca stanie się aktywny.
- Brokerzy gwarantują dostarczenie wiadomości w każdej sytuacji, a mechanizm potwierdzeń informuje producenta o pomyślnym dostarczeniu, co czyni tę technologię wyjątkowo niezawodną i trwałą.
- Przetwarzanie asynchroniczne pozwala na przydzielanie zadań wymagających dużej mocy obliczeniowej do różnych procesów, co przyspiesza działanie aplikacji i poprawia komfort użytkowania.
- Brokerzy automatycznie ponawiają wysyłkę wiadomości, które nie zostały dostarczone z powodu awarii. Jeśli wiadomość nie zostanie dostarczona po wielu próbach, zostaje ona przekierowana do producenta.
Poniżej przedstawiono popularnych brokerów komunikatów, które mogą usprawnić komunikację między współczesnymi aplikacjami.
Memphis
Memphis to broker komunikatów o otwartym kodzie źródłowym, zaprojektowany specjalnie dla programistów do zastosowań w strumieniowaniu danych. Pozwala on na łatwe wdrożenie i skalowanie aplikacji opartych na danych w ciągu kilku sekund.
Twórcy zadbali o to, aby użytkownicy mogli korzystać z zalet innych brokerów, a także z unikalnych funkcji oferowanych przez Memphis. Broker ten wykorzystuje rdzeń NATS, oferując techniki automatycznej optymalizacji, zarządzanie schematami, przetwarzanie wbudowane oraz mechanizmy rozwiązywania problemów.
Ten oparty na społeczności broker oferuje przyjazny interfejs użytkownika, który jest w pełni zoptymalizowany pod kątem zapewnienia wysokiej wydajności. Memphis jest dostarczany z CLI i SDK dla Node.JS, Go, Python, Typescript i NestJS, umożliwiając programistom łatwą integrację funkcji brokera z ich platformami.
Oferuje również funkcję kolejki niedostarczonych wiadomości z automatyczną retransmisją, która powiadamia o nieprzetworzonych wiadomościach.
Najważniejsze cechy Memphis:
- Działa na platformie Kubernetes, oferując pełną abstrakcję sprzętu dla potrzeb skalowania, aktualizacji, ponownego uruchamiania i innych operacji.
- Ułatwia rozwiązywanie problemów z niedostarczonymi wiadomościami poprzez dostęp do ścieżki danych każdej z nich.
- Intuicyjny interfejs użytkownika i CLI są pomocne dla inżynierów danych przy rozwiązywaniu problemów w czasie rzeczywistym.
- Zawiera unikalne funkcje zarządzania schematami i wbudowanej transformacji danych.
RabbitMQ
RabbitMQ, wydany w 2007 roku, jest jednym z najpopularniejszych brokerów komunikatów, wykorzystywanym przez tysiące użytkowników na całym świecie. Został napisany w języku Erlang, jest bardzo lekki i może być instalowany zarówno w chmurze, jak i w infrastrukturze lokalnej.
RabbitMQ charakteryzuje się wysoką niezawodnością i intuicyjnością. Jego przyjazny interfejs umożliwia aplikacjom łatwą wymianę wiadomości i kontrolę nad brokerem. Ten wszechstronny broker jest kompatybilny z wieloma platformami i obsługuje różne protokoły komunikacyjne. Można go łatwo wdrożyć w środowiskach rozproszonych i federacyjnych, co pozwala na obsługę potrzeb dużych aplikacji.
Broker komunikatów jest interoperacyjny i działa w różnych systemach operacyjnych, chmurach i narzędziach programistycznych. Główne obsługiwane języki to Java, .NET, PHP, Python, JavaScript, Ruby i Go. Oferuje szereg funkcji i obsługuje wtyczki, które ułatwiają integrację i interakcję z innymi systemami.
Jako broker o otwartym kodzie źródłowym, RabbitMQ jest całkowicie darmowy. Dostępna jest również komercyjna wersja, za którą pobierana jest opłata abonamentowa.
Apache Kafka
Kolejnym godnym uwagi brokerem jest Apache Kafka. Oferuje on wyższą przepustowość, wbudowane partycjonowanie, replikację i odporność na błędy niż inne tego typu rozwiązania. Kafka wykorzystuje architekturę rozproszoną, używając protokołu TCP do komunikacji między klientami a serwerami.
Dzięki swojej szybkości, Kafka jest idealnym rozwiązaniem dla aplikacji wymagających przetwarzania dużych ilości danych.
Apache Kafka może być wdrażana zarówno w infrastrukturze lokalnej, jak i w chmurze. Działa bezproblemowo na sprzęcie typu bare metal, maszynach wirtualnych i kontenerach. Jest często stosowana tam, gdzie wymagane jest odseparowanie przetwarzania i producentów danych, buforowanie nieprzetworzonych komunikatów oraz w podobnych sytuacjach.
Ten broker, początkowo stworzony do śledzenia aktywności w witrynach internetowych i przechowywania dużych ilości danych, idealnie sprawdza się w dużych przedsiębiorstwach technologicznych. Kafka jest w stanie zarządzać strumieniami zdarzeń w czasie rzeczywistym, potokami i odtwarzaniem danych, co jest niezbędne w środowiskach o wysokich wymaganiach operacyjnych.
Apache ActiveMQ
Apache ActiveMQ, oparty na Javie, to broker o otwartym kodzie źródłowym, który automatyzuje konfigurację i konserwację, zmniejszając obciążenie pracą.
Obsługuje wszystkie główne protokoły standardowe wykorzystywane w branży i umożliwia bezproblemową integrację z wieloma platformami przy użyciu protokołu AMQP.
Protokół STOMP ułatwia wymianę komunikatów pomiędzy aplikacjami internetowymi za pośrednictwem WebSockets, a protokół MQTT umożliwia komunikację pomiędzy urządzeniami IoT.
ActiveMQ jest kompatybilny z różnorodnymi platformami i klientami, napisanymi w takich językach jak JavaScript, C, C++, Python, .Net i wiele innych.
Obsługuje zaawansowane funkcje, takie jak grupowanie wiadomości, połączone kolejki i klastrowanie. ActiveMQ jest bardzo elastyczny i uniwersalny, co pozwala na szybkie wdrożenie w różnych scenariuszach przesyłania wiadomości.
ActiveMQ jest dostępny w dwóch wersjach: klasycznej oraz zaawansowanej wersji znanej jako Artemis.
Klasyczny ActiveMQ oparty jest na architekturze wtyczkowej i jest kompatybilny z wieloma generacjami aplikacji do przesyłania wiadomości. Artemis natomiast, zaawansowana wersja, charakteryzuje się nieblokującą architekturą, zapewniającą wysoką wydajność wymaganą przez nowoczesne aplikacje.
WSO2
WSO2 to kolejny broker, który warto wziąć pod uwagę. Został zaprojektowany do pracy w środowisku rozproszonym.
Ten lekki i łatwy w użyciu broker jest wyposażony w tryb ciągłej dostępności, zapewniający wysoką dostępność i możliwość rozszerzania serwerów w klastrze, minimalizując ryzyko wystąpienia pojedynczego punktu awarii.
Technologia open source sprawnie zarządza wieloma kolejkami, subskrybentami i wiadomościami, ułatwiając trwałe przesyłanie komunikatów.
WSO2 obsługuje wiele protokołów, w tym MQTT – lekki protokół sieciowy maszyna-maszyna, który oferuje funkcje przesyłania komunikatów dla przedsiębiorstw w IoT.
Umożliwia łączenie zdalnych urządzeń z brokerami, pozwalając na komunikację między maszynami (M2M), która może generować dziesiątki tysięcy jednoczesnych zdarzeń na sekundę. WSO2 oferuje elastyczne modele wdrożenia, od pojedynczych węzłów po wdrożenia klastrowe.
Do najważniejszych cech WSO2 należą:
- Obsługa JMS v1.0 i v1.1 API.
- Zgodność z zestawem standardów.
- Obsługa protokołu Advanced Message Queuing Protocol (AMQP) v0.91 i MQTT dla wszystkich poziomów QoS i zachowanych wiadomości.
- Wsparcie dla wielu języków i platform, w tym Java, .Net, C, C++, PHP, Ruby, Erlang i innych.
ZeroMQ
Ostatnim, ale nie mniej ważnym brokerem jest ZeroMQ. Oferuje on szybkie połączenia między aplikacjami, niezależnie od języka programowania czy platformy.
Składa się z asynchronicznych silników wejścia i wyjścia ładowanych do bibliotek komunikatów i umożliwia relację wiele-do-wielu między nadawcą a odbiorcą.
Komunikaty przesyłane są pomiędzy aplikacjami za pośrednictwem WebSockets oraz różnorodnych kanałów transportowych, takich jak w procesie, między procesami, TCP, multiemisja, TIPC, IPC i UDP.
ZeroMQ zawiera wszystkie funkcje standardowych rozproszonych systemów przesyłania wiadomości i wysyła komunikaty za pośrednictwem wzajemnie połączonych gniazd, które mogą być rozmieszczone według różnych wzorców, takich jak pub-sub, request-reply, dystrybucja zadań i fan-out.
ZeroMQ zapewnia szerokie możliwości dostosowania, pozwalając na zaspokojenie unikalnych potrzeb różnorodnych scenariuszy. Obsługuje wiele wzorców przesyłania wiadomości i implementacji językowych.
Jest kompatybilny z wieloma językami programowania, takimi jak C, C++, C#, Java, Python, Ruby i Perl.
Ten broker jest wyjątkowo szybki, open-source i posiada lekką bibliotekę, która zapewnia wysoką wydajność nawet z asynchronicznymi silnikami wejścia/wyjścia.
Podsumowanie
Po lekturze tego artykułu, powinieneś mieć jasne wyobrażenie o tym, jak wdrożenie brokerów komunikatów może znacznie poprawić architekturę komunikacji w Twoim systemie. Na rynku dostępnych jest wielu wiarygodnych dostawców brokerów, a my przedstawiliśmy najpopularniejsze z nich.
Możesz wybrać brokera, który najlepiej odpowiada potrzebom Twojej organizacji w zakresie zarządzania danymi i dystrybucji komunikatów między aplikacjami.
Możesz również zapoznać się z najlepszymi interfejsami API SMS do wysyłania wiadomości do użytkowników.
newsblog.pl
Maciej – redaktor, pasjonat technologii i samozwańczy pogromca błędów w systemie Windows. Zna Linuxa lepiej niż własną lodówkę, a kawa to jego główne źródło zasilania. Pisze, testuje, naprawia – i czasem nawet wyłącza i włącza ponownie. W wolnych chwilach udaje, że odpoczywa, ale i tak kończy z laptopem na kolanach.