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

Node.js 在Amazon ECS上的Docker中运行节点API的最佳方式是什么?,node.js,amazon-web-services,amazon-ec2,docker,amazon-ecs,Node.js,Amazon Web Services,Amazon Ec2,Docker,Amazon Ecs,随着docker和调度与编排服务(如Amazon的ECS)的出现,我正试图确定部署节点API的最佳方式。撇开Docker和ECS不谈,我希望利用节点群集库,通过创建主进程和多个工作处理器,在中建议的异步错误事件中优雅地处理节点应用程序崩溃 集群方法的好处之一是,除了优雅地处理错误外,还为每个可用CPU创建一个工作处理器。但这在docker的世界里有意义吗?让多个节点进程在一个docker容器中运行有意义吗?该容器将被扩展到ECS上的EC2实例集群中 如果没有节点集群方法,我将失去优雅地处理错误的

随着docker和调度与编排服务(如Amazon的ECS)的出现,我正试图确定部署节点API的最佳方式。撇开Docker和ECS不谈,我希望利用节点群集库,通过创建主进程和多个工作处理器,在中建议的异步错误事件中优雅地处理节点应用程序崩溃

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

如果没有节点集群方法,我将失去优雅地处理错误的能力,因此我认为至少应该为每个docker容器运行一个主进程和一个工作进程。对于ECS的任务定义中需要定义多少CPU,我仍然感到困惑。说明了每个容器实例每个CPU有1024个单元;但这与EC2计算单元不同,是吗?说到这里,我需要选择EC2实例类型和适当数量的VCPU来实现这一点,对吗

我知道,实现最佳配置可能需要对特定节点API应用程序进行一定程度的基准测试,但如果能更好地了解从何处开始,那就太棒了。也许我需要做一些学习/研究?任何指引我的道路或建议都将不胜感激

编辑:重述我的具体问题:

  • 在docker容器中运行主/工作集群以实现优雅的崩溃是否有意义

  • 使用集群文档中描述的几乎相同的代码,通过
    require('os').CPUs().length“扩展”到可用的CPU,有意义吗

  • Amazon在ECS任务定义文档中的意思是什么?在文档中,它表示对于
    CPU
    设置,
    容器实例每个CPU有1024个单元?在这种环境下,什么是一个好的起点

  • 对于一个ECS集群来说,使用实例类型的一个好的起点是什么,目的是基于上述内容为节点API提供服务?可用的VCPU如何影响前面的问题


  • 在docker世界中,每个docker容器运行1个NodeJ,但在每个ec2实例上运行许多这样的容器。如果您使用类似的工具,您可以使用
    fig scale
    在一个实例中运行许多冗余容器。这样,您就不必提前定义nodejs计数,并且每个nodejs进程都与其他进程隔离

    这似乎是一个非常好的模式。这类似于Erlang/OTP所做的工作,我认为没有人会认为它是地球上最强大的系统之一。现在的问题是如何实施

    我会利用来自Heroku或其他类似PaaS系统的模式,这些系统稍微成熟一点。我并不是说亚马逊是一个错误的地方去做这件事,只是说在你可以翻译的其他领域已经做了很多工作。例如,本文中有一个配方:


    至于vCPU和计算单元之间的关系,它看起来只是1/1024的直线比率。这是一种基于CPU利用率的微充电。他们在lambda的工作中,把这些带得更远。它们是基于你使用的第二部分的分数来收费的。

    < P>所有这些技术都是新的,最好的实践还在建立中,所以考虑这些只是我的经验。

    每个容器一个过程更像是一个建议,而不是一个硬性规定。当您使用容器时,在容器中运行多个进程是可以的,特别是在主进程分叉工作进程的情况下。正如您在问题中所建议的,只需使用一个容器,并允许它为每个核心派生一个进程

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


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

    是的,我不会在生产中使用类似fig的东西;正如我在问题中提到的,我的计划是使用Amazon的容器服务来处理编排和调度。也就是说,即使在fig环境中,如果没有在应用程序级别运行多个进程,您也无法像我参考的集群模块文档中所描述的那样优雅地捕获和处理错误。在单个容器中运行多个进程也很常见;文档和许多解决方案都表明了这种模式。尽管如此,我仍然在寻找关于ECS任务定义中cpu单元选择的答案,以及EC2、VCPU和计算单元的答案。感谢您的回复。我同意Heroku和其他人开发了一些非常棒的系统。在docker领域,甚至还有一个名为heroku的项目,它是一个基于docker和CoreOS的开源定制PaaS。也就是说,我想尝试并推进AWS的新容器服务ECS。也就是说,在AWSEC2中,计算单位代表他们提出的一个度量,并且“提供AmazonEC2实例的整数处理能力的相对度量。”这与上的CPU设置不同