在Amazon ECS上在Docker中运行Node API的最佳方式是什么?

Aar*_*rck 20 amazon-ec2 amazon-web-services amazon-ecs node.js docker

随着docker以及Amazon ECS等调度和编排服务的出现,我正在尝试确定部署Node API的最佳方式.除了Docker和ECS之外,我还想通过创建主进程和多个工作处理器,利用Node群集库来优雅地处理在文档中建议的异步错误的情况下崩溃节点应用程序.

除了优雅地处理错误之外,集群方法的一个好处是为每个可用的CPU创建一个工作器处理器.但这在码头工人世界中是否有意义?在单个docker容器中运行多个节点进程是否有意义,这个容器将被扩展到ECS上的EC2实例集群中?

如果没有节点集群的做法,我会失去了妥善处理错误的能力,所以我认为,至少,我应该运行主机和每个搬运工人容器中的一个工作进程.我仍然对在ECS的任务定义中定义了多少CPU感到困惑.在ECS文档说,有关其每个CPU 1024个单位每个容器的实例; 但这与EC2计算单元不同,是吗?有了这个,我需要选择具有适当数量的vCPU的EC2实例类型来实现这一目标吗?

我知道,实现最佳配置可能需要对我的特定Node API应用程序进行一定程度的基准测试,但是如果能够更好地了解从何处入手将会非常棒.也许我需要做一些学习/研究?任何指导我的路径或建议的指针将非常感谢!

编辑:回顾我的具体问题:

  1. 是否有意义运行所描述的主/工人群在这里泊坞窗容器内,以实现优美的崩溃?

  2. 使用群集文档中描述的几乎相同的代码来"扩展"到可用的CPU require('os').cpus().length是否有意义?

  3. 亚马逊在ECS任务定义的文档中的含义cpuscontainer instance has 1024 units per CPU什么?什么是这个设置的一个很好的起点?

  4. 对于旨在基于上述服务Node API的ECS集群,实例类型的起点是什么?可用的vCPU如何影响之前的问题?

Ben*_*ley 5

所有这些技术都是新的,最佳实践仍在建立中,所以这些只是我的经验提示。

每个容器一个进程与其说是硬性规定,不如说是一种建议。当您使用它时,可以在容器中运行多个进程,特别是在主进程分叉工人的情况下。正如您在问题中所建议的那样,只需使用一个容器并允许它为每个内核分叉一个进程。

在 EC2 上,实例类型具有多个 vCPU,它们将作为操作系统的核心出现。对于 ECS 集群,使用 EC2 实例类型,例如带有四个 vCPU 的 c3.xlarge。在 ECS 中,这意味着 4096 个 CPU 单元。如果您希望应用程序使用所有 4 个 vCPU,请创建一个需要 4096 个 cpu 单元的任务定义。

但是如果你做这一切只是为了阻止应用程序崩溃,你也可以使用重启策略在容器崩溃时重新启动容器。不过,ECS 似乎尚不支持重启策略。