我应该使用AWS Elastic Beanstalk还是Amazon EC2容器服务(ECS)来扩展Docker容器?

时间:2015-04-11 23:05:31

标签: amazon-web-services jboss docker amazon-elastic-beanstalk amazon-ecs

我开发了一个基于Docker的应用程序,它由多个微服务组成。它必须使用Amazon SQS消息并处理它们。起初我想使用AWS Elastic Beanstalk,但后来我忽略了EC2容器服务。现在我不知道选择哪一个。

截至目前,Elastic Beanstalk支持多容器环境。这很好,因为每个微服务在docker容器中都有自己的应用程序服务器。下一个问题是缩放:

我不知道缩放机制是如何工作的。例如:我的Elastic Beanstalk环境中有5个docker容器。现在只有第五个docker容器处于高负载状态,因为它有大量的SQS消息需要处理,其他四个几乎都处于空闲状态,因为它们不需要太多的CPU,也可能没有大量的SQS消息。我们假设第5个容器运行JBoss应用程序服务器。据我所知,即使有足够的CPU /内存,服务器也只能消耗有限数量的并行请求。

如果JBoss Docker容器无法处理请求数量,但有足够的CPU /内存可用,当然我想在同一个实例上自动启动第二个Docker / JBoss容器。但是,如果我没有足够的CPU /内存,会发生什么?当然我想转向第二个实例,可以通过EB中的自动缩放组进行配置。现在第二个实例旋转了,但是除了第5个之外的每个容器几乎都是空闲的,当然我不希望它们在第二个实例中产生4个不必要的容器,这将浪费资源。只有第5个应该产生,其他应该根据可配置的参数进行扩展,例如第5个比例,例如:CPU /内存/ SQS。

我不确切知道Amazon ECS是否正在这样做,或者它是否可能,但我真的无法在互联网上找到关于这个主题的任何来源,一般来说,根据实例进行扩展/容器

2 个答案:

答案 0 :(得分:57)

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)您希望在基础架构上花费的精力与应用程序相比。

答案 1 :(得分:7)

不要复活一个死的问题,但希望这有助于某人。

接受的答案还不够明确:根据OP描述的内容,OP需要ECS,而不是多容器弹性Beanstalk(MCEB)。据我所知,MCEB从未试图有效地将容器打包到实例中。 OP在评论中询问,"如果只有一个在负载下,它只会扩展这个,或者它是否总是按比例扩大实例并启动所有容器,无论它们在什么负载下?"答案是"后者&#34 ;; MCEB扩展实例并启动所有容器,无论它们处于什么负载下。

修改

不要使用你想象的架构。

你的微服务有多微?给每个人一个t2.nano是不是很荒谬?然后使它们成为单容器Docker EB应用程序 - EB工作者应用程序可以由SQS消息驱动。或者使用apex.run

编辑1/31/18

AWS Fargate看起来很酷。