Usługi aplikacyjne: SQS, SNS, EventBridge
Wyobraź sobie restaurację. Kelner przyjmuje zamówienia, ale zamiast biec prosto do kuchni z każdym, wrzuca karteczkę na półkę. Kucharz zabiera karteczki w swoim tempie. Nawet jeśli kelner przyjmie 50 zamówień na raz, kuchnia nie zostanie zablokowana. To właśnie robi kolejka wiadomości w świecie aplikacji.
W tej lekcji poznasz trzy kluczowe usługi, które pozwalają budować luźno powiązane (loosely coupled) systemy w AWS. To fundamentalna koncepcja, która pojawia się na egzaminie Cloud Practitioner.
Dlaczego „loosely coupled" to takie ważne?
W tradycyjnej architekturze (tightly coupled) aplikacja A woła bezpośrednio aplikację B. Jeśli B padnie, A też przestaje działać. To jak domino.
W architekturze loosely coupled, między A i B stoi pośrednik (kolejka, temat, event bus). Jeśli B padnie, wiadomości czekają w kolejce. Gdy B wróci, przetwarza je po kolei. Zero domina.
Amazon SQS (Simple Queue Service)
SQS to w pełni zarządzana kolejka wiadomości. Producent (sender) wrzuca wiadomości do kolejki, konsument (receiver) je stamtąd pobiera i przetwarza. To najstarsza usługa AWS (uruchomiona w 2004 roku, przed samym EC2!).
Jak działa SQS?
- Producent wysyła wiadomość do kolejki SQS
- Wiadomość czeka w kolejce (nawet do 14 dni)
- Konsument odpytuje (poll) kolejkę i pobiera wiadomość
- Konsument przetwarza wiadomość i usuwa ją z kolejki
Kluczowe: konsument sam pobiera wiadomości (pull model). SQS nie „pcha" wiadomości do konsumenta.
| Cecha | SQS Standard | SQS FIFO |
|---|---|---|
| Kolejność | Best-effort (może się zmienić) | Gwarantowana (First-In-First-Out) |
| Przepustowość | Prawie nieograniczona | Do 3000 msg/s z batchingiem |
| Duplikaty | Możliwe (at-least-once delivery) | Exactly-once processing |
| Zastosowanie | Większość przypadków | Płatności, zamówienia, transakcje |
| Nazwa kolejki | Dowolna | Musi kończyć się na .fifo |
Dead Letter Queue (DLQ)
Co się dzieje, gdy wiadomość nie może zostać przetworzona? Np. ma błędny format albo konsument wielokrotnie próbuje ją przetworzyć i za każdym razem leci błąd?
Po określonej liczbie nieudanych prób (maxReceiveCount), wiadomość trafia do Dead Letter Queue. To osobna kolejka SQS, do której wędrują „problemowe" wiadomości. Dzięki temu nie blokują głównej kolejki i możesz je potem przeanalizować.
Amazon SNS (Simple Notification Service)
SNS działa na zasadzie pub/sub (publish/subscribe). Masz temat (topic), do którego publikujesz wiadomość. Każdy, kto subskrybuje ten temat, automatycznie ją otrzymuje. To jak newsletter: piszesz raz, a wiadomość leci do wszystkich subskrybentów.
Jak działa SNS?
- Tworzysz SNS Topic
- Subskrybenci zapisują się na topic (mogą to być: email, SMS, HTTP endpoint, SQS queue, Lambda function)
- Publisher wysyła wiadomość do topicu
- SNS push wiadomość do WSZYSTKICH subskrybentów jednocześnie
Kluczowa różnica: SNS to push model. Wiadomość jest aktywnie wysyłana do subskrybentów (w odróżnieniu od SQS, gdzie konsument sam pobiera).
Fan-out Pattern: SNS + SQS
To jeden z najpopularniejszych wzorców architektonicznych w AWS. Masz jedno zdarzenie (np. nowe zamówienie), ale chcesz, żeby przetworzyło je kilka różnych systemów: jeden wysyła email, drugi aktualizuje magazyn, trzeci generuje fakturę.
Jak to zrobić? Publikujesz wiadomość do SNS Topic, a topic ma kilka subskrybentów, z których każdy to osobna kolejka SQS. Każdy system ma swoją kolejkę i przetwarza wiadomość niezależnie.
Przykład: nowy użytkownik rejestruje się w aplikacji.
- Aplikacja publikuje zdarzenie „NewUserRegistered" do SNS Topic
- Subskrybent 1 (SQS → Lambda): wysyła email powitalny
- Subskrybent 2 (SQS → Lambda): tworzy domyślny profil w bazie
- Subskrybent 3 (SQS → Lambda): dodaje do listy newsletterowej
- Subskrybent 4 (SQS → Lambda): wysyła powiadomienie do zespołu sales
Każdy system działa niezależnie. Jeśli wysyłka emaila się opóźni, tworzenie profilu nie jest blokowane. To właśnie loose coupling w praktyce.
Amazon EventBridge
EventBridge to serverless event bus. Możesz go traktować jako „inteligentniejszą" wersję SNS. Zbiera zdarzenia z wielu źródeł (usługi AWS, Twoje aplikacje, partnerzy SaaS) i routuje je do odpowiednich celów na podstawie reguł.
Co wyróżnia EventBridge?
- Routing oparty na regułach: możesz filtrować zdarzenia po zawartości (np. „wyślij alert tylko gdy zamówienie > 1000 zł")
- Integracja z SaaS: gotowe integracje z Zendesk, Datadog, Shopify i wieloma innymi
- Natywne zdarzenia AWS: każda zmiana w AWS (np. zmiana stanu EC2, upload do S3) generuje event w EventBridge
- Schema Registry: automatycznie odkrywa strukturę zdarzeń
- Archive & Replay: możesz archiwizować zdarzenia i odtwarzać je później
| Cecha | Amazon SNS | Amazon EventBridge |
|---|---|---|
| Model | Prosty pub/sub | Event bus z regułami routingu |
| Filtrowanie | Podstawowe (atrybuty) | Zaawansowane (content-based routing) |
| Integracje SaaS | Brak natywnych | Wiele gotowych partnerów |
| Użycie | Powiadomienia, fan-out | Event-driven architecture, automatyzacja |
| Złożoność | Prosty w użyciu | Więcej możliwości, więcej konfiguracji |
- SQS to kolejka wiadomości: producent wrzuca, konsument pobiera w swoim tempie. Idealne do buforowania obciążenia
- SQS Standard daje prawie nieograniczoną przepustowość, FIFO gwarantuje kolejność i exactly-once delivery
- Dead Letter Queue wyłapuje wiadomości, które wielokrotnie nie mogły zostać przetworzone
- SNS to pub/sub: publikujesz raz, wiadomość leci do wielu subskrybentów (email, SMS, SQS, Lambda, HTTP)
- Fan-out pattern łączy SNS z wieloma kolejkami SQS, pozwalając wielu systemom reagować na jedno zdarzenie
- EventBridge to serverless event bus z inteligentnym routingiem, integracjami SaaS i natywnym wsparciem zdarzeń AWS
- Loose coupling (decoupling) to kluczowa koncepcja: systemy komunikują się przez pośrednika, nie bezpośrednio
Firma chce przetwarzać zamówienia asynchronicznie. System zamówień wysyła wiadomości, a system fulfillment przetwarza je w swoim tempie. Która usługa najlepiej pasuje?
Jaki wzorzec architektoniczny łączy SNS Topic z wieloma kolejkami SQS, aby jedno zdarzenie było przetwarzane przez wiele systemów?
Która usługa AWS jest serverless event bus z content-based routing i gotowymi integracjami z partnerami SaaS?