SNS (Simple Notification Service) P2

2 phút đọcSeries: NoteBook: AWS Certified Solutions Architect Associate SAA-C031 lượt xem

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ùng group ID sẽ được xử lý theo thứ tự).
    • Deduplication: Tránh trùng message thông qua Deduplication ID hoặc cơ chế Content-Based Deduplication.
  • 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?