RabbitMQ. Časť 1. Úvod. Erlang, AMQP

Dobré popoludnie, Habr! Chcem sa podeliť o učebnicu-príručku vedomostí, ktoré sa mi podarilo nazbierať RabbitMQ a zhustiť do krátkych odporúčaní a záverov.

obsah

  • RabbitMQ. Časť 1. Úvod. Erlang, AMQP a RPC
  • RabbitMQ. Časť 2. Pochopenie výmen
  • RabbitMQ. Časť 3. Pochopenie frontov a väzieb
  • RabbitMQ. Časť 4. Pochopenie toho, čo sú správy a rámce
  • RabbitMQ. Časť 5: Zverejňovanie správ a spotreba
  • RabbitMQ. Časť 6. Prehľad modulov Federation a Shovel
  • RabbitMQ. Časť 7. Podrobnosti o Connection a Chanel
  • RabbitMQ. Časť 8. RabbitMQ v .NET
  • RabbitMQ. Časť 9. Monitorovanie

Stručne o AMQP

AMQP (Advanced Message Queuing Protocol) je otvorený protokol na prenos správ medzi systémovými komponentmi. Základnou myšlienkou je, že jednotlivé subsystémy (alebo nezávislé aplikácie) si môžu vymieňať správy ľubovoľným spôsobom cez AMQP brokera, ktorý vykonáva smerovanie, prípadne garantuje doručenie, distribuuje dátové toky a odoberá požadované typy správ.

protokol AMQP zavádza tri pojmy:

RabbitMQ. Časť 1. Úvod. Erlang, AMQP

  • exchange (výmenné miesto alebo zmenáreň) - do nej sa odosielajú správy. Výmenný bod distribuuje správu v jednom alebo viacerých frontoch. Ona smeruje správy do frontu na základe vytvorených spojení (binding) medzi ním a radom
  • queue (front) - dátová štruktúra na disku alebo v RAM, ktorá ukladá odkazy na správy a poskytuje kópie správ consumers (pre spotrebiteľov)
  • binding (záväzný) – pravidlo, že hovorí výmennému bodu, do ktorého frontu by tieto správy mali ísť

Protokol beží navrchu TCP / IP.

Stručne o Erlangovi

Zdrojový kód projektu je v úložisku na adrese GitHub. Architektúra RabbitMQ server založené na Erlang a BEAM.

Erlang vyvinuté spoločnosťou Ericsson v polovici osemdesiatych rokov minulého storočia ako distribuovaný systém v reálnom čase odolný voči chybám pre aplikácie vyžadujúce 1980% dostupnosť. Erlang používa sa v rôznych priemyselných odvetviach a moderných aplikáciách, napr. WhatsApp. Viac sa dočítate v článku Architektúra WhatsApp, ktorú Facebook kúpil za 19 miliárd dolárov

Stručne o RabbitMQ

RabbitMQ je sprostredkovateľ správ s otvoreným zdrojom. Smeruje správy podľa všetkých základných princípov protokolu AMQP popísané v technické údaje. RabbitMQ implementuje a dopĺňa protokol AMQP.

Hlavná myšlienka modelu správ v RabbitMQ vec je producer (vydavateľ) neposiela správy priamo do poradia. V skutočnosti, a dosť často, vydavateľ ani nevie, či bude správa vôbec doručená do nejakého frontu.

Namiesto toho môže vydavateľ posielať správy iba na burzu. Na jednej strane burza prijíma správy od vydavateľov a na druhej strane ich posiela do frontov. Ústredňa musí presne vedieť, čo má robiť so správou, ktorú dostane. Má sa pridať do konkrétneho poradia? Má sa pridať do viacerých frontov? Alebo by sa správa mala ignorovať.

RabbitMQ. Časť 1. Úvod. Erlang, AMQP

Krátka práca RabbitMQ možno opísať takto:

  1. Vydavateľ odošle správu na konkrétnu burzu
  2. Výmena po prijatí správy ju nasmeruje do jedného alebo viacerých frontov v súlade so záväznými pravidlami medzi ňou a frontom
  3. Vo fronte je uložený odkaz na túto správu. Samotná správa je uložená v RAM alebo na disku
  4. Keď je spotrebiteľ pripravený prijať správu z frontu, server vytvorí kópiu správy prostredníctvom odkazu a odošle
  5. Spotrebiteľ dostane správu a odošle potvrdenie sprostredkovateľovi
  6. Sprostredkovateľ po prijatí potvrdenia odstráni kópiu správy z frontu. Potom sa odstráni z pamäte RAM a disku

RPC

Proces RPC (vzdialené volanie procedúry) je základom takmer všetkých interakcií s jadrom RabbitMQ. Napríklad počiatočné diskusie o podmienkach klienta s RabbitMQ, demonštruje určitý proces RPC. Po dokončení tejto sekvencie RabbitMQ bude pripravený akceptovať požiadavky od klienta:

RabbitMQ. Časť 1. Úvod. Erlang, AMQP

Aj v špecifikácii AMQP klient aj server môžu zadávať príkazy. To znamená, že klient čaká na komunikáciu so serverom. Príkazy sú triedy a metódy. Napríklad, Connection.Start – volanie metódy Start trieda Connection.

Pripojenie a kanály

Pre takúto výmenu informácií medzi klientom a serverom, kanály. Kanály sa vytvárajú v rámci konkrétne spojenie. Každý kanál je izolovaný od ostatných kanálov. V synchrónnom prípade nie je možné vykonať nasledujúci príkaz, kým nie je prijatá odpoveď.

Aby ste mohli posielať príkazy paralelne, musíte otvoriť niekoľko kanálov. Každý kanál vytvára samostatný Erlang proces. Jedno pripojenie môže mať viacero kanálov (multiplexovanie). Pre každý kanál sú v pamäti určité štruktúry a objekty. Preto čím viac kanálov je v rámci spojenia, tým RabbitMQ využíva viac pamäte spravovať takéto spojenie.

RabbitMQ. Časť 1. Úvod. Erlang, AMQP

Jednoduchý príklad vytvorenia spojenia a použitia kanála RabbitMQ.Client:

// ...
private void TryConnect()
{
    var factory = new ConnectionFactory() 
    {
        HostName = "host_name",
        UserName = "user_name",
        Password = "p@ssword",
        // Включение автоматичекого восстановления
        // соединения после сбоев сети 
        AutomaticRecoveryEnabled = true
    };
    _connection = factory.CreateConnection();
}
// ...
public void CreateChanel()
{
    _channel = _connection.CreateModel();
    // other options 
}

Dôrazne sa neodporúča otvárať nové pripojenie pre každú operáciu povedie k vysokým nákladom. Kanály by tiež mali byť trvalé, ale mnohé chyby protokolu spôsobujú zatvorenie kanála, takže životnosť kanála môže byť kratšia ako životnosť pripojenia.

Kde sa používa RabbitMQ?

V kontexte mikroslužieb protokol AMQP a jeho implementácia v RabbitMQ často používané na asynchrónna interakcia medzi službami.

V kontexte IIOT protokol AMQP a jeho implementácia v RabbitMQ slúži na výmenu dát medzi servermi (server-server). Použite tiež plugin Doplnok MQTT RabbitMQ čo je implementácia protokolu MQTT na prenos údajov medzi snímačom a serverom v prostredí s nízkou rýchlosťou a vysokou latenciou (úplný zoznam podporovaných protokolov je uvedený na webová stránka projektu).

V ďalšom článku začneme výmenám rozumieť podrobnejšie.

referencie

Zdroj: hab.com

Pridať komentár