Thursday, November 21, 2024

[AWS] SNS and SQS – Fan Out Pattern

-

1. SNS + SQS: Fan Out.

SNS có thể được sử dụng để gửi thông báo đến nhiều hàng đợi SQS khác nhau. Khi thông báo được gửi một lần, tất cả các hàng đợi SQS đó đều nhận được thông báo đó. Điều này giúp giảm thiểu sự phụ thuộc giữa các thành phần của hệ thống và đảm bảo tính phân tán cho hệ thống của bạn.

Việc sử dụng SNS và SQS cũng giúp đảm bảo tính an toàn cho dữ liệu trong hệ thống của bạn. SQS cho phép lưu trữ dữ liệu, xử lý trễ và thực hiện lại công việc khi cần thiết. Điều này giúp đảm bảo rằng dữ liệu của bạn sẽ không bị mất khi xử lý lỗi xảy ra.

Thêm vào đó, hệ thống của bạn có thể thêm được nhiều hàng đợi SQS khác nhau theo thời gian, tùy thuộc vào nhu cầu của bạn. Tuy nhiên, bạn cần đảm bảo rằng chính sách truy cập hàng đợi SQS của bạn cho phép SNS ghi thông báo vào hàng đợi đó.

Cuối cùng, SNS cũng hỗ trợ việc giao hàng qua các khu vực khác nhau. Điều này cho phép các hàng đợi SQS ở các khu vực khác nhau nhận được thông báo được gửi bởi SNS.

2. Application: S3 Events to multiple queues.

Trong AWS, bạn có thể thiết lập một quy tắc S3 Event để tạo sự kiện khi các hành động như tạo, cập nhật hoặc xóa đối tượng trên Amazon S3 được thực hiện. Một số trường hợp sử dụng S3 Event, như khi bạn muốn gửi thông báo khi một file mới được tải lên hoặc xóa, khi muốn xử lý file bằng Lambda khi nó được tải lên, hoặc khi muốn sao chép file từ S3 đến một vị trí khác.

Nếu bạn muốn gửi sự kiện S3 đến nhiều hàng đợi SQS khác nhau, bạn có thể sử dụng fan-out. Điều này đảm bảo rằng khi một sự kiện xảy ra trên S3, thông báo sẽ được gửi đến tất cả các hàng đợi SQS được đăng ký để nhận sự kiện đó. Fan-out giúp đảm bảo tính phân tán cho hệ thống của bạn, giúp tránh tình trạng tắc nghẽn và đảm bảo không bị mất dữ liệu.

3. Application: SNS to Amazon S3 through Kinesis Data Firehose.

Cấu trúc kiến trúc giải pháp cho việc sử dụng Amazon SNS để gửi tin nhắn tới Amazon S3 thông qua Kinesis Data Firehose bao gồm các bước sau:

  • Tạo một chủ đề Amazon SNS: Trong bước này, bạn sẽ tạo một chủ đề SNS, chẳng hạn như “MyTopic”, và đảm bảo rằng các quyền truy cập cần thiết được cấp cho nó.
  • Tạo một luồng Firehose: Sau khi bạn đã tạo chủ đề SNS, tiếp theo là tạo một luồng Firehose mới bằng cách chỉ định tên và các tùy chọn khác như mã hóa, nơi đầu ra, định dạng dữ liệu, v.v.
  • Tạo một đăng ký Amazon SNS: Bây giờ bạn sẽ tạo một đăng ký cho chủ đề SNS “MyTopic”, và cung cấp thông tin đăng ký, chẳng hạn như địa chỉ email hoặc địa chỉ HTTPS, v.v.
  • Thêm đăng ký vào luồng Firehose: Sau khi bạn đã tạo đăng ký, bạn cần thêm nó vào luồng Firehose bằng cách sử dụng API PutDestination của Kinesis Data Firehose.
  • Gửi thông báo từ SNS tới Firehose: Bây giờ, khi SNS nhận được thông báo, nó sẽ gửi thông báo đó đến luồng Firehose. Các bản ghi dữ liệu được gửi đến luồng Firehose, nơi chúng được xử lý và đưa vào Amazon S3.

4. Amazon SNS – FIFO Topic.

FIFO là từ viết tắt của “First In First Out” và nó chỉ ra rằng các thông báo trong chủ đề (topic) được sắp xếp theo thứ tự đến trước đến trước (đầu vào trước đầu ra trước).

Amazon SNS FIFO (First-In-First-Out) Topic cung cấp các tính năng tương tự như Amazon SQS FIFO Queue. Các tính năng này bao gồm sắp xếp thông báo bằng cách sử dụng Message Group ID (ID nhóm tin nhắn) và hỗ trợ tính năng deduplication (loại bỏ thông báo trùng lặp) bằng cách sử dụng Deduplication ID hoặc Content Based Deduplication.

