我开发了一个基于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是否正在这样做,或者它是否可能,但我真的无法在互联网上找到关于这个主题的任何来源,一般来说,根据实例进行扩展/容器
答案 0 :(得分:57)
这是关于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看起来很酷。