我已经开发了一个基于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上找不到有关此主题的任何资源,通常来说,该资源是根据实例/容器进行扩展的。