0Pricing
AWS Solutions Architect · Lekcja

Tematy SNS i architektura fan-out

Opublikują wiadomość w jednym temacie SNS i jednocześnie roześlesz ją do wielu kolejek SQS, funkcji Lambda oraz endpointów HTTP.

Tematy SNS i architektura fan-out to bezpłatna lekcja AWS Solutions Architect na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej AWS Solutions Architect, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs AWS Solutions Architect zawiera 4 lekcji w sumie.

Czym jest Amazon SNS?

Amazon Simple Notification Service (SNS) to w pełni zarządzana usługa komunikacji pub/sub. Wydawcy wysyłają wiadomości do tematu SNS, a SNS natychmiast dostarcza je wszystkim subskrybentom. W przeciwieństwie do SQS, który działa na zasadzie pobierania, SNS działa na zasadzie wypychania — dostarcza wiadomości subskrybentom zaraz po ich opublikowaniu. Dzięki temu SNS doskonale nadaje się do jednoczesnego rozgłaszania zdarzeń do wielu systemów podrzędnych.

Tematy SNS: Standard i FIFO

Podobnie jak SQS, SNS ma dwa typy tematów: tematy Standard zapewniają najlepszą możliwą kolejność wiadomości, dostarczanie co najmniej raz i niemal nieograniczoną przepustowość — mogą dostarczać wiadomości do SQS, Lambda, punktów końcowych HTTP, poczty e-mail, SMS-ów i powiadomień push na urządzenia mobilne. Tematy FIFO gwarantują ścisłą kolejność i dostarczenie dokładnie raz, ale wyłącznie do subskrybentów FIFO SQS. Tematy FIFO obsługują do 3000 wiadomości na sekundę z użyciem przetwarzania wsadowego i są używane, gdy kolejność zdarzeń musi zostać zachowana u wielu subskrybentów.

aws sns create-topic --name 'OrderEvents'

# Create FIFO topic
aws sns create-topic \
  --name 'OrderEvents.fifo' \
  --attributes '{"FifoTopic": "true", "ContentBasedDeduplication": "true"}'

Typy subskrybentów SNS

SNS obsługuje wiele typów subskrybentów opartych na protokołach:

  • SQS: trwałe kolejkowanie (najczęstszy wybór w przetwarzaniu asynchronicznym)
  • Lambda: bezpośrednie wywołanie (z perspektywy SNS synchroniczne)
  • HTTP/HTTPS: dostarczanie webhooków do zewnętrznych punktów końcowych
  • Email / Email-JSON: powiadomienia dla użytkowników
  • SMS: dostarczanie wiadomości tekstowych
  • Mobile Push: FCM, APNs za pośrednictwem aplikacji platformowych
  • Firehose: przesyłanie strumienia do S3 lub Redshift za pośrednictwem Kinesis Data Firehose
# Subscribe an SQS queue to an SNS topic
aws sns subscribe \
  --topic-arn 'arn:aws:sns:us-east-1:123456789012:OrderEvents' \
  --protocol sqs \
  --notification-endpoint 'arn:aws:sqs:us-east-1:123456789012:InventoryQueue'

Wzorzec architektury fan-out

Fan-out to podstawowy wzorzec SNS: jedna wiadomość jest publikowana w temacie, a SNS jednocześnie dostarcza ją wszystkim subskrybentom. Na przykład zdarzenie dotyczące nowego zamówienia może zostać rozgłoszone do: kolejki SQS obsługującej realizację zamówień w magazynie, innej kolejki SQS aktualizującej stan zapasów, funkcji Lambda wykrywającej oszustwa oraz subskrypcji e-mail dla zespołu operacyjnego. Każdy subskrybent przetwarza zdarzenie niezależnie, bez powiązań między nimi. Jest to znacznie bardziej skalowalne niż pojedynczy konsument kierujący komunikaty do wielu systemów.

Fan-out SNS + SQS: najlepsza praktyka

