現在のシナリオ
私たちのアプリケーションでは、ユーザーが私たちのインターフェースを介してファイルをアップロード(Amazon S3)し、ファイルを管理できます。現在、これらのユーザーは、アプリケーションを介してS3/Cloudfrontから直接ファイルをダウンロードできます。
Zip機能の追加
システムに機能を追加して、ユーザーが一度に複数のファイルを選択してZipファイルとしてダウンロードできるようにします。
ユーザーがボタンをクリックしてZipファイルをダウンロードすると、システムがリクエストを処理してZipをコンパイルし、Zipをエンドユーザーに返すように、プロセスがリアルタイムで機能するようにします。プロセスの実行中、フロントエンドは要求が処理中であることをユーザーに通知し、プロセスが完了すると、ファイルのダウンロードを要求します。
提案された戦略
私たちのアプリケーションはAWSクラウドベースであるため、最初の本能は Amazon SQS (ただし他の提案を受け入れる)を使用してこれらのリクエストを処理するキューシステムを構築することです。フローは次のように機能します。
ステップ4を処理する最良の方法?
このプロセスは堅実なアプローチのようで、ステップ4まですべてが理にかなっています。エンドユーザーにジョブが完了し、ファイルをダウンロードする準備ができていることをリアルタイムで通知する最善の方法に取り組んでいます。
私の研究から、私は人々が提案する3つの方法を見てきました。
Pub/subを使用してジョブのソケットを作成し、完了したら応答を返します。
S3上の完成したZipファイルに対するフロントエンドサーバーによる継続的なポーリング。
オープンな実行中のリクエストを残す
私の質問
上記のポイントを考慮して、ジョブキューが完了し、ファイルをダウンロードする準備ができたことをフロントエンドクライアントに通知する最良の方法は何ですか?
私がやろうとしていることの良い例がYouTubeです。動画をYouTubeにアップロードすると、キューが動画を処理し、完了すると、動画処理が完了したことを通知します。私のシナリオでは、ZipファイルがいつS3にアップロードされたのかをクライアントに知らせたいという点を除いて、同じコンセプトを複製しようとしています。
私は理論的な解決策を知っているので、具体的に教えてください。 SQSを使用しているか、リストに挙げたテクノロジー/方法論を使用しているかに関係なく、私はどんな提案にも応じます。この種のものの実際のコード例を示すことは大きなボーナスになります。
よろしくお願いします!
私の考えは、フロントエンドがサーバー送信イベント( https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events )を発行するWebサーバーを確立することですSQSを介してワーカーにジョブを実行するメッセージ。ワーカーが完了すると、別のキューのWebサーバーにメッセージを追加します。このキューは、一度にメッセージのバッチについてポーリングされ、それぞれがイベントをクライアントに送り返します。
クライアントとサーバーがやり取りしないため、Webソケットを使用する必要はありません。