(メモ) AWS SQS の High throughput FIFO とは

Published: 2023/7/11


AWS SQS で FIFO な queue を利用する場合、 high throughput FIFO なるものがある、というのが資料から読み取れる。 これは何なのかについての備忘録。

そもそも SQS の FIFO キューは、 at least once な標準キューへのメッセージリクエストに加えて、以下の追加情報を与えることで動作する。 (参考)

  • MessageGroupId
  • MessageDeduplicationId (オプショナル)

FIFO キューは、同一の MessageGroupId を持つメッセージに対しては、 SQS が受け付けた時刻を基準に、 FIFO にクライアントが Receive できることを保証する。

また、 SQS への enqueue 通信に retry 等があるために二重で登録されることがないようにするために、 MessageDeduplicationId が同じメッセージは、5分間は enqueue されない( sendMessage 自体は success する)。

中身としては、 FIFO キューは、 HashList 的な動作をする。 つまり、処理が捌けるぐらいの partition (インスタンス・シャード的なもの) を用意しておいて、それを MessageGroupId を hash 関数にかませて、各 partition に振り分ける。 各 partition は、おそらく Master Slave (with 自動 master 昇格)で同期される RDB 的なものが動いていて、SendMessage リクエストを受け付けた順番に、内部にレコードを保存し、かつ、 ReceiveMessage は First Out で順次処理していく。 その際、 DeleteMessage を受信してレコードが削除されない限りは、複数の ReceiveMessage が来たとしても、最初のもの以外はブロッキングする模様。 (参考)

High throughput

https://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSDeveloperGuide/high-throughput-fifo.html#enable-high-throughput-fifo

資料により、 Message スループットの制限と、 MessageDeduplicationId の適用範囲を、各 MessageGroup に絞ることで、 high throughput が実現する、と書いてある。

つまり、 MessageDeduplication とスループット制限機能の rate limit は、上限が決まっているが、それを各 MessageGroup ごとに処理することで、スループットを向上させる機能が、 High throughput FIFO SQS である。


Tags: awsaws-sqs

関連記事