0

起動時に約300 MBのデータをダウンロードし、パス/app/local/mydataに保存するスプリングブートアプリケーションがあります。現在、私は単一のノードを持つただ1つの開発環境を持っており、それは問題ではありません。しかし、いったんノードを10個(例えば)持つ製品を作成すると、各ノードが同じ300 MBのデータを個別にダウンロードするためのデータ帯域幅の無駄になります。それはデータをダウンロードしているサービスに多くのストレスをかけるでしょう。また、EC2のデータの流入/流出に関連するコストもあります。Amazon Elastic Beanstalkノード間でデータを共有

タッチファイルを使用して論理を構築して、1つのボックスだけがデータをダウンロードし、他のものがダウンロードが完了するまで待つようにすることができます。しかし、私はを知りません。他のノードもそれを読むことができるように、これらのデータをダウンロードするにはが必要です。

提案がありますか?

答えて

1

ファイルに保存したい場合はS3にダウンロードしますが、データをデータベース(RDS)に置くか、Redis(ElastiCache)でキャッシュする必要があるようです。

私は "タッチファイル"が何であるか分かりませんが、あなたはある種のファイルロックメカニズムを意味すると思います。私はこれを複数のサーバーにまたがって調整するための最良の選択肢ではありません。おそらく、一貫した読み取りと条件付き書き込みを持つDynamoDBテーブルを分散ロックメカニズムとして使用しています。

ダウンロードするデータの頻度は変わることがありますか?おそらく、データを定期的にリフレッシュしてデータベースなどを更新するラムダ関数のスケジュールを立てることはできますか?

一般的に、この種の処理のためにWebサーバーのローカルファイルシステムを使用することをやめておく必要があります。

+0

サービスダウンロードは3時間ごとに約300 MBです。 3時間ごとにダウンロードを開始するための '@ Scheduled' Springアノテーションが既にあります。 「タッチファイル」のトリックは、実際にあなたがどのようなものであるかです。そして私はそれが良い方法ではないことに同意します。私はS3を使用することをお勧めします。 Javaの 'FileSystem'から書いたり読み込んだりすることができますか?そうでない場合は、私が使用しているライブラリが 'FileSystem'にデータをダウンロードするので、問題があります。残念ながら、ライブラリを変更することはできません。 – Nik

+0

これは、単一のサーバー上で実行されるスケジュールされたジョブとして最もよく処理されるようなものです。データをダウンロードして処理するのに5分もかからない場合、Lambdaを介してこれをスケジュールすることができます。さもなければ、cronジョブがおそらく最もうまくいくでしょう。 –

+1

私はあなたに利用できるさまざまなAWSサービスとその働きについてもっと学ぶことをお勧めします。 '@ Scheduled'を使うと、ジョブがすべてのWebサーバーで実行されることになります。したがって、並行性の問題に対処する必要があります。また、Elastic Beanstalkのスケールダウン操作が、データをダウンロードしている途中にあるサーバーを強制終了させる心配もあります。それが私だったら、Elastic Beanstalkでスケジュールされた仕事をまったく実行していないでしょう。 –

関連する問題