SNS (Simple Notification Service) P2

SNS + SQS: Fan Out Pattern
- Chỉ SNS thì không đảm bảo lưu trữ và không hỗ trợ retry/phục hồi nếu subscriber fail.
→ Dùng SNS + SQS sẽ giúp hệ thống đáng tin cậy hơn, scale tốt hơn, decouple hơn. - SNS chỉ làm fanout + tạm thời retry
SQS mới là nơi store message, retry logic, backoff, dead-letter queue

- Gửi một lần (push once) vào SNS, tất cả các SQS queue subscriber đều nhận được bản sao message.
- Fully decoupled, đảm bảo không mất dữ liệu (no data loss).
- SQS hỗ trợ:
- Lưu trữ dữ liệu (data persistence)
- Xử lý trễ (delayed processing)
- Retry khi fail
- Có thể thêm nhiều subscriber SQS mới theo thời gian (scale out dễ dàng).
- Cần đảm bảo SQS access policy cho phép SNS được ghi vào queue.
- Cross-Region Delivery – hoạt động với các queue ở region khác.
Ví dụ: Gửi S3 Events đến nhiều queue
- Với cùng một tổ hợp: kiểu sự kiện (event type) (ví dụ: object create) và tiền tố (prefix) (ví dụ:
images/), bạn chỉ có thể có một quy tắc S3 Event rule duy nhất. - Nếu bạn muốn gửi cùng một sự kiện S3 đến nhiều hàng đợi SQS, hãy sử dụng mô hình fan-out.

FIFO Topic
- FIFO = First In First Out (thứ tự xử lý message theo thứ tự nhận vào)

- Tính năng tương tự như SQS FIFO:
- Ordering: Theo
Message Group ID(mọi message cùnggroup IDsẽ được xử lý theo thứ tự). - Deduplication: Tránh trùng message thông qua
Deduplication IDhoặc cơ chếContent-Based Deduplication.
- Ordering: Theo
- Chỉ hỗ trợ SQS FIFO làm subscriber
(tức là topic này không thể fan-out đến Lambda, HTTP endpoint hoặc SQS Standard) - Thông lượng (throughput) giới hạn
(bằng với giới hạn của SQS FIFO)
SNS FIFO + SQS FIFO: Fan Out
Trong trường hợp bạn cần fan-out + ordering + deduplication

Luồng hoạt động tổng thể:
- Buying Service gửi message đến SNS FIFO Topic.
- SNS FIFO Topic thực hiện “fan-out” — phát tán message đến nhiều SQS FIFO Queue (tức là broadcast theo cơ chế FIFO).
- Các SQS FIFO Queue này lần lượt được consume bởi các service backend như:
- Fraud Service
- Shipping Service
Message Filtering
- Sử dụng JSON policy để lọc message gửi đến các subscription của SNS Topic.
- Việc filter message diễn ra ở phía SNS, cụ thể là trong quá trình SNS fan-out message đến các subscriber.
- Việc định nghĩa filter policy được thực hiện trên SNS subscription, không phải ở SQS
- Nếu một subscription không có filter policy, nó sẽ nhận tất cả message.

Bạn thấy bài này thế nào?