跨多个内核/服务器扩展节点 .JS

Scaling Node.JS across multiple cores / servers

提问人:RobertPitt 提问时间:3/23/2011 更新时间:6/28/2011 访问量:11758

问:

好的,所以我有一个想法,我想仔细阅读,但在我这样做之前,我需要完全了解一些事情。

首先,我认为我将继续使用这个系统的方式是拥有 3 台服务器,如下所述:

第一台服务器将是我的 Web 前端,这是将侦听连接和响应客户端的服务器,该服务器将有 8 个内核和 16GB RAM。

第二台服务器将是数据库服务器,这是不言自明的,连接到主机并设置/获取数据。

第三台服务器将是我的存储服务器,这将是存储可下载文件的地方。

我的第一个问题是:

  • 在我的前端服务器上,我有 8 个内核,扩展节点以便负载分布在内核之间的最佳方法是什么?

我的第二个问题是:

  • 有没有一个系统可以放到我的应用程序框架中,允许我与其他内核通信并传递消息以节省 I/O。

最后一个问题:

  • 是否有任何系统可用于帮助将内容从我的存储服务器移动到前端服务器上的请求,并尽可能少地开销,速度在这里是一个问题,因为我们将有 500+ 客户端在高峰时段同时下载和上传。

我终于说服了我的雇主,node.js 非常快,它是最新的编程技术,我们应该为我们的 Intranet 系统投资一个平台,但他要求提供详细的文档,说明如何在我们现有的硬件上扩展它。

节点 .js 可伸缩性

评论


答:

3赞 gub 3/23/2011 #1

首先,我不会将您提出的设置描述为“扩展”,它更像是“传播”。只有一个应用服务器为请求提供服务。如果将来添加更多应用服务器,那么您将遇到扩展问题。

我知道node.js是单线程的,这意味着它只能使用单个内核。不是我关于如何/是否可以扩展它的专业领域,将把这部分留给其他人。

我建议 NFS 将存储服务器上的目录挂载到应用服务器。NFS 的开销相对较低。然后,您可以像访问本地文件一样访问这些文件。

11赞 yojimbo87 3/23/2011 #2

在我的前端服务器上,我有 8 个 核心,什么是扩展的最佳方式 节点,以便分配负载 跨核心?

尝试查看 node.js 集群模块,它是一个多核服务器管理器。

3赞 schaermu 3/23/2011 #3

关于您的第一个问题:使用集群(我们已经在生产系统中使用它,就像一个魅力)。

当涉及到工人消息传递时,我真的帮不了你。但你最好的选择也是集群。也许将来会有一些功能在所有集群工作者之间提供“核心间”消息传递(不知道集群的路线图,但这似乎是一个想法)。

对于您的第三个要求,我会使用像 NFS 这样的低开销协议,或者(如果您在基础设施方面非常疯狂的话)高速 SAN 后端。

另一个建议:使用MongoDB作为数据库后端。您可以从低端硬件开始,并使用 MongoDB 的分片/复制集功能轻松扩展数据库实例(如果这是某种要求)。

评论

2赞 Ricardo Tomasi 3/23/2011
像 redis 这样的内存数据库非常适合在进程之间保持共享状态。