SQSの標準キューの処理順序がばらばらになるのはなぜ? タイムスタンプとか持たせないの? |
| | |
良い疑問です。 実はSQSの標準キューも、メッセージごとに送信時刻などのメタデータは持っています。しかし、それでも順序保証はしません。 なぜ順序保証しないのか理由は、SQS標準キューが 「順序よりもスケーラビリティと可用性を優先している」 からです。 SQS内部では、メッセージは複数のサーバやストレージノードに分散して保存されます。 イメージとしては: 受信時には、 のようになることがあります。 すると、 だったとしても、 になる可能性があります。 タイムスタンプで並べ替えればいいのでは?理論上はできます。 しかしそうすると、 が必要になります。 これは分散システムでは結構大変です。 例えば:
という問題が出ます。 結果として、 高スループットと低遅延が犠牲になります。 FIFOキューはどうしている?FIFOキューは、 なら、 のように順序を管理します。 その代わり:
というコストを払っています。 実務では?多くのシステムでは、 のような厳密順序が不要です。 「とにかく漏れなく処理できればよい」 ケースが多いので、標準キューがよく使われます。 逆に、
など、 順序が重要な場合はFIFOを使います。 本質標準キューが順序保証しないのは、 「タイムスタンプを持っていないから」ではなく、「順序保証を捨てることで巨大なスケール性能を得ているから」 です。 AWSは意図的に、 「順序保証ありのFIFO」 を別サービスとして提供しているわけです。 |
|
|

この記事へのコメント