(メモ) 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
資料により、 Message スループットの制限と、 MessageDeduplicationId の適用範囲を、各 MessageGroup に絞ることで、 high throughput が実現する、と書いてある。
つまり、 MessageDeduplication とスループット制限機能の rate limit は、上限が決まっているが、それを各 MessageGroup ごとに処理することで、スループットを向上させる機能が、 High throughput FIFO SQS である。
Tags: awsaws-sqs
関連記事
SNS + Lambda vs SNS + SQS + Lambda
2022/10/4
SageMaker に関するメモ
2023/4/13
AWS Lambda + ECR の際の IAM 権限まわりについて
2022/11/6
AWS SDK で getaddrinfo で API コールが失敗する時の対処
2022/11/6
実行されている環境が AWS Lambda かどうか判定する方法
2022/10/23