RabbitMQ vysvětleno za 5 minut nebo méně

V dnešním článku se zaměříme na možnosti, jak urychlit načítání vašich webových stránek. Klíčem je přesunout náročné výpočetní procesy do asynchronní roviny. S nástrojem jako RabbitMQ to zvládnete s překvapivou lehkostí.

Stabilita a rychlost jsou bezpochyby zásadními aspekty, které uživatelé u aplikací a webových stránek ocení. Kolikrát jste opustili web dříve, než se vůbec načetl, jen proto, že proces trval příliš dlouho?

Co představuje RabbitMQ?

RabbitMQ je open-source, distribuovaný a flexibilní systém pro zpracování zpráv. Funguje jako prostředník, který zajišťuje efektivní komunikaci mezi odesílateli a příjemci zpráv.

RabbitMQ implementuje protokol AMQP (Advanced Message Queuing Protocol), který se specializuje na asynchronní zasílání zpráv s garancí jejich doručení. Toto se děje skrze potvrzení o přijetí zpráv od zprostředkovatele k odesílateli a od příjemců k odesílateli.

Jak RabbitMQ funguje?

Zjednodušeně řečeno, RabbitMQ vytváří fronty, do kterých jsou ukládány zprávy zaslané odesílateli. Zprávy čekají, dokud je aplikace, která je má přijímat, nezpracuje. Tento mechanismus nám umožňuje vytvářet distribuované systémy, kde jsou jednotlivé části oddělené a komunikují mezi sebou prostřednictvím zpráv.

Pro každou komunikaci potřebujeme odesílatele, zprávu a příjemce. V tomto případě je RabbitMQ jakýsi „mezisklad“, kde zpráva čeká na svého příjemce.

Pro lepší pochopení fungování se podíváme na různé typy „výměn“ (exchanges), které se používají při směrování zpráv.

Typy výměn

Když posíláme zprávu přes RabbitMQ, neposíláme ji přímo do fronty. Místo toho ji posíláme do výměny, která je odpovědná za přesměrování zpráv do různých front, které si zprávy následně přečtou.

Obrazový kredit: CloudAQMP

Existují čtyři základní typy výměn: Direct, Fanout, Topic a Headers.

Přímá výměna (Direct Exchange)

Představme si situaci, kdy odesílatel potřebuje poslat potvrzení o nákupu třem různým příjemcům. To znamená, že systém musí komunikovat se třemi různými systémy ohledně jedné události – nákupu.

RabbitMQ umožňuje zaslat zprávu odděleně do každé fronty, což zajišťuje, že všechny systémy obdrží svou kopii zprávy.

Výměna obvykle přeposílá zprávu do všech front, ale často nechceme, aby zprávy byly zasílány všude. Z tohoto důvodu můžeme definovat pravidla pro fungování výměny.

Například, můžeme poslat zprávu jen jednomu konkrétnímu příjemci, místo toho, aby byla poslána všem.

Vazební klíč: Pro spojení fronty s výměnou musíme vytvořit „vazbu“, tedy vztah mezi frontou a výměnou. Je to něco jako konektor.

Směrovací klíč: V této vazbě můžeme také vytvořit směrovací klíč, který funguje jako klíč pro předávání zpráv do konkrétní fronty.

Pokud máme směrovací klíče X, Y a Z a zpráva má směrovací klíč Y, pak tato zpráva půjde do fronty Y a bude doručena příjemci, který je pro tuto frontu určen.

Takto můžeme mít k výměně připojeno mnoho front, ale zároveň mohou mít různé vztahy s výměnou prostřednictvím směrovacích klíčů.

Výměna Fanout

V tomto případě je zpráva odeslána do všech front, které jsou k výměně připojené. Pokud tedy máme k fanout výměně připojených 10 front, všechny fronty dostanou stejnou zprávu.

Výměna Topic

Toto je jedna z nejflexibilnějších výměn, která umožňuje posílat zprávy podle tématu. Můžeme definovat pravidla a vztahy mezi systémy na základě toho, jak pojmenujeme směrovací klíče.

Například: směrovací klíč (x.*); směrovací klíč(*.z); směrovací klíč (*.y.*).

Co je AMQP v RabbitMQ?

AMQP (Advanced Message Queuing Protocol) je otevřený protokol pro zasílání zpráv, který definuje přenos zpráv mezi různými aplikacemi. Podobá se protokolům HTTP a TCP v tom, že je to protokol na drátové úrovni, ale navíc umožňuje asynchronní přenos.

RabbitMQ se rozhodl implementovat AMQP z několika důvodů. První je, že tento protokol je standardem pro middleware, na rozdíl od JMS, který definuje API.

Specifikaci AMQP napsalo mezinárodní konsorcium zahrnující velké společnosti jako Red Hat, Cisco Systems a Microsoft. Druhým důvodem je interoperabilita protokolu, která umožňuje jakékoli aplikaci s implementací AMQP komunikovat s AMQP brokerem.

AMQP není jediný protokol, který RabbitMQ používá. Obrázek níže ukazuje všechny protokoly, jazyky a API, které RabbitMQ implementuje a podporuje.

Klíčové vlastnosti RabbitMQ

