Amazon SNS FIFO – wzorzec wiadomości Publikuj/Subskrybuj

11 grudnia 2020

Podczas projektowania oprogramowania o rozproszonej architekturze bardzo ważne jest, aby zdefiniować to, w jaki sposób serwisy wymieniają informacje. Dla przykładu użycie komunikacji asynchronicznej oddziela komponenty, upraszcza skalowanie, zmniejszając wpływ zmian i ułatwiając opublikowanie nowych funkcji.

 

Dwoma najbardziej popularnymi formami komunikacji asynchronicznej service-to-service są kolejki komunikatów i wzorzec wiadomości Publisher/Subscriber.

  • W przypadku kolejki komunikatów wiadomości są przechowywane w kolejce do momentu, w którym zostaną przetworzone i usunięte przez konsumenta. W AWS Amazon Simple Queue Service (SQS) zapewnia w pełni zarządzaną usługę kolejkowania wiadomości bez kosztów administracyjnych.

amazon sns fifo

  • W przypadku wzorca wiadomości pub/sub wiadomość opublikowana do tematu zostaje dostarczona do wszystkich subskrybentów danego tematu. W AWS Amazon Simple Notification Service (SNS) jest w pełni zarządzaną usługą wzorca wiadomości pub/sub, która umożliwia dostarczenie wiadomości do dużej liczby subskrybentów. Każdy subskrybujący może również ustanowić zasady filtrowania, aby otrzymywać tylko te wiadomości, na których mu zależy.

amazon sns fifo

Możesz korzystać z tematów, jeśli chcesz rozesłać wiadomości do wielorakich aplikacji, a kolejki komunikatów, kiedy chcesz wysłać wiadomości do jednej aplikacji. Używając tematów i kolejek razem, możesz rozłączać mikrousługi, systemy rozproszone i bezserwerowe aplikacje.

Z SQS możesz korzystać z kolejki FIFO (pierwsze wchodzi-pierwsze wychodzi), aby zachować kolejność, w której wiadomości są wysyłane i otrzymywane, a także w celu uniknięcia sytuacji, w której wiadomość zostaje przetworzona więcej niż raz.

 

Tematy SNS FIFO

Dzisiaj dodajemy podobne możliwości dla komunikatów pub/sub wraz z prezentacją tematów SNS FIFO, zapewniających ścisłą kolejność wiadomości oraz dostarczenie zdeduplikowanej wiadomości do jednego lub więcej subskrybentów.

Tematy FIFO zarządzają porządkowaniem i deduplikacją podobnymi do kolejek FIFO.

  • Porządkowanie – możesz skonfigurować grupę komunikatów, włączając ID grupy komunikatów w momencie publikowania wiadomości do tematu FIFO. Do każdego ID grupy komunikatów wszystkie wiadomości są wysyłane i dostarczane w kolejności ich nadejścia. Na przykład, aby zapewnić dostarczenie wiadomości związanych z tym samym klientem we właściwej kolejności, możesz opublikować te komunikaty w temacie, używając numeru konta konsumenta jako grupy komunikatów ID. Nie istnieje limit w liczbie grup komunikatów w tematach i kolejkach FIFO, dlatego nie musisz deklarować z wyprzedzeniem ID grupy komunikatów, każda wartość będzie odpowiednia. Jeśli nie posiadasz logicznego rozróżnienia pomiędzy komunikatami, możesz po prostu użyć tego samego ID grupy komunikatów dla wszystkich i mieć pojedynczą grupę uporządkowanych wiadomości. ID grupy komunikatów zostaje podane do każdej subskrybowanej kolejki FIFO.
  • Deduplikacja – systemy rozproszone (jak SNS) i aplikacje klientów czasami generują zduplikowane wiadomości. Możesz uniknąć otrzymywania zduplikowanych komunikatów z tematu na dwa sposoby: poprzez uaktywnienie deduplikacji opartych na treści tematu lub poprzez dodanie ID deduplikacji do komunikatów, które publikujesz. Z deduplikacją opartą na treści komunikatu SNS używa hashu SHA-256 w celu wygenerowania deduplikacji ID komunikatów, używając do tego korpusu wiadomości. Po tym, jak komunikat z konkretnym ID deduplikacji zostaje pomyślnie opublikowany, pojawia się 5-minutowy interwał, w czasie którego każda wiadomość z takim samym ID deduplikacji zostaje zaakceptowana, ale nie dostarczona. Jeśli subskrybujesz kolejkę FIFO do tematu FIFO, ID deduplikacji zostaje przesłane do kolejki i użyte przez SQS w celu uniknięcia otrzymywania zduplikowanych wiadomości.

Możemy korzystać z tematów i kolejek FIFO jednocześnie w celu ułatwienia implementacji aplikacji, w których kolejność działań i zdarzeń jest kluczowa lub kiedy nie możemy znieść duplikatów. Na przykład w celu przetworzenia operacji finansowych i aktualizacji inwentarza lub asynchronicznego zastosowania komend, które otrzymujemy z urządzenia klienta. Kolejki FIFO mogą korzystać z filtrowania komunikatów w tematach FIFO, aby wybiórczo otrzymywać jedynie podzbiór wiadomości zamiast każdej wiadomości opublikowanej do tematu.

 

W jaki sposób korzystać z tematów SNS FIFO?

