タイトルに記載されている問題に対する水平スケーリングの解決策を見つけようとしています。
問題のより詳細な説明は、次のようになります。メッセージ キュー Web サービスから、どこかにアップロードされたファイルへの URL を含むメッセージを読み取り、ファイルをダウンロードして解析し、そのコンテンツの場所がコンテンツに依存するファイルに追加します。 .
大量のメッセージがキューに入るため (毎秒 100 メッセージを連続して想定)、複数のワーカーで同時処理を実行する場合、ファイルへの制御されたアクセスがない場合、データが失われる可能性があります。
関連する特定の情報は、メッセージのバッチ内で、2 つのメッセージが同じ宛先ファイルに対するものである可能性は低いということです (これは、メッセージの 1% で均等に分散されると仮定します)。メッセージとそのファイルは、キューからメッセージを読み取る速度をわずかに上回っているため、衝突の可能性がかなり低くなります。
確率が非常に低い場合は、一部のデータを失うことは許容できるかもしれませんが、正確な数はわかりません。
これに使用できるアルゴリズムまたは設計パターンは何ですか?
いくつかの詳細:
- 1,000 万個の異なる出力ファイル
- 1 日あたり 500 万通のメッセージ
- ファイル ストレージはサードパーティの Web サービスによって提供され、無制限の同時読み取り/書き込みが可能です。
- メッセージの順序は重要ではありません
- メッセージにはファイルへの URL のみが含まれます (GUID を名前として含む)