我开发了一个由多个微服务组成的基于 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 是否正在这样做,或者是否有可能,但我真的无法在互联网上找到任何关于这个主题的资料,一般来说,这是基于实例/容器的扩展。