私はこの問題に遭遇しましたが、これまでのところ、唯一の解決策はより強力な一貫性モデルのようです。サービスは、結果整合性を提供する Amazon S3 です。BLOB ストレージのバックエンドとして使用します。
問題は、アプリケーションにメッセージング パターンを導入したことです。そのメリットに疑いの余地はありません。ただし、より強い整合性が求められるようです。シナリオ:
- サブシステムはユーザーからデータを取得します
- データはS3に保存されます
- メッセージが送信されます
- メッセージは別のサブシステムによって受信されます
- データはS3から読み込まれます
- ...コオロギ。これは古いデータですか?時々そうです。
そう。S3からの一貫性のない読み取りを避けるために、メッセージでデータを送信することは明らかです。メッセージが不必要に大きくなり、レシーバーがビジー状態またはダウン状態になり、新しいデータが既に利用可能であるにもかかわらず遅れてメッセージを受信すると、メッセージは失敗します。
これに対する解決策はありますか? それとも、RDBMS や MongoDB のようなより一貫性のあるバックエンドのために S3 をダンプする必要があるのでしょうか?