Bluemix上的Node.js应用程序是否会自动扩展为在多个处理器上运行,或者我是否需要使用Node的集群API自行实现?如果我使用群集,是否会有多个CPU可用?
答案 0 :(得分:8)
简短回答:您需要使用节点群集模块来充分利用每个实例中的所有核心。或者,您也可以增加实例数。
答案很长:您推送到bluemix的每个应用程序实例都在一个监狱长容器中运行。资源控制由linux cgroups管理。每个实例的核心数量不是您可以控制的。在Bluemix上运行快速测试,os.cpus()显示了4个核心。如果要在node.js应用程序的一个Bluemix实例(warden容器)中利用所有4个内核,则应使用节点集群模块。
请记住,您还可以增加实例数量(水平缩放),这可以实现接近线性的结果,具体取决于您使用外部服务的瓶颈。因此,如果您有3个实例,则每个实例都有4个内核,内置负载均衡器在3个实例之间分配流量。
答案 1 :(得分:6)
Ram建议的混合模型是有道理的。您可能希望执行一些基准测试来确定要在一个应用程序容器中运行的进程数。您可以使用" cf app"监视负载下每个应用程序实例的CPU利用率,如果它没有完全消耗CPU,那么生成更多进程可能是有意义的。
但请注意 - * CPU可能不是瓶颈,在这种情况下,在应用程序容器中生成更多进程或扩展更多应用程序容器实例不会有帮助; *您在一个容器中生成的进程越多,它消耗的内存就越多,因此请确保不会产生太多并超过分配的内存数量(否则应用程序容器将被终止)。