Typowy scenariusz, w którym tematy FIFO mogą okazać się pomocne, ma miejsce wtedy, kiedy otrzymujemy aktualizacje, które powinny zostać przetworzone w odpowiedniej kolejności. Na przykład możemy użyć tematu FIFO, aby otrzymywać aktualizacje z aplikacji, w której klienci edytują profile swoich kont. Następnie subskrybujemy kolejkę SQS FIFO do tematu FIFO i używamy jej jako bodźca dla funkcji Lambdy, która zatwierdza aktualizacje konta do tabeli Amazon DynamoDB używanej przez system zarządzania klienta, który powinien być zsynchronizowany.

amazon sns fifo

Rozłączanie (decoupling) przedstawione przez temat FIFO ułatwia dodanie nowych funkcyjności z minimalnym wpływem na istniejące aplikacje. Na przykład, aby nagrodzić moich lojalnych klientów dodatkowymi promocjami, dodaję nową aplikację lojalnościową, która przechowuje informacje w pokrewnej bazie danych zarządzanej przez Amazon Aurora. Aby zachować informacje o kliencie przechowywane w lojalnościowej bazie danych w synchronizacji z moimi innymi aplikacjami, możemy subskrybować nową kolejkę FIFO do tego samego tematu FIFO i dodać nową funkcję Lambdy, która otrzymuje aktualizacje konsumenta w takiej samej kolejności, w jakiej zostały wygenerowane, a następnie dodaje je do lojalnościowej bazy danych. W ten sposób nie musimy zmieniać kodu i konfiguracji innych aplikacji, aby zintegrować nową aplikację lojalnościową.

amazon sns fifo

Na początek tworzymy dwie kolejki FIFO w konsoli SQS, pozostawiając wszystkie opcje domyślne:

  • Kolejka customer.fifo do przetworzenia aktualizacji w moim systemie zarządzania klienta;
  • Kolejka loyalty.fifo, aby pomóc mi zebrać i przechowywać aktualizacje klientów z aplikacji lojalnościowej.

W konsoli SNS tworzymy temat updates.fifo. Wybieramy FIFO jako typ i aktywuję deduplikację wiadomości opartą na treści.

amazon sns fifo

Następnie subskrybujemy kolejki customer.fifo i loyalty.fifo do tematu.

amazon sns fifo

Aby móc otrzymywać wiadomości, dodajemy oświadczenie do polityki dostępu dwóch kolejek, udzielając pozwolenia tematom updates.fifo w celu wysyłania komunikatów do kolejek. Dla przykładu oświadczenie dla kolejki customer.fifo wygląda następująco:

Następnie używamy konsoli SNS do opublikowania 4 wiadomości w sekwencji. Dla wszystkich wiadomości używamy tego samego ID. W ten sposób wszystkie znajdą się w tej samej grupie komunikatów. Jedyną częścią, która się różni, jest korpus wiadomości, gdzie używamy w kolejności:

  • Aktualizacja 1
  • Aktualizacja 2
  • Aktualizacja 3
  • Aktualizacja 1

W tej konsoli widzimy tylko 3 wiadomości, które zostały dostarczone do kolejki FIFO:

amazon sns fifo

Dlaczego tak się dzieje? Kiedy stworzyliśmy tematy FIFO, umożliwiliśmy deduplikację opartą na treści. 4 wiadomości zostały wysłane w ciągu 5-minutowego okna deduplikacji. Ostatnia wiadomość została rozpoznana jako duplikat pierwszej i nie została dostarczona do subskrybowanej kolejki.

Sprawdźmy aktualne komunikaty w kolejce. Korzystamy z AWS Command Line Interface (CLI), aby móc otrzymywać wiadomość z SQS oraz jq command-line JSON processor do formatowania wyniku i otrzymywania jedynie komunikatu w korpusie.

Tutaj znajdują się komunikaty w kolejce customer.fifo:

amazon sns fifo

A tutaj znajdują się komunikaty w kolejce loyalty.fifo:

amazon sns fifo

Tak jak przewidywano, 3 komunikaty z unikalną treścią zostały dostarczone do obu kolejek w takiej samej kolejności, w jakiej zostały wysłane.

 

Dostępne już teraz

Możesz używać tematów SNS FIFO we wszystkich obszarach handlowych. Możesz przetwarzać nawet do 300 transakcji na sekundę (TPS) na temat FIFO lub kolejkę FIFO. Z SNS płacisz tylko za to, czego używasz. Więcej informacji znajdziesz w cenniku opłat.

Aby dowiedzieć się więcej, odsyłamy do dokumentacji.

 

Źródło: https://aws.amazon.com/

 

PYTANIA? SKONTAKTUJ SIĘ Z NAMI

Case Studies
Referencje

Z przyjemnością polecamy firmę Hostersi, z którą mieliśmy przyjemność współpracować przy okazji wdrożenia skalowalnej infrastruktury w Amazon Web Services, opartej o technologię Kubernetes i metodykę DevOps.  Hostersi okazali się niezwykle proaktywnym partnerem, który nie tylko wdrażał wskazane rozwiązania, ale proponował optymalne narzędzia i technologie, które sprawiły, że efekt wdrożenia jest dla nas w pełni satysfakcjonujący. Polecamy!

Grzegorz Lentzy
IT Director LINK Mobility
W skrócie o nas
Specjalizujemy się w dostarczaniu rozwiązań IT w obszarach projektowania infrastruktury serwerowej, wdrażania chmury obliczeniowej, opieki administracyjnej i bezpieczeństwa danych.