LoginSignup
3
0

More than 3 years have passed since last update.

AWS SQS FIFOの並列動作について書いておく

Posted at

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秒から動作します。

相変わらずわかりにくい公式ドキュメント

スクリーンショット 2020-11-13 0.23.43.png

プロデューサーとか言われても。。。

ということで

FIFOだからグループIDが別であっても先入れしたメッセージが取得して終わらなければ、次のメッセージ取得はブロッキングされてしまうのではと言う不安、ありますよね。
実際に動作させてみたところ、前述のような動作することが確認できました。
ただ実際のところグループIDが別れていれば並行してメッセージが取得されるかと言われると、それは言い切れないかもしれません。

というのもSQSトリガーのLambdaは初期状態では5インスタンスしかありません。
メッセージの増加に従いスケールしていき、最終的には上限の同時期同数に達します。
ただ増加はそこまで急激ではなく、メッセージの増加量に追いつかないケースが考えられます。

その場合はおそらくスロットリング。。。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0