web-dev-qa-db-ja.com

AWS Elastic BeanstalkまたはAmazon EC2 Container Service(ECS)を使用してDockerコンテナーをスケーリングする必要がありますか?

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

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

スケーリングメカニズムの仕組みがわかりません。例:Elastic Beanstalk環境に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などの設定可能なパラメーターに基づいて5番目のスケールのようにスケーリングする必要があります:CPU /メモリ/ SQS。

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

68
orbatschow

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

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

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

59
alanwill

死んだ質問を復活させないが、うまくいけばこれは誰かを助ける。

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

編集

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

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

編集1/31/18:

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

6/5/19を編集:

かゆみを満たすために、コンテナを調整する必要がある場合はEKSを使用します。しかし、本当に、これを避けるようにしてください。分散システムは困難です。

9
Sam H.