如何更改用于ecs自动缩放的express.js微服务应用程序

时间:2017-03-13 17:31:24

标签: amazon-web-services express docker microservices amazon-ecs

这是我的容器化微服务应用程序和工作流程。

  1. Travis从git中提取代码,构建docker image并推送到ECR
  2. 在成功的travis构建时使用ECS使用新的图片代码更新aws cli任务和服务。
  3. 每个dev和staging cluster都有一个实例。
  4. 我可以为prod集群设置多个实例,但每个dev和staging集群不超过1个实例。
  5. 解决方案有大约10个微服务,rabbitmq和mysql。 (网关,api等)
  6. 方案: 如果我的webapp或任何其他容器被高度使用,我想通过在同一个ec2实例中自动创建多个容器来扩展它。 (实例有足够的内存和内存)。

    目前我将webapp的端口硬编码为3000.我的express.js代码应该如何改变以下内容?

    1. 动态绑定webapp和api的端口。
    2. 在其中加载负载。
    3. 配置自动调整以使其自动发生。
    4. 此外: 可以使用Ansible实现吗?怎么样? 我需要扩展容器,而不是集群或实例。

1 个答案:

答案 0 :(得分:1)

  

动态绑定webapp和api的端口。   负载均衡。

NodeJS / Express应用程序只绑定到容器的静态端口。在任务定义中,您只需指定容器端口,即随机分配主机端口的方式。此时 使用负载均衡器,因为有多个容器在运行。如果使用应用程序负载平衡器,则可以设置ECS,使目标组自动获取已注册和取消注册的新端口。有关详细信息,请查看the docs

简历中:不要更改express.js代码。

  

配置自动调整以使其自动发生。

现在,您可以在ECS中配置服务时设置“服务自动缩放”。这适用于Cloudwatch警报。你可以,例如监控负载均衡器上与服务数量或任务内存使用量相关的请求数。

  

此外:可以使用Ansible实现吗?怎么样?

我建议使用脚本基础结构工具(如Cloudformation或Terraform)而不是Ansible,因为最终您设置了某个状态,而集群/ AWS将负责扩展。您不希望在AWS ECS集群中在运行时进行干预,ECS的全部意义在于,在您为其提供参数/策略后,它将自行管理。

  

我需要扩展容器,而不是集群或实例。

不确定为什么想要扩展实例。如果不扩展实例,为什么不总是运行最大数量的容器?如果您执行想要扩展实例,则可以使用Auto Scaling组,也可以与Cloudwatch警报结合使用。