Kromě možnosti integrace různých aplikací asynchronně a z různých míst, RabbitMQ nabízí další výhody, které z něj činí oblíbený nástroj mezi zprostředkovateli zpráv:

Spolehlivé úložiště

RabbitMQ nabízí několik funkcí pro zaručení doručení zpráv. Například, ukládá zprávy, pokud je nemůže žádný příjemce ihned zpracovat. Také umožňuje příjemcům potvrdit, že zpráva byla úspěšně zpracována.

Pokud zpracování selže, RabbitMQ umožní opětovné zařazení zprávy do fronty. Může ji pak zpracovat jiná instance příjemce nebo ji zkusit zpracovat ten samý příjemce znovu, jakmile se obnoví.

RabbitMQ také garantuje pořadí doručení zpráv. Znamená to, že zprávy jsou zpracovávány ve stejném pořadí, v jakém dorazily do fronty RabbitMQ.

Clustering

RabbitMQ zvládá zpracovávat tisíce zpráv za sekundu, ale někdy je potřeba zpracovat ještě větší objem, aniž by to ovlivnilo výkon aplikace.

Proto umožňuje RabbitMQ vytvářet shluky pro horizontální škálování řešení, což je transparentní pro odesílatele i příjemce.

Vysoce dostupné fronty

Fronty v RabbitMQ mohou být replikovány na více uzlech v rámci clusteru. Tím je zajištěno, že i při selhání uzlu nebo výpadku, broker může nadále přijímat zprávy od odesílatelů a doručovat je příjemcům.

Flexibilní směrování

RabbitMQ umožňuje definovat flexibilní pravidla pro směrování zpráv mezi výměnami a frontami, včetně směrování podle specifických vzorů pomocí vazeb.

Podpora více protokolů

Kromě AMQP, RabbitMQ podporuje prostřednictvím pluginů i STOMP, MQTT a HTTP. Zahrnuje také mechanismy pro ověřování a řízení přístupu pro jednotlivé brokery.

Reálné případy použití RabbitMQ

Mezi nejdůležitější případy použití RabbitMQ patří zajištění asynchronicity mezi aplikacemi, snížení závislosti mezi aplikacemi, distribuce výstrah a řízení front úloh na pozadí.

RabbitMQ se často používá v e-commerce. Pomáhá manipulovat, zpracovávat a předávat prodejní objednávky do jiných systémů, jako je distribuce a fakturace.

Při zpracování objednávek můžeme poslat prodejní zprávu do distribučního centra a do systému pro fakturaci. Vše funguje horizontálně a asynchronně pomocí zasílání zpráv. Často je také možné poslat jednu akci do několika front.

V praxi to znamená, že když zákazník nakoupí zboží, musí být připraveno k distribuci, odesláno a následně fakturováno. Každý z těchto procesů je často řízen jiným systémem, a cílem RabbitMQ je zajistit, aby všechny zprávy dorazily na správná místa.

Alternativy RabbitMQ:

RabbitMQ je jednodušší, než se zdá, a existuje několik dalších alternativ, například:

#1. IronMQ

IronMQ je rychlý systém pro řazení zpráv, který je navržený s ohledem na vysokou dostupnost, odolnost a zajištění doručení zprávy právě jednou. Je považován za výkonné cloudové řešení pro moderní aplikační architekturu.

Podporuje push fronty, pull fronty a dlouhé dotazování, což umožňuje udržet požadavky na dotaz otevřené po delší dobu. Navíc může využívat více datových center s vysokou dostupností, což usnadňuje škálovatelnost.

Můžete ho nasadit v cloudu, na sdíleném nebo vyhrazeném hardwaru nebo lokálně. Nabízí také řadu klientských knihoven se srozumitelnou dokumentací.

#2. Apache Kafka

Kafka je platforma, která se specializuje na distribuované streamování událostí. Je navržena jako replikovaný, distribuovaný a trvalý protokol pro odesílání zpráv.

Používá se hlavně pro výkonné mikroslužby řízené událostmi nebo pro aplikace na zpracování velkých objemů dat. Automaticky a asynchronně replikuje události v rámci clusteru, aby byla zajištěna odolnost proti chybám a vysoká dostupnost.

#3. Apache ActiveMQ

ActiveMQ je multiprotokolový message broker založený na Javě. Umožňuje integraci aplikací, které využívají protokol AMQP pro řazení zpráv na aplikační vrstvě.

Implementuje několik protokolů pro integraci, včetně JMS (nativní pro Javu) a Stomp (který mohou používat aplikace v PHP).

Amazon nabízí „spravovanou“ verzi služby s názvem Amazon MQ, která usnadňuje používání ActiveMQ.

Závěrem

Message brokery jsou důležitou součástí architektury organizací. S rostoucím počtem uživatelů, kteří vstupují do firemních systémů různými kanály, je potřeba řešení, která umožňují horizontální škálování a současně zpracovávají velké množství zpráv za sekundu při nízkých nákladech.

V této situaci se dostávají do popředí message brokery nové generace, jako je RabbitMQ, které usilují o vysokou dostupnost, spolehlivost, interoperabilitu a výkon pro moderní aplikace.

Doporučujeme prozkoumat spolehlivé platformy pro hosting RabbitMQ pro vaši aplikaci.