KrólikMQ. Część 2. Zrozumienie giełd

Exchange - wymiennik lub punkt wymiany. Wysyłane są do niego wiadomości. Exchange rozpowszechnia wiadomość w jednej lub kilku kolejkach. On kieruje wiadomości do kolejki na podstawie utworzonych linków (bindings) pomiędzy nim a kolejką.

Exchange nie jest Proces Erlanga. Ze względu na skalowalność exchange - jest to linia (link do modułu z kodem, w którym leży logika routingu) we wbudowanej bazie danych mnezja. 1 tysiąc wymienników zajmie tylko 1 MB pamięci.

Spis treści

  • KrólikMQ. Część 1. Wprowadzenie. Erlang, AMQP i RPC
  • KrólikMQ. Część 2. Zrozumienie giełd
  • KrólikMQ. Część 3. Zrozumienie kolejek i powiązań
  • KrólikMQ. Część 4. Radzenie sobie z wiadomościami i ramkami
  • KrólikMQ. Część 5: Wydajność publikowania i wykorzystywania wiadomości
  • KrólikMQ. Część 6. Omówienie modułów Federacji i Łopaty
  • KrólikMQ. Część 7. Szczegóły dotyczące Connection i Chanel
  • KrólikMQ. Część 8. RabbitMQ w .NET
  • KrólikMQ. Część 9. Monitorowanie

Wymiana bezpośrednia

Direct exchange - używany w razie potrzeby dostarczyć wiadomość do określonych kolejek. Wiadomość publikowana jest do wymiennika z konkretem klucz routingu i dostaje się do wszystkich kolejek powiązanych z tym wymiennikiem o podobnym kluczu routingu. Klucz routingu jest ciągiem. Dopasowanie odbywa się za pomocą sprawdzanie równości ciągów.

Graficzne przedstawienie przepływu komunikatów:

KrólikMQ. Część 2. Zrozumienie giełd

В rabbitmq istnieje koncepcja domyślny wymiennik. To direct exchange bez nazwy. Jeżeli używany jest domyślny wymiennik, wiadomość zostanie skierowana do kolejki o nazwie równej klucz routingu wiadomości.

Wymiana tematów

Topic exchange - podobny direct exchange umożliwia selektywne trasowanie poprzez porównanie klucza routingu. Ale w tym przypadku klucz jest dany według szablonu. Tworząc szablon, użyj 0 lub więcej słów (liter AZ и az i liczby 0-9), oddzielone kropką i symbolami * и #.

  • * - można zastąpić dokładnie 1 слово
  • # - można zastąpić 0 lub więcej słów

Graficzne przedstawienie przepływu komunikatów:

KrólikMQ. Część 2. Zrozumienie giełd

Zaczynając od wersji RabbitMQ 2.4.0 algorytm routingu dla topic exchange zaczął pracować do godz 145 razy szybciej. Osiągnięto to poprzez wdrożenie tego podejścia spróbuj wdrożyć, co oznacza reprezentację szablonów w postaci struktury drzewa. Na przykład szablony a.b.c, a.*.b.c, a.#.c и b.b.c będzie reprezentowany przez następującą strukturę:

KrólikMQ. Część 2. Zrozumienie giełd

Poszukiwanie pasującego wzorca odbywa się zaczynając od korzenia i postępując od góry do dołu.

Cechy:

  • może stać się użycie tego wymiennika dobry wybór dla ewentualnego przyszłego rozwoju aplikacji, ponieważ szablony zawsze można dostosować, aby wiadomość została opublikowana w podobny sposób direct exchange lub fanout exchange
  • szablony, które korzystają * o wiele szybciejniż szablony, które używają #.
  • topic exchange wolniej direct exchange

Wymiana Fanoutów

Fanout exchange - wszystkie wiadomości są dostarczane do wszystkich kolejek nawet jeśli w komunikacie określono klucz routingu.

Cechy:

  • RabbitMQ nie działa z kluczami routingu i szablonami co pozytywnie wpływa na wydajność. To jest najszybsze exchange;
  • wszyscy konsumenci muszą mieć możliwość przetwarzania wszystkich wiadomości;

Graficzne przedstawienie przepływu komunikatów:

KrólikMQ. Część 2. Zrozumienie giełd

Wymiana nagłówków

Headers exchange - kieruje komunikaty do powiązanych kolejek w oparciu o porównanie par właściwości (klucz, wartość). headers wiążąca i podobna właściwość wiadomości. headers jest a Dictionary<ключ, значение>.

Jeśli dodasz specjalny klucz do słownika x-match ze znaczeniem any, wiadomość jest kierowana, jeśli pary (klucz, wartość) są częściowo zgodne. To zachowanie jest podobne do zachowania operatora or.

var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");

Domyślny klucz x-match zawiera wartość all. Oznacza to, że wiadomość jest kierowana, jeśli pary (klucz, wartość) są dokładnie zgodne. To zachowanie jest podobne do zachowania operatora and.

Graficzne przedstawienie przepływu komunikatów:

KrólikMQ. Część 2. Zrozumienie giełd

Cechy:

  • dodatkowa elastyczność
  • dodatkowe obciążenie obliczeniowe. Wszystkie pary (klucz, wartość) atrybutu headers należy posortować według nazwy klucza przed obliczeniem wartości routingu komunikatów. Wolniejsze niż inne rodzaje wymiany.

Spójna wymiana haszująca

Ten wymiennik jest podłącz и nie wbudowany в RabbitMQ.

Consistent-hashing exchange (wymiana ze spójnym hashowaniem) - stosowane, gdy istnieje kilka kolejek będących potencjalnymi odbiorcami wiadomości i gdy zachodzi potrzeba zrównoważenia obciążenia pomiędzy nimi. Wiadomość jest kojarzona z kolejką według wagi (łańcuch warunkowy o wartości z 0 - n).