Zalecany wzorzec łączy SNS i SQS: wiadomości są publikowane w SNS, który rozgłasza je do wielu kolejek SQS. Zapewnia to:

  • Trwałość: jeśli konsument jest niedostępny, wiadomości oczekują w SQS
  • Niezależne skalowanie: każdy konsument przetwarza wiadomości we własnym tempie
  • Rozdzielenie zależności: nowi konsumenci po prostu subskrybują SNS, bez konieczności zmiany wydawcy
  • Odporność na ponowienia: SQS zapewnia visibility timeout i DLQ

Bezpośredni subskrybenci Lambda nie mają buforowania zapewnianego przez SQS, dlatego SNS→SQS→Lambda jest bardziej odpornym wzorcem trójwarstwowym.

Ponowienia dostarczania wiadomości i DLQ

Gdy SNS nie może dostarczyć wiadomości do subskrybenta (punkt końcowy HTTP zwraca błąd 5xx, Lambda zgłasza wyjątek lub SQS jest niedostępne), ponawia próbę zgodnie ze strategią wykładniczego wycofywania. Zasady ponawiania różnią się zależnie od protokołu: punkty końcowe HTTP otrzymują do 4 natychmiastowych ponowień, a następnie ponowienia z wykładniczym odstępem przez 23 dni; w przypadku Lambda i SQS ponowieniami zarządzają ich własne mechanizmy. Należy skonfigurować DLQ tematu SNS, aby przechwytywać wiadomości, dla których wyczerpano wszystkie próby dostarczenia, i mieć pewność, że żadne zdarzenia nie zostaną utracone bez śladu.

Publikowanie wiadomości w SNS

Wiadomości można publikować w SNS za pomocą AWS SDK lub CLI. Każda wiadomość może zawierać Subject (dla poczty e-mail), treść Message (do 256 KB) oraz Message Attributes używane do routingu. W przypadku różnych typów subskrybentów (SQS, poczta e-mail i urządzenia mobilne) można użyć Message Structure, aby wysłać różną treść do każdego protokołu — JSON z kluczami właściwymi dla protokołów pozwala dostosować dane dla danego typu subskrybenta.

aws sns publish \
  --topic-arn 'arn:aws:sns:us-east-1:123456789012:OrderEvents' \
  --message '{"orderId": "12345", "status": "PLACED", "amount": 99.99}' \
  --subject 'New Order Placed' \
  --message-attributes '{
    "orderType": {"DataType": "String", "StringValue": "PREMIUM"}
  }'

Zasady filtrowania subskrypcji SNS

Zasady filtrowania subskrypcji pozwalają każdemu subskrybentowi odbierać tylko dotyczące go wiadomości na podstawie atrybutów wiadomości. Bez filtrowania wszyscy subskrybenci otrzymują wszystkie opublikowane wiadomości. Za pomocą zasady filtrowania subskrybent określa, jakie wartości atrybutów go interesują. Na przykład kolejka zamówień „PREMIUM” subskrybuje temat z filtrem {"orderType": ["PREMIUM"]}, a kolejka „STANDARD” filtruje według ["STANDARD"]. Każdy subskrybent obsługuje tylko właściwy dla siebie podzbiór wiadomości, co ogranicza zbędne przetwarzanie.

aws sns set-subscription-attributes \
  --subscription-arn 'arn:aws:sns:...:subscription/...' \
  --attribute-name FilterPolicy \
  --attribute-value '{"orderType": ["PREMIUM"], "region": ["US", "EU"]}'

SNS do mobilnych powiadomień push

SNS obsługuje bezpośrednie mobilne powiadomienia push na urządzenia iOS (APNs) i Android (FCM/GCM). Tokeny urządzeń rejestruje się jako ARN-y punktów końcowych platformy, a następnie publikuje bezpośrednio w punkcie końcowym lub w temacie z subskrybentami będącymi aplikacjami platformowymi. W przypadku bezpośrednich powiadomień do urządzeń na dużą skalę (miliony urządzeń) warto połączyć SNS z fan-out SQS: SNS kieruje zdarzenie powiadomienia do SQS, a usługa robocza zajmuje się masowym wyszukiwaniem tokenów i dostarczaniem powiadomień na dużą skalę.

