Překlad
Zprávy jsou základní součástí každého distribuovaného systému. Umožňuje producentovi poslat zprávu libovolnému počtu spotřebitelů a není nutné znát žádné informace o spotřebiteli. To je velká pomoc pro skutečně asynchronní a oddělující komunikaci.
Když používáte RabbitMQ, výše uvedený diagram ukazuje velmi základní, ale typickou strukturu. Producent pošle zprávu na switch. Podle směrovací logiky přepínač vloží zprávu do fronty vázané na přepínač. Konkrétněji, pokud jde o vysílací typ switche, kopie této zprávy bude opakovaně zaslána do každé fronty. Spotřebitel pak může zprávu přijímat a zpracovávat.
Důležitým předpokladem pro úspěšnou fungování výše uvedené struktury pro producenty i spotřebitele je, že všechny komponenty RabbitMQ (tj. fronty, přepínače a vazby) musí být vytvořeny předem. Spotřebitel nemůže poslat zprávu přepínači Pokud přepínač neexistuje, nemůže zpracovat zprávy z fronty, která neexistuje.
Proto není těžké pochopit, že než producent/spotřebitel odešle/přijme zprávu, nech producent/spotřebitel vytvořit frontu, přepínač a vazební vztah. Podívejme se na výhody a nevýhody každého z těchto způsobů.
1. Rozlište odpovědnosti
Převod obrazu (1. Producent vytvoří switch 2. Spotřebitel vytvoří frontu a přiřadí frontu ke spínači)
Aby se výrobci a spotřebitelé mohli plně oddělit, ideálně výrobci znají informace pouze o přepínání (ne o frontě) a spotřebitelé pouze o frontě (ne o spínači). Vazebný vztah označuje vztah mezi přepínačem a frontou
Jedním z možných způsobů je, aby producent vytvořil switch a spotřebitel vytvořil frontu a přiřadil frontu ke switchi. Výhodou této metody oddělení je, že pokud spotřebitel potřebuje frontu, je jednoduše nutné vytvořit frontu a navázat je podle poptávky, přičemž producent nemusí znát žádné informace o frontě. Ale to není dostatečné oddělení: protože spotřebitel musí znát spínač, aby ho mohl svázat.
2. Producenti vytvářejí všechno
Když je producent spuštěný, může být nakonfigurován tak, aby vytvářel všechny potřebné komponenty (přepínače, fronty a vazby). Výhodou tohoto přístupu je, že žádné zprávy nejsou ztraceny (protože fronta je již vytvořena a vázaná na switch a žádný spotřebitel ji nemusí spouštět jako první).
To však znamená, že producent musí znát všechny fronty, které je třeba navázat na přepínač. Je to velmi propojený způsob. Důvodem je, že pokaždé, když je potřeba přidat novou frontu, musí producent překonfigurovat a nasadit fronty tak, aby vytvořil a vázal fronty
3. Spotřebitelé vytvářejí vše
Opakem je nechat spotřebitele vytvářet přepínače, fronty a vazby, které potřebuje během provozu. Stejně jako v předchozím přístupu tato metoda vytváří vazbu, protože spotřebitel musí znát informace o přepínači, ke kterému je vázán ve frontě. Jakékoliv změny na switchi (například přejmenování) znamenají, že všichni uživatelé musí být překonfigurováni a nasazeni. Když jsou fronty a spotřebitelé velké, může být tato složitost příliš náročná.
4. Ani jeden nic nevytváří
Zcela odlišný přístup je, že ani výrobce, ani spotřebitel nevytvářejí žádné potřebné komponenty. Místo toho je vytvořen pomocí uživatelského rozhraní admin pluginu nebo administrátorského CLI předem. Tato metoda vychází z následujících výhod:
- Producenti a spotřebitelé mohou být zcela odděleni. Výrobci znají jen výměnu a spotřebitelé jen frontu.
- To lze snadno skriptovat a automatizovat jako součást nasazení
- Jakékoliv změny, například nové fronty, lze přidat, aniž by se dotklo stávajících, nasazených vydavatelů a spotřebitelů
shrnutí
V distribuovaných systémech jsou asynchronní zprávy užitečným způsobem pro oddělení, ale aby zůstaly oddělené, je nutné udržovat efektivní strategii pro udržení základní struktury zpráv (v RabbitMQ jsou to fronty, přepínače a vazby).
Zatímco vydavatelské a spotřebitelské služby mohou být zodpovědné za to, co potřebují sami, mohou být nákladné z hlediska počáteční ztráty zpráv, propojení a provozní údržby (z hlediska konfigurace a nasazení).
Pravděpodobně nejlepší způsob, jak zvládnout konfiguraci komunikačního systému tam, kde patří: psát skripty mimo aplikaci. To zajišťuje, že služby zůstávají oddělené a že frontový systém se může dynamicky měnit podle potřeby, aniž by ovlivnil velké množství stávajících služeb.
Původní:Přihlášení k hypertextovému odkazu je viditelné. Původní angličtina:Přihlášení k hypertextovému odkazu je viditelné.
|