Równoważna waga kolejek - wskazuje, że każda kolejka otrzyma o tę samą kwotę wiadomości (każda wiadomość zostanie umieszczona tylko w jednej kolejce). Nie ma pełnej gwarancji jednolitej dystrybucji komunikatów.

Graficzne przedstawienie przepływu komunikatów:

KrólikMQ. Część 2. Zrozumienie giełd

Hash obliczane na podstawie klucza routingu lub właściwości headers wiadomości. Jeśli wszystkie opublikowane wiadomości miały różne klucze routingu, lub headers, wówczas rozkład nastąpi wagowo. W przeciwnym razie zostanie użyty klucz routingu lub headers.

Powinno pomóc, gdy przepustowość konsumentów musi wzrosnąć szybciej niż w przypadku rozwiązania z wieloma konsumentami korzystającymi z tej samej kolejki.

Kombinacja wymienników (E2E)

Zachowanie wszystkich wymienników można łączyć za pomocą komunikacji Wymiana na wymianę (kombinacja wymienników nie jest uwzględniona w specyfikacji AMQP. Jest to rozszerzenie protokołu z boku RabbitMQ).

Graficzne przedstawienie przepływu komunikatów:

KrólikMQ. Część 2. Zrozumienie giełd

Kosztem E2E potrafimy znaleźć odpowiednią skalowalną konfigurację, która spełni zarówno obecne, jak i rosnące wymagania.

Utwórz wymianę

Wymiennik tworzony jest za pomocą synchronicznego RPC żądanie do serwera. Żądanie jest wykonywane przy użyciu metody Exchange.Declare, wywoływana z parametrami:

  • nazwa wymiennika
  • typ wymiennika
  • inne opcje

Przykład stworzenia exchange za pomocą Klient RabbitMQ:

//...
channel.ExchangeDeclare(
    exchange: "my_exchange",
    type: "direct",
    durable: "false",
    autoDelete: "false",
    arguments: null
);
//...

  • exchange - nazwę wymiennika, który chcemy utworzyć. Nazwa musi być unikalna
  • type - rodzaj wymiennika
  • durable - jeśli jest zainstalowany truenastępnie exchange będzie trwały. Zostanie on zapisany na dysku i będzie w stanie przetrwać restart serwera/brokera. Jeśli wartość falsenastępnie exchange jest tymczasowy i zostanie usunięty po ponownym uruchomieniu serwera/brokera
  • autoDelete - automatyczne usuwanie. Exchange zostaną usunięte po usunięciu wszystkich powiązanych kolejek
  • arguments są argumentami opcjonalnymi. Najczęściej poprzez zestaw argumentów alternative exchange (alternatywny wymiennik). Jeśli wiadomość nie może przejść pierwotną trasą, może zostać wysłana do alternatywnej centrali w celu skierowania inną ścieżką.

KrólikMQ. Część 2. Zrozumienie giełd

Jeśli stworzenie exchange być może, wtedy serwer wyśle ​​​​klientowi wiadomość synchroniczną RPC odpowiedź Exchange.DeclareOk. Jeśli stworzenie jest niemożliwe (była odmowa na wniosek Exchange.Declare) następnie kanał zostanie zamknięty serwer za pomocą polecenia asynchronicznego Channel.Close a klient otrzyma wyjątek OperacjaPrzerwanaWyjątek, który będzie zawierał kod błędu i jego opis.

Przed wysłaniem należy utworzyć wymiennik. Jeśli opublikujesz wiadomość do nieistniejącego wymiennika - RabbitMQ po cichu go usuń.

Utwórz GUI Exchange

Przejdź do panelu administratora RabbitMQ pod użytkownikiem guest (nazwa użytkownika: guest i hasło: guest). Należy pamiętać, że użytkownik guest może łączyć się tylko z hosta lokalnego. Przejdźmy teraz do zakładki Exchanges i kliknij Add a new exchange. Wypełnij właściwości:

KrólikMQ. Część 2. Zrozumienie giełd

Większość właściwości została opisana powyżej. Tutaj zauważamy, że jeśli ustawimy Internal, wówczas wymianę można wykorzystać wyłącznie do celów E2E. Producer nie będzie możliwości wysyłania wiadomości na taką giełdę.

wniosek

Podczas opracowywania systemu wygodnie jest opisać topologię rozgromienie za pomocą wykresu. Zanim jednak zaczniesz budować wykres, warto wyróżnić ścieżki o dużym natężeniu ruchu, bo. oni wymagają większa przepustowość (wydajność). Następnie możesz sklasyfikować ruch. A potem zacznij budować.

Jeżeli w skonstruowanym grafie istnieje skończony zestaw klucze routingu, warto więc przyjrzeć się kilku fanout exchange, które są powiązane w stosunku 1:1 z kluczem routingu. Zapamietaj to fanout exchange najszybszy.

Jeśli liczba tras dąży do nieskończoności, warto zwrócić na to uwagę topic exchange lub, jeśli szablon nie jest potrzebny, możesz wybrać direct exchnge, ponieważ jest szybszy topic exchange.

Kombinacje różnych exchange powinno pomóc Ci znaleźć ten właściwy. skalowalna konfiguracja, który spełnia zarówno obecne, jak i rosnące wymagania systemowe.

Liczba exchange a kolejki powinny być minimalne w porównaniu z liczbą tras.

W następnym artykule zaczniemy rozumieć więcej na temat kolejek i powiązań.

referencje

Źródło: www.habr.com

Dodaj komentarz