Szyfrowanie wiadomości SNS i kontrola dostępu

Wiadomości SNS należy chronić za pomocą szyfrowania po stronie serwera z użyciem AWS KMS. Szyfruje ono wiadomości w stanie spoczynku w infrastrukturze SNS. Kontrola dostępu wykorzystuje zarówno zasady oparte na zasobach (określające, kto może publikować w temacie lub go subskrybować), jak i zasady IAM. Aby zezwolić zasobnikowi S3 na publikowanie powiadomień w temacie SNS, należy przyznać uprawnienie sns:Publish podmiotowi usługi S3 w zasadzie zasobów tematu. Należy zawsze ograniczać możliwość publikowania do autoryzowanych źródeł, aby zapobiec wstrzykiwaniu nieautoryzowanych zdarzeń.

SNS a SQS: usługi uzupełniające się

SNS i SQS uzupełniają się, a nie stanowią dla siebie alternatywy. SNS (push) służy do natychmiastowego rozgłaszania wiadomości do wielu konsumentów — należy go użyć, gdy wiele systemów musi zareagować na zdarzenie. SQS (pull) służy do niezawodnego i trwałego przetwarzania przez pojedynczego konsumenta, z ponowieniami i DLQ — należy go użyć, gdy jeden konsument ma przetwarzać każdą wiadomość dokładnie raz, we własnym tempie. Wzorzec fan-out SNS→SQS zapewnia oba te rozwiązania: rozgłaszanie przez SNS oraz trwałe przetwarzanie z ponowieniami przez SQS. To połączenie często pojawia się w scenariuszach egzaminacyjnych SAA-C03.

Szybki test

Sprawdź swoją znajomość zagadnień AWS Solutions Architect (SAA-C03) omówionych w tej lekcji.

Podsumowanie lekcji

W tej lekcji nauczyli się Państwo, że: tematy SNS zapewniają rozgłaszanie pub/sub oparte na wypychaniu do subskrybentów, w tym jednocześnie do SQS, Lambda, HTTP, SMS-ów i poczty e-mail; architektura fan-out wykorzystuje jeden temat SNS zasilający wiele kolejek SQS, aby zapewnić trwałe, niezależnie skalowalne przetwarzanie zdarzeń przez wielu konsumentów; a zasady filtrowania subskrypcji ograniczają zbędne przetwarzanie, kierując do każdego subskrybenta tylko właściwe zdarzenia na podstawie atrybutów wiadomości. W następnej części szczegółowo omówimy filtrowanie wiadomości SQS oraz integrację SNS + SQS.

Często zadawane pytania

Czy lekcja „Tematy SNS i architektura fan-out” jest bezpłatna?

Tak — pełny tekst „Tematy SNS i architektura fan-out” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu AWS Solutions Architect, przejdź na CoddyKit PRO. Kurs AWS Solutions Architect zawiera 4 lekcji w sumie.

Co nauczysz się w „Tematy SNS i architektura fan-out”?

Opublikują wiadomość w jednym temacie SNS i jednocześnie roześlesz ją do wielu kolejek SQS, funkcji Lambda oraz endpointów HTTP. Ćwiczysz AWS Solutions Architect z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć AWS Solutions Architect?

Nie wymagamy żadnego doświadczenia. AWS Solutions Architect w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Tematy SNS i architektura fan-out”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji AWS Solutions Architect?

Tak. Każda lekcja AWS Solutions Architect zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Kolejki SQS Standard a FIFO
  2. Visibility Timeout, DLQ i long polling
  3. Tematy SNS i architektura fan-out
  4. Filtrowanie wiadomości SQS i integracja SNS + SQS
← Powrót do AWS Solutions Architect