起動時に約300 MBのデータをダウンロードし、パス/app/local/mydata
に保存するスプリングブートアプリケーションがあります。現在、私は単一のノードを持つただ1つの開発環境を持っており、それは問題ではありません。しかし、いったんノードを10個(例えば)持つ製品を作成すると、各ノードが同じ300 MBのデータを個別にダウンロードするためのデータ帯域幅の無駄になります。それはデータをダウンロードしているサービスに多くのストレスをかけるでしょう。また、EC2のデータの流入/流出に関連するコストもあります。Amazon Elastic Beanstalkノード間でデータを共有
タッチファイルを使用して論理を構築して、1つのボックスだけがデータをダウンロードし、他のものがダウンロードが完了するまで待つようにすることができます。しかし、私はを知りません。他のノードもそれを読むことができるように、これらのデータをダウンロードするにはが必要です。
提案がありますか?
サービスダウンロードは3時間ごとに約300 MBです。 3時間ごとにダウンロードを開始するための '@ Scheduled' Springアノテーションが既にあります。 「タッチファイル」のトリックは、実際にあなたがどのようなものであるかです。そして私はそれが良い方法ではないことに同意します。私はS3を使用することをお勧めします。 Javaの 'FileSystem'から書いたり読み込んだりすることができますか?そうでない場合は、私が使用しているライブラリが 'FileSystem'にデータをダウンロードするので、問題があります。残念ながら、ライブラリを変更することはできません。 – Nik
これは、単一のサーバー上で実行されるスケジュールされたジョブとして最もよく処理されるようなものです。データをダウンロードして処理するのに5分もかからない場合、Lambdaを介してこれをスケジュールすることができます。さもなければ、cronジョブがおそらく最もうまくいくでしょう。 –
私はあなたに利用できるさまざまなAWSサービスとその働きについてもっと学ぶことをお勧めします。 '@ Scheduled'を使うと、ジョブがすべてのWebサーバーで実行されることになります。したがって、並行性の問題に対処する必要があります。また、Elastic Beanstalkのスケールダウン操作が、データをダウンロードしている途中にあるサーバーを強制終了させる心配もあります。それが私だったら、Elastic Beanstalkでスケジュールされた仕事をまったく実行していないでしょう。 –