在 Bluemix 上集群 Node.js

Clustering Node.js on Bluemix

Bluemix 上的 Node.js 应用程序是否会自动扩展到多个处理器上的 运行,或者我是否需要使用 Node 的集群 API 自己实现?如果我确实使用集群,是否会有多个 CPU 可用?

简答:您需要使用节点集群模块来充分利用每个实例中的所有内核。或者,您也可以只增加实例数。

长答案:您推送到 bluemix 的每个应用程序实例都在 warden 容器中运行。资源控制由 linux cgroups 管理。每个实例的核心数不是您可以控制的。 运行 Bluemix 上的快速测试,os.cpus() 显示 4 个内核。如果您想在 node.js 应用程序的一个 Bluemix 实例(监狱长容器)中利用所有 4 个内核,那么您应该使用节点集群模块。

请记住,您也可以只增加实例的数量(水平扩展),这可能会根据您使用外部服务的瓶颈实现接近线性的结果。因此,如果您有 3 个实例,每个实例都有 4 个核心,内置负载均衡器会在 3 个实例之间分配流量。

Ram 建议的混合模型是有道理的。您可能想做一些基准测试以确定您希望在一个应用程序容器中 运行 多少个进程。您可以使用 "cf app " 来监控负载下每个应用程序实例的 CPU 利用率,如果它没有完全消耗 CPU 那么产生更多进程可能是有意义的。

但是,请注意—— * CPU 可能不是瓶颈,在这种情况下,在应用程序容器中生成更多进程或扩展更多应用程序容器实例将无济于事; * 你在一个容器中产生的进程越多,它消耗的内存就越多,所以确保你不要产生太多并超过分配的内存数量(否则应用程序容器将被杀死)。