Skip to content

Amazon SNS (Simple Notification Service)

Amazon SNS (Simple Notification Service) là dịch vụ Pub/Sub messaging (Publish/Subscribe) được quản lý hoàn toàn bởi AWS. SNS cho phép một thành phần (publisher) gửi sự kiện (message) đến nhiều thành phần khác (subscribers) cùng lúc, theo mô hình fan-out.

Cơ chế hoạt động

  • Topic: Điểm trung gian để nhận message từ Publisher và phân phối đến Subscriber.
  • Publisher: Thành phần tạo ra sự kiện hoặc message.
  • Subscriber: Thành phần nhận message từ topic.

SNS hỗ trợ nhiều loại subscriber:

  • SQS Queue
  • AWS Lambda function
  • HTTP/HTTPS endpoint
  • Email/SMS/Mobile push notification
AWS SNS là gì

Lợi ích chính

  • Fan-out Architecture: Một message có thể đến nhiều subscriber cùng lúc.
    • Mỗi Topic có thể có lên tới 12,500,000 Subscriptions/Topic
  • Push-based: Subscriber nhận message theo cơ chế push (không cần polling).
  • Scalability: Hỗ trợ xử lý hàng triệu message mỗi giây.
  • Flexibility: Hỗ trợ nhiều loại endpoint khác nhau.
  • Reliability: Tích hợp retry, dead-letter queue (khi subscriber là SQS).
  • Security: Tích hợp với IAM policies, VPC endpoint, và message encryption bằng KMS.

Các kiểu message delivery

  • Standard SNS Topic

    • Thông lượng cao.
    • Không đảm bảo thứ tự tuyệt đối.
    • At-least-once delivery.
  • FIFO SNS Topic

    • Đảm bảo thứ tựexactly-once processing.
    • Thông lượng hạn chế hơn.
    • Phù hợp với các hệ thống yêu cầu tính toàn vẹn dữ liệu.
    • Subscribers chỉ có thể là SQS FIFO queues

Use Cases phổ biến

  • Fan-out notifications: Một sự kiện mới (ví dụ: upload file S3) gửi đến nhiều subscriber (EC2, Lambda, email).
  • Event-driven architecture: Dùng SNS để phát sự kiện đến microservices.
  • Application alerts: Gửi thông báo đến admin/dev team qua SMS hoặc email.
  • Kết hợp với SQS: Fan-out message vào nhiều queue để xử lý song song.

SNS vs SQS

Đặc điểmSQS (Queue)SNS (Pub/Sub)
Mô hìnhProducer → Queue → ConsumerPublisher → Topic → Subscribers
Xử lýConsumer phải pull messageSNS push trực tiếp đến subscriber
Đối tượng nhậnMột consumer (hoặc nhiều consumer chia sẻ queue)Nhiều subscriber cùng lúc (fan-out)
Thứ tựStandard: best-effort, FIFO: strictStandard: không đảm bảo, FIFO: có
Use case chínhDecoupling và bufferingFan-out, event broadcasting

Kiến trúc Fan-out

Fan-out = Một Event được broadcast đến nhiều hệ thống khác nhau cùng lúc.

Kiến trúc cơ bản

  1. Publisher gửi 1 message vào SNS Topic.
  2. SNS sẽ fan-out (nhân bản) message đó và đẩy đến tất cả SQS subscribers.
  3. Mỗi service consume message từ queue riêng của nó.
  4. Services xử lý độc lập, không ảnh hưởng lẫn nhau.

Sơ đồ sau mình sẽ lấy ví dụ minh hoạ về hệ thống E-commerce:

Kiến trúc Fan-out là gì

SNS Message Filtering là gì?

Cùng thảo luận về những vấn đề ở kiến trúc trên nhé:

  • Message được gửi đến cả Queue A, B, C.
  • 3 Service Inventory, Billing, Email đều cần đọc message xem có phải nhiệm vụ của mình không.
    • Cost tài nguyền có thể bị lãng phí nếu message không liên quan đến một service nào trong đó.

Đây chính là lúc Message Filtering phát huy tác dụng.

SNS Message Filtering là một tính năng của Amazon SNS cho phép subscriber chỉ nhận những message phù hợp với tiêu chí (Filter Policy) mà họ định nghĩa, thay vì nhận tất cả message từ topic.

Cơ chế hoạt động:

  1. Khi một publisher gửi message vào SNS Topic, message có thể chứa Message Attributes (thuộc tính bổ sung, dạng key-value).
  2. Subscriber đăng ký với một Filter Policy (JSON object), định nghĩa những message nào được nhận.
SNS Message Filtering là gì

Pricing (tổng quan)

  • Trả phí theo số lượng request PublishDeliver.
  • Free Tier: 1 triệu request và 100.000 notification/tháng.
  • Chi phí phụ thuộc vào loại protocol (ví dụ: SMS có phí riêng).