2016-07-04 5 views
0

私はAWSの使用は非常に新しいです。現在、私はS3リンクを取り、そのリンクからデータをダウンロードし、データを処理し、そのデータに関する情報を出力するアプリケーションを開発しました。私は既にこのアプリケーションをドッカーコンテナにパッケージ化して、今はamazonコンテナレジストリに常駐しています。ここでは、クラスタを起動し、Dockerを実行する各EC2インスタンスにS3リンクを送信し、すべてのコンテナインスタンスで数値をクランクにして、すべての結果を単一のノードに戻します。私はこの時点でどのように私の申請書を変更することになっているのかよく分かりません。ドッカーコンテナ内のアプリケーションをサービスとして実行する必要がありますか?あるいは、私はssh経由でコンテナにコマンドを送るべきですか?その後、私はそれを得ると仮定すると、どのようにクラスタと通信して、潜在的に何百ものS3リンクの作業を掘り起こすことができますか?理想的には、私のアプリケーションは非常に計算集中的なので、EC2インスタンスごとに1つのコンテナしか実行しません。Amazon ECSでのバッチジョブの実行

ありがとうございます!

答えて

3

あなたのストーリーは、多くの研究が行われていないと多くの疑問があるので、答えにくいです。

私の最初の考えは完全にステートレスにすることです。

S3を経由して起動して処理することで、正しい軌道に乗っています。これを拡張してSQSキューのようなものを使用する必要があります。これらのSQSメッセージにはS3リンクが含まれます。アプリケーションが起動し、SQSからメッセージを取得し、取得したリンクを処理し、メッセージを削除します。

次に、どのような種類のコンソールにも出力しないことです。別の場所に出力します。異なるSQSキュー、またはどこかのように。

これにより、ボックスが互いに話す必要がなくなります。これは、物事をスピードアップし、無限にスケーラブルにし、コミュニケーションを促す不思議なハッカーを排除します。

なぜインスタンスごとに1つのコンテナですか? 50%で2つのスレッドは、通常100%で1と同じです。この要件を削除すると、ECS + Lambda + Cloudwatchを使用してメッセージ数に基づいて縮尺を変えることができます。 > 10000、スケールアップ、そのようなもの。 < 100スケールダウン。つまり、SQSに何百万ものメッセージを送り、ECSを処理して消費するために出力するようにECSをスケールアップすることができます。

+0

私はgpusを利用しようと考えていたので、コンテナごとに違うec2インスタンスを使いたいと思っていました。 – user985030

+0

あなたはそれらをステートレスにしてもそれはまだ機能します。インスタンスに複数のコアがある場合、コンテナは1コアあたり1024までしか使用できないので、それらのコンテナおよびタスク定義をどのように広げるかはあなた次第です。私はそれらを通信させることをお勧めしません。 –

2

私はMarc Youngに同意しますが、このステートレスにして通信レイヤーをアプリケーションから切り離す必要があります。

このようなアプリケーションの場合、私はS3リンクを待ち行列に入れます(rabbitMQは良いものですが、個人的にはSQSは気にしませんが、オプションです)。次に、ECSのワーカーノードにキューからメッセージをプルして処理させます。

処理している別のアプリがあるようです。出力に応じて、結果を別の処理キューに入れ、同じモデルを使用するか、またはある種のデータベース(またはS3のファイル)に直接入れることができます。

Marcが自動スケーリングについて述べたことに加えて、cloudwatch + spotインスタンスを使用してECSコンテナインスタンスのコストを管理することを検討してください。特に重いコンピューティングタスクの場合、大きな割引を受けることができます。

関連する問題