10

我作为 ruby​​/php Web 应用程序开发人员已经有一段时间了,我已经习惯了水平扩展服务器实例以处理更多请求的想法。水平扩展 - 意味着位于负载均衡器后面的应用程序的单独实例不共享任何内容并且彼此不知道。

我的主要问题是,因为 Node.js 和它对 evented-io 的强调允许运行 node.js 服务器的单个盒子来处理“数千个”同时请求 - 是用于扩展 nodejs 应用程序的负载平衡/水平缩放? 缩放节点应用程序是否仅限于垂直缩放(在问题上投入更多的 RAM/处理能力)?

我的第二个问题与 node.js 水平缩放和 websockets 有关。我已经看过很多使用 websocket 的 Node.js“聊天”教程。(最喜欢的:http ://martinsikora.com/nodejs-and-websocket-simple-chat-tutorial )

由于 websockets 有效地保持了浏览器和服务器之间的开放通信线路,PHP/Ruby 世界典型的水平扩展架构是否会导致链接中解释的聊天应用程序中断 - 因为新的 websocket 连接请求将是分配给不同的进程/服务器,并且没有一个中央资源跟踪所有连接的客户端?

4

3 回答 3

12

Node.js 以您通过内置cluster模块描述的方式支持水平缩放。

关于在此环境中使用 websockets/socket.io 的第二个问题,您必须使用 Redis 之类的东西来跨应用程序的多个实例存储共享状态,如此处所述

于 2012-11-12T02:51:16.767 回答
2

Node.js 的集群功能仅限于具有多个处理器的单个服务器。它主要利用服务器中的处理器数量。我认为这个问题更多地是关于当我们想要使用具有负载均衡器外观的多个服务器进行水平扩展时的场景。

于 2015-02-27T15:15:36.927 回答
0

如果您的 node.js 实例分布在多台服务器上(水平扩展),它将起到相同的作用,您需要对其进行适当的编程以支持这种类型的设置。

于 2015-10-28T16:08:46.133 回答