問題文
ある企業は、注文の登録と在庫の引き当てを1つのプロセスで順に実行していた処理を、Amazon SQS の標準キューを挟んで2つのサービスに分けた。移行後、同じ商品に対する「引き当て」と「引き当ての取り消し」が投入した順と逆に処理され、在庫の数が実際と合わなくなる事象が1日に数件発生している。また同じ引き当てが二重に処理された記録も見つかった。この症状の原因と対処として最も適切なものはどれか。
選択肢
- 受け取る側の台数が多いために順序が入れ替わっているので、受け取る側を1台に固定し、あわせて処理した引き当ての識別子を記録して同じ識別子を二重に適用しない作りにすれば順序と重複の両方が解決する。あわせて同じ商品の操作は同じ受け取り側へ届くように振り分けの鍵を決める
- 標準キューは順序を厳密には保たず同じメッセージが複数回届くこともあるため、同じ商品の操作が入れ替わったり重複したりする。先入れ先出しのキューへ移して同じ商品を同じメッセージグループに割り当て、重複の排除の識別子を付けて同じ操作が二重に効かない作りにする
- キューを挟む構成そのものが誤りなので、2つのサービスが直接呼び合う同期的な連携へ戻す
- メッセージの可視性のタイムアウトが短いことが原因である。処理にかかる時間より十分に長い値へ変更し、処理が長引く場合は延長する呼び出しを入れれば、再配信による重複がなくなって順序と重複の両方が解決する