Thursday, November 21, 2024

[AWS] Data Ordering for Kinesis vs SQS FIFO

-

Ordering data into SQS.

SQS (Simple Queue Service) là một dịch vụ hàng đợi thông điệp được quản lý hoàn toàn bởi AWS (Amazon Web Services) cho phép tách rời và mở rộng các hệ thống phân tán.

SQS cung cấp hai loại hàng đợi thông điệp: hàng đợi chuẩn và hàng đợi FIFO (First-In-First-Out).

Trong hàng đợi SQS chuẩn, không có bất kỳ đảm bảo nào về thứ tự xử lý các thông điệp. Các thông điệp được gửi đến cho người tiêu thụ dưới hình thức “best effort”, do đó không thể đảm bảo được thứ tự của các thông điệp.

Trong khi đó, trong hàng đợi FIFO SQS, các thông điệp được giao trong đúng thứ tự mà chúng được gửi, và chỉ có một người tiêu thụ duy nhất có thể tiêu thụ các thông điệp từ một nhóm thông điệp cụ thể tại một thời điểm. Để bảo đảm việc sắp xếp thông điệp trong hàng đợi FIFO, bạn có thể sử dụng một Group ID khi gửi thông điệp. Các thông điệp có cùng Group ID được coi là một nhóm thông điệp duy nhất và luôn được xử lý theo thứ tự mà chúng được gửi.

Do đó, nếu bạn không sử dụng một Group ID trong hàng đợi FIFO SQS, các thông điệp vẫn sẽ được tiêu thụ theo thứ tự chúng được gửi, nhưng chỉ có một người tiêu thụ duy nhất có thể tiêu thụ các thông điệp tại một thời điểm. Nếu bạn sử dụng một Group ID, các thông điệp sẽ được giao theo thứ tự chúng được gửi và thứ tự này sẽ được bảo lưu qua nhiều người tiêu thụ.

Nếu bạn muốn mở rộng số lượng consumer (bộ tiêu thụ) để xử lý nhiều message hơn trong SQS, nhưng muốn các message có mối liên hệ với nhau được “nhóm lại” để xử lý, bạn có thể sử dụng một Group ID (tương tự như Partition Key trong Kinesis).

Khi gửi message tới một hàng đợi SQS FIFO, bạn có thể chỉ định một Group ID cho message. Các message có cùng Group ID sẽ được gom nhóm với nhau và sẽ được xử lý theo thứ tự đến khi tất cả các message của group đó được xử lý xong. Điều này đảm bảo tính tuần tự và nhóm hóa của các message khi được xử lý. Nếu không sử dụng Group ID, các message được xử lý theo thứ tự đến hàng đợi, tuy nhiên không đảm bảo rằng các message sẽ được xử lý theo đúng thứ tự.

Với SQS standard, không có tính năng sắp xếp (ordering), các message được xử lý ngẫu nhiên.

Kinesis vs SQS ordering.

Giả sử có 100 chiếc xe tải và chúng ta có sử dụng 5 shard trong Kinesis và một hàng đợi SQS FIFO.

Kinesis Data Streams:

  • Trung bình mỗi shard sẽ có khoảng 20 chiếc xe tải.
  • Dữ liệu của các xe tải sẽ được sắp xếp theo thứ tự trong mỗi shard.
  • Số lượng consumer tối đa mà chúng ta có thể có là 5.
  • Kinesis có thể nhận được lên đến 5 MB/s dữ liệu.

SQS FIFO:

  • Chỉ có một hàng đợi SQS FIFO.
  • Chúng ta sẽ có 100 Group ID (tương tự như Partition Key trong Kinesis).
  • Chúng ta có thể có tối đa 100 Consumers (do có 100 Group ID).
  • Hàng đợi có thể xử lý tối đa 300 tin nhắn mỗi giây (hoặc 3000 nếu sử dụng batching).

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories