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


80

我已经开发了一个基于Docker的应用程序,其中包含多个微服务。它必须使用Amazon SQS消息并进行处理。最初,我想使用AWS Elastic Beanstalk,但是后来我放弃了EC2 Container Service。现在我不知道该选择哪一个。

到目前为止,Elastic Beanstalk支持多容器环境。太好了,因为每个微服务在docker容器中都有自己的应用程序服务器。下一个问题是扩展:

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

如果JBoss Docker容器不能处理大量请求,但是有足够的CPU /内存可用,那么我当然想在同一实例上自动启动另一个Docker / JBoss容器。但是,如果我没有足够的CPU /内存怎么办?当然,我想启动第二个实例,该实例可以通过EB中的自动缩放组进行配置。现在第二个实例开始旋转,但是除第5个实例之外的每个容器都几乎处于空闲状态,我当然不希望它们在第二个实例中也产生4个不必要的容器,这将浪费资源。基于可配置参数(例如:CPU /内存/ SQS),仅应生成第5个标度,其他应按第5个标度进行缩放。

我不完全知道Amazon ECS是否正在执行此操作,或者根本不可能,但是我确实在Internet上找不到有关此主题的任何资源,通常来说,该资源是根据实例/容器进行扩展的。


您是否认为您的问题已解决?我有一个关于EB一个非常类似的担忧,我怀疑它推出一个单独的实例中的所有5个集装箱
卡梅隆辛格

3
我也很困惑。选择的答案并没有真正说明扩展在两种服务中如何工作。如果有足够的资源,ECS / EB是否还会真正踢出另一个第5个容器,然后在同一实例上并行运行两个容器?
codepushr

Answers:


65

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


7
是的,但是这两种服务的自动扩展机制是如何工作的,Elastic Beanstalk是否按容器扩展容器,因此,如果只有一个正在加载,则仅扩展该容器,或者始终扩展实例并启动所有实例容器,无论它们承受什么负载?
orbatschow 2015年

6
现在,ECS已成为GA,EB利用ECS提供其多容器基础架构。使用典型的EC2自动缩放组原语来完成自动缩放。放大或缩小的触发因素不是容器,而是实例节点。也就是说,如果网络接口流量或CPU负载或磁盘负载达到某个阈值,则群集可以横向扩展或横向扩展。因此,在您的示例中,如果第5个容器的节点处于CPU负载较大的情况下,则可以基于在那。
alanwill


另请注意,您可以使用受更严格控制的面向容器的ECS方法,并通过使用AWS Fargate推迟集群控制责任。
dmulter '18

价格如何?不一样吗
丹尼尔·维莱拉

11

不要复活一个死的问题,但是希望这可以对某人有所帮助。

公认的答案还不够清楚:根据OP的描述,OP需要ECS,而不是Multi-Container Elastic Beanstalk(MCEB)。据我所知,MCEB从未尝试将容器有效地打包到实例中。OP在一条评论中询问:“如果只有一个负载,则仅缩放此负载,还是总是放大实例并启动所有容器,无论它们处于何种负载下?” 答案是“后者”。MCEB扩展实例并启动所有容器,无论它们承受什么负载。

编辑

不要使用您想象中的架构。

您的微服务有多微?给他们每个人一个t2.nano是可笑的吗?然后将它们每个都做成一个单一容器的Docker EB应用程序-EB worker应用程序可以由SQS消息驱动。或使用apex.run

编辑1/31/18:

AWS Fargate看起来很酷。

编辑6/5/19:

如果您需要编排容器以止痒,请使用EKS。但实际上,请尽量避免这种情况。分布式系统很难。


1
它正是这样做的。对于我们来说,这不是一个大问题,因为我们以堆栈的形式构建应用程序,通常可以将它们一起缩放。如果需要一个应用程序独立扩展,我想那应该是EB上的另一个应用程序。我真的很努力地想一个需要这样做的好方案。我读过很多案例,人们都在表达这种愿望,但我无法确定这只是学术问题,设计问题还是真正有效的案例。
雅各布·托马森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.