AWS SQSではグループIDが異なれば並列で動くのか?
標準SQSであれば受信可能なメッセージから極力FIFOで処理されていきますが、基本的には順序保証なくどんどん消化されます。
トリガーにLambdaが設定されていれば、複数のLambdaインスタンスにより処理されていきます。
ではFIFOはどうなのか?
FIFOはグループID単位で順序を保証します。
ではグループIDが異なっていればどうなるか?
例えば
1番目 グループID:A 8:00:01にキュー登録
2番目 グループID:A 8:00:02にキュー登録
3番目 グループID:B 8:00:03にキュー登録
4番目 グループID:C 8:00:04にキュー登録
とした場合。
トリガーのLambdaは10秒処理がかかるとします。
この場合は
1番目→3番目→4番目→2番目
の順でメッセージを取得していきます。
このとき、3番目の実行タイミングは1番目が実行中のときに開始しますので、8:00:03に処理開始します。
4番目も同じく、8:00:04に処理を開始します。
2番目のキューは1番目の処理が完了してから動作するため、8:00:11秒から動作します。
相変わらずわかりにくい公式ドキュメント
プロデューサーとか言われても。。。
ということで
FIFOだからグループIDが別であっても先入れしたメッセージが取得して終わらなければ、次のメッセージ取得はブロッキングされてしまうのではと言う不安、ありますよね。
実際に動作させてみたところ、前述のような動作することが確認できました。
ただ実際のところグループIDが別れていれば並行してメッセージが取得されるかと言われると、それは言い切れないかもしれません。
というのもSQSトリガーのLambdaは初期状態では5インスタンスしかありません。
メッセージの増加に従いスケールしていき、最終的には上限の同時期同数に達します。
ただ増加はそこまで急激ではなく、メッセージの増加量に追いつかないケースが考えられます。
その場合はおそらくスロットリング。。。