SQS standard queue の MessageGroupId は fair queues のテナント識別子になる
AWS
SQS
キュー設計
マルチテナント
知識
判断
運用
Amazon SQS の standard queue では、MessageGroupId を付けると FIFO の順序制御ではなく fair queues のテナント識別子として扱われる。高ボリュームの tenant / client / request type が同じキューに大量メッセージを積んでも、SQS が受信順を調整して他グループの message dwell time を低く保とうとする。
適用条件
- 1 つの standard queue を複数テナント・顧客・リクエスト種別で共有している。
- 一部のグループだけ大量投入または重い処理を行い、他グループの短時間処理が待たされる noisy neighbor 問題を避けたい。
- 厳密な順序保証は不要で、高スループットと低待機時間を優先する。
使い分け
- standard queue +
MessageGroupId: テナント間の公平性を改善する。consumer 側の変更は不要で、同じMessageGroupIdのメッセージも並列処理され得る。 - FIFO queue +
MessageGroupId: 同一グループ内を直列化し順序を守る。head-of-line blocking とスループット制限を受けやすい。 - fair queues は per-tenant の実行数上限ではない。重いジョブが worker 枠を占有する問題には、処理サイズ別レーン、予約済み worker 枠、chunk 化、アプリ側の同時実行制御を併用する。
検証
負荷テストでは、1 グループに大量メッセージを投入した状態で別グループの小さいメッセージを投入し、CloudWatch の fair queues 関連メトリクスや、送信から受信までの dwell time が小さいまま保たれるかを見る。