Tuy nhiên, chỉ các hàng đợi Amazon SQS FIFO mới có thể đăng ký như người đăng ký cho chủ đề (topic) Amazon SNS FIFO. Ngoài ra, Amazon SNS FIFO có giới hạn về thực thi (throughput) giống như Amazon SQS FIFO.

5. SNS FIFO + SQS FIFO: Fan Out.

Nếu bạn cần fan-out, ordering và deduplication cho các message, bạn có thể sử dụng SNS FIFO kết hợp với SQS FIFO để tạo một kiến ​​trúc fan-out.

Trong kiến ​​trúc này, bạn sẽ sử dụng SNS FIFO làm event producer và SQS FIFO làm event consumer. Để đảm bảo ordering, bạn có thể sử dụng message group ID. Các message với cùng message group ID sẽ được xử lý theo thứ tự FIFO. Để đảm bảo deduplication, bạn có thể sử dụng content-based deduplication. Bằng cách này, nếu hai message giống nhau, chỉ có một message sẽ được gửi đến các SQS FIFO queues.

Với kiến ​​trúc fan-out này, SNS FIFO sẽ gửi một message đến SQS FIFO, và sau đó SQS FIFO sẽ gửi message đến các consumer queues (nếu có). Bạn có thể thêm bất kỳ số lượng consumer queues nào bạn muốn vào kiến ​​trúc này.

6. SNS – Message Filtering.

Trong Amazon SNS, chúng ta có thể sử dụng JSON policy để lọc các thông báo được gửi tới các đăng ký của chủ đề SNS. Nếu một đăng ký không có bộ lọc chính sách, nó sẽ nhận tất cả các thông báo được gửi tới chủ đề. Với tính năng lọc thông báo, chúng ta có thể giảm thiểu số lượng thông báo không cần thiết mà đăng ký nhận được, giúp cho hệ thống hoạt động hiệu quả hơn và giảm thiểu tài nguyên được sử dụng. Ví dụ, chúng ta có thể lọc các thông báo dựa trên địa chỉ IP nguồn hoặc thuộc tính cụ thể của thông báo.

7. Thực hành.

Đầu tiên hãy vào Simple Notification Service.

Đặt tên cho Topic va bấm Next step.

FIFO (first-in, first-out) là một loại topic trong Amazon SNS. Nó bảo đảm sự xử lý thông điệp theo thứ tự đúng như thời gian mà chúng được gửi tới, và đảm bảo mỗi thông điệp chỉ được xử lý một lần duy nhất. Điều này rất quan trọng trong các trường hợp mà việc thực hiện các hành động theo đúng thứ tự là rất quan trọng, ví dụ như trong các bản ghi giao dịch tài chính.

FIFO topic có khả năng xử lý các thông điệp với tốc độ cao, lên đến 300 publish/giây. Nó hỗ trợ các giao thức đăng ký như SQS và Standard.

Trong khi đó, non-FIFO topic cho phép các thông điệp được xử lý với tốc độ cao nhất trong các topic. Tuy nhiên, nó không bảo đảm sự xử lý thông điệp theo thứ tự đúng như thời gian chúng được gửi tới, và có thể gửi thông điệp nhiều lần cho đến khi được xử lý đúng một lần. Nó hỗ trợ nhiều giao thức đăng ký như SQS, Lambda, HTTP, SMS, email và các endpoint ứng dụng di động.

Bên cạnh đó, khi đăng ký với một topic, bạn có thể chỉ định các bộ lọc thông điệp để chỉ nhận các thông điệp cụ thể. Nếu một đăng ký không có bộ lọc, nó sẽ nhận tất cả các thông điệp gửi đến topic.

Phần Encryption – optional giữ nguyên mặc định.

Phần Access policy – optional giữ nguyên mặc định.

Tất cả các phần dưới giữ mặc định hết (vì lý do demo) và bấm Create topic.

Thông báo Topic My FirstTopic created successfully cho thấy bạn đã tạo topic thành công.

Như các bạn thấy lúc mới tạo chúng ta không có Subscription nào. Để tạo Subscription đầu tiên chúng ta bấm vào Create Subscription.

Ở phần Protocol hỗ trợ nhiều giao thức như bạn thấy ở ảnh chụp dưới.

Để đơn giản mình sẽ lựa chọn Email để demo.

Phần Subscription filter policy và Redrive policy (dead-letter queue) hiện tại chúng ta bỏ qua nó và bấm Create subscription để tạo subscription này.

Quay lại Subscriptions bạn đã thấy có Subscription đầu tiên và đang ở trạng thái Pending confirmation.

Qua hòm thư của bạn, bạn sẽ nhận được 1 thư mới, hãy bấm vào đọc nó.

Bấm vào Confirm subscription để xác nhận.

Thông báo Subscription confirmed! cho biết bạn đã xác nhận thành công.

Và khi mình tải lại trang, bạn thấy status đã chuyển sang Confirmed.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories