DockerコンテナをスケーリングするためにAWSElasticBeanstalkまたはAmazonEC2 Container Service(ECS)を使用する必要がありますか?


81

複数のマイクロサービスで構成されるDockerベースのアプリケーションを開発しました。Amazon SQSメッセージを消費し、それらを処理する必要があります。最初はAWSElastic Beanstalkを使用したかったのですが、その後EC2 ContainerServiceに転倒しました。今、私はどちらを選ぶべきかわかりません。

現在のところ、ElasticBeanstalkはMulti-Container-Environmentsをサポートしています。すべてのマイクロサービスがDockerコンテナ内に独自のアプリケーションサーバーを持っているので、これは素晴らしいことです。次の問題はスケーリングです。

スケーリングメカニズムがどのように機能するのかわかりません。例:ElasticBeanstalk環境に5つのDockerコンテナーがあります。現在、処理するSQSメッセージが大量にあるため、5番目のDockerコンテナのみが高負荷になっています。他の4つは、CPUをあまり必要としないか、SQSメッセージが少ないため、ほとんどアイドル状態です。5番目のコンテナがJBossアプリケーションサーバーを実行するとします。私の知る限り、使用可能なCPU /メモリが十分にある場合でも、サーバーは限られた量の並列要求しか消費できません。

JBoss Dockerコンテナがリクエストの量を処理できないが、使用可能なCPU /メモリが十分にある場合は、もちろん、同じインスタンスで2番目のDocker / JBossコンテナを自動的に起動したいと思います。しかし、十分なCPU /メモリがない場合はどうなりますか?もちろん、EBの自動スケーリンググループを介して構成可能な2番目のインスタンスでスピンしたいと思います。これで2番目のインスタンスが起動しますが、5番目を除くすべてのコンテナはほぼアイドル状態です。もちろん、2番目のインスタンスでも不要な4を生成しないようにします。これは、リソースの浪費になります。5番目のみが生成され、他はCPU /メモリ/ SQSなどの構成可能なパラメーターに基づいて5番目のスケールのようにスケーリングする必要があります。

Amazon ECSがそれを行っているかどうか、またはそれが可能かどうかは正確にはわかりませんが、このトピックに関する情報源はインターネット上で実際には見つかりません。一般的に言われているように、インスタンス/コンテナーに基づいてスケーリングします。


問題は解決したと思いますか?私はEBに関して非常によく似た懸念を持っています。それは、5つのコンテナーすべてを別々のインスタンスで起動すると思われます
Cameron Singe 2016年

3
私も混乱しています。選択した回答は、両方のサービスでスケーリングがどのように機能するかを実際には説明していません。また、ECS / EBは実際に別の5番目のコンテナーをキックし、十分なリソースがある場合、同じインスタンスで両方を並行して実行しますか?
codepushr 2017年

回答:


69

EB対ECSは実際に制御することになります。スケーリングと容量を制御したいですか、それともそれをより抽象化し、代わりに主にアプリに焦点を合わせたいですか。クラスタ内のノードのサイズと数、および自動スケーリングを使用するかどうかを指定する必要があるため、ECSで制御できます。EBを使用すると、Dockerfileを提供するだけで、ノードの数とサイズのプロビジョニングをEBが処理します。基本的に、EBルートのインフラストラクチャを忘れることができます。

Dockerに関するEBドキュメントは次のとおりです:http//docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker.html

ECSでは、Dockerfileのデプロイを開始する前に、最初にインフラストラクチャを構築する必要があります。これにより、1)インフラストラクチャに精通していること、2)インフラストラクチャとアプリに費やしたい労力のレベルになります。


7
はい。ただし、両方のサービスの自動スケーリングメカニズムはどのように機能しますか、Elastic Beanstalkはコンテナごとにコンテナをスケーリングします。したがって、負荷がかかっているのが1つだけの場合は、この1つだけをスケーリングします。または、常にインスタンスをスケールしてすべてを開始します。コンテナは、どのような負荷がかかっていても?
orbatschow 2015

6
ECSがGAになったので、EBはECSを活用してマルチコンテナインフラストラクチャを提供します。自動スケーリングは、一般的なEC2自動スケーリンググループプリミティブを使用して行われます。スケールアップまたはスケールダウンのトリガー要因は、コンテナーではなく、インスタンスノードです。つまり、ネットワークインターフェイストラフィック、またはCPU負荷またはディスク負荷が特定のしきい値に達すると、クラスターはスケールアウトまたはスケールインできます。したがって、この例では、5番目のコンテナーのノードのCPU負荷が大きい場合、自動スケーリンググループトリガーを設定できます。その上で。
alanwill 2015

ここでは、あまりにもあなたを助けるためにいくつかのリソースです:aws.amazon.com/blogs/aws/aws-elastic-beanstalk-for-docker docs.aws.amazon.com/elasticbeanstalk/latest/dg/...は
alanwill

また、AWS Fargateを使用することで、より制御されたコンテナー指向のECSアプローチを維持し、クラスター制御の責任を延期できることにも注意してください。
dmulter 2018

価格はどうですか?違いますか?
ダニエルビレラ

12

死んだ質問を復活させるのではありませんが、うまくいけば、これは誰かを助けるでしょう。

受け入れられた答えは十分に明確ではありません。OPの説明に基づいて、OPはMulti-Container Elastic Beanstalk(MCEB)ではなくECSを望んでいます。私の知る限り、MCEBはコンテナをインスタンスに効率的にパックしようとはしません。OPはコメントで、「負荷がかかっているのが1つだけの場合、これだけをスケーリングしますか、それとも、どのような負荷がかかっていても、常にインスタンスをスケールしてすべてのコンテナーを起動しますか?」と尋ねます。そして答えは「後者」です。MCEBは、インスタンスをスケールアップし、どのような負荷がかかっていても、すべてのコンテナーを起動します。

編集

想像しているアーキテクチャを使用しないでください。

マイクロサービスはどの程度マイクロですか?それぞれにt2.nanoを与えるのはばかげているでしょうか?次に、それらをそれぞれ単一コンテナーのDockerEBアプリにします。EBワーカーアプリケーションはSQSメッセージで駆動できます。または、apex.runを使用します

2018年1月31日編集:

AWSFargateはかなりクールなようです。

19年6月5日編集:

かゆみを満たすためにコンテナをオーケストレーションする必要がある場合は、EKSを使用してください。しかし、実際には、これを避けるようにしてください。分散システムは難しいです。


1
それはまさにこれを行います。私たちにとって、これは大きな問題ではありません。アプリをスタック方式で構造化しており、通常は一緒にスケーリングしても問題ありません。アプリを個別にスケーリングする必要がある場合は、EBの別のアプリにする必要があります。私はこれが必要とされる良いシナリオを考えようと本当に一生懸命に努力しています。私はこの願望を述べている人々の多くの事例を読んでいますが、それが単なる学術的な問題なのか、設計上の問題なのか、それとも本当に有効な事例なのかを判断することはできません。
Jacob Thomason 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.