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

Dobrý deň, Habr! Chcem sa podeliť o príručku, ktorú som zostavil o RabbitMQ a zhrnuť do krátkych odporúčaní a záverov.

Obsah

  • RabbitMQ. Časť 1. Úvod. Erlang, AMQP a RPC
  • RabbitMQ. Časť 2. Rozoberieme si Exchanges
  • RabbitMQ. Časť 3. Pochopenie Queues a Bindings
  • RabbitMQ. Časť 4. Zaoberáme sa tým, čo sú správy a rámce
  • RabbitMQ. Časť 5. Výkon publikovania a spotreby správ
  • RabbitMQ. Časť 6. Prehľad modulov Federation a Shovel
  • RabbitMQ. Časť 7. Podrobne o Connection a Channel
  • RabbitMQ. Časť 8. RabbitMQ v .NET
  • RabbitMQ. Časť 9. Monitorovanie

Stručne o AMQP

AMQP (Advanced Message Queuing Protocol) — otvorený protokol na prenos správ medzi komponentmi systému. Hlavná myšlienka spočíva v tom, že jednotlivé subsystémy (alebo nezávislé aplikácie) môžu medzi sebou vymieňať správy prostredníctvom AMQP brokera, ktorý vykonáva preposielanie, môže zaručiť doručenie, rozdeľovanie prúdov dát, predplatné na požadované typy správ.

Protokol AMQP zavádza tri pojmy:

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

  • exchange (výmena) — je to miesto, kam sa posielajú správy. Výmena distribuuje správy do jednej alebo viacerých front. Ona smeruje správy do fronty na základe vytvorených väzieb (binding) medzi ňou a frontou
  • queue (fronta) — dátová štruktúra na disku alebo v operačnej pamäti, ktorá uchováva odkazy na správy a poskytuje kópie správ consumers (spotrebiteľom)
  • binding (väzba) — pravidlo, ktoré oznamuje výmene, do ktorej fronty by tieto správy mali ísť

Protokol funguje nad TCP/IP.

Stručne o Erlang

Zdrojový kód projektu sa nachádza v repozitári na GitHub. Architektúra RabbitMQ-server je založená na Erlang a BEAM.

Erlang vyvinula spoločnosť Ericsson v polovici 80. rokov ako distribuovaný, odolný voči poruchám, reálny systém pre aplikácie, ktoré vyžadujú bezporuchovú prevádzku 99,999%. Erlang používa sa v rôznych odvetviach a moderných aplikáciách, napríklad v WhatsApp. Viac sa môžete dočítať v článku architektúra WhatsApp, ktorú Facebook zakúpil za 19 miliárd dolárov

Stručne o RabbitMQ

RabbitMQ je broker správ s otvoreným zdrojovým kódom. Smeruje správy podľa všetkých základných princípov protokolu AMQP popísaných v špecifikácie. RabbitMQ realizuje a dopĺňa protokol AMQP.

Hlavná myšlienka modelu výmeny správ v RabbitMQ spočíva v tom, že producer (vydavateľ) neodosiela správy priamo do fronty. V skutočnosti a dosť často vydavateľ ani nevie, či bude správa vôbec doručená do nejakej fronty.

Namiesto toho môže vydavateľ odosielať správy iba na výmenník. Na jednej strane výmenník prijíma správy od vydavateľov, na druhej strane ich odosiela do front. Výmenník musí presne vedieť, čo robiť s prijatou správou. Má byť pridaná do určitej fronty? Má byť pridaná do niekoľkých front? Alebo má byť správa ignorovaná.

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

Prácu RabbitMQ je možné opísať nasledovne:

  1. Vydavateľ odosiela správu určitému výmenníku
  2. Výmenník, ktorý prijme správu, ju smeruje do jednej alebo viacerých front podľa pravidiel viazania medzi ním a frontou.
  3. Fronta uchováva odkaz na túto správu. Samotná správa sa uchováva v operačnej pamäti alebo na disku.
  4. Keď je spotrebiteľ pripravený prijať správu z fronty, server vytvorí kópiu správy podľa odkazu a odošle ju.
  5. Spotrebiteľ prijíma správu a posiela brokerovi potvrdenie.
  6. Broker, ktorý dostane potvrdenie, odstraňuje kópiu správy z fronty. Potom ju odstráni z operačnej pamäte a z disku.

RPC

Proces RPC (remote procedure call) tvorí základ 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. Keď je táto sekvencia dokončená, RabbitMQ bude pripravený prijímať požiadavky od klienta:

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

Tiež v špecifikácii AMQP a klient a server môžu vyvolať príkazy. To znamená, že klient očakáva interakciu so serverom. Príkazy sú triedy a metódy. Napríklad, Connection.Start – vyvolanie metódy Spustiť triedy Pripojenie.

Pripojenia a kanály

Na takúto výmenu informácií medzi klientom a serverom sa používajú kanály. Kanály sa vytvárajú v rámci určitého pripojenia. Každý kanál je izolovaný od ostatných kanálov. V synchronnom prípade nie je možné vykonať ďalší príkaz, kým sa nedostane odpoveď.

Aby bolo možné odosielať príkazy paralelne, je potrebné otvoriť niekoľko kanálov. Každý kanál vytvára samostatný Erlang proces. Jedno pripojenie môže mať mnohé kanály (multiplexing). Pre každého kanála existujú určité štruktúry a objekty v pamäti. Preto čím viac kanálov je v rámci spojenia, tým viac pamäte využíva RabbitMQ na správu takéhoto spojenia.

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

Jednoduchý príklad vytvorenia pripojenia a kanála pomocou 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 
}

Otvorenie nového spojenia pre každú operáciu sa dôrazne neodporúča, pretože to vedie k vysokým nákladom. Kanály by mali byť tiež trvalé, ale mnohé protokolové chyby vedú k uzavretiu kanála, preto môže mať kanál kratšiu životnosť ako spojenie.

Kde sa používa RabbitMQ?

V kontexte mikroservisov sa protokol AMQP a jeho implementácia v RabbitMQ často používa na asynchrónnu interakciu medzi servisami.

V kontexte IIOT protokol AMQP a jeho implementácia v RabbitMQ sa používa na výmenu dát medzi servermi (server-server). Taktiež sa používa plugin MQTT Plugin RabbitMQ ktorý je implementáciou protokolu MQTT pre prenos dát medzi snímačom a serverom v nízkorychlostných prostrediach s vysokou latenciou (kompletný zoznam podporovaných protokolov je uvedený na webovej stránke projektu).

V nasledujúcom článku sa podrobnejšie zaoberáme Exchanges.

Odkazy

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster