这是我的容器化微服务应用程序和工作流程。
方案: 如果我的webapp或任何其他容器被高度使用,我想通过在同一个ec2实例中自动创建多个容器来扩展它。 (实例有足够的内存和内存)。
目前我将webapp的端口硬编码为3000.我的express.js代码应该如何改变以下内容?
此外: 可以使用Ansible实现吗?怎么样? 我需要扩展容器,而不是集群或实例。
答案 0 :(得分:1)
动态绑定webapp和api的端口。 负载均衡。
NodeJS / Express应用程序只绑定到容器的静态端口。在任务定义中,您只需指定容器端口,即随机分配主机端口的方式。此时 使用负载均衡器,因为有多个容器在运行。如果使用应用程序负载平衡器,则可以设置ECS,使目标组自动获取已注册和取消注册的新端口。有关详细信息,请查看the docs。
简历中:不要更改express.js代码。
配置自动调整以使其自动发生。
现在,您可以在ECS中配置服务时设置“服务自动缩放”。这适用于Cloudwatch警报。你可以,例如监控负载均衡器上与服务数量或任务内存使用量相关的请求数。
此外:可以使用Ansible实现吗?怎么样?
我建议使用脚本基础结构工具(如Cloudformation或Terraform)而不是Ansible,因为最终您设置了某个状态,而集群/ AWS将负责扩展。您不希望在AWS ECS集群中在运行时进行干预,ECS的全部意义在于,在您为其提供参数/策略后,它将自行管理。
我需要扩展容器,而不是集群或实例。
不确定为什么不想要扩展实例。如果不扩展实例,为什么不总是运行最大数量的容器?如果您执行想要扩展实例,则可以使用Auto Scaling组,也可以与Cloudwatch警报结合使用。