2012-11-12 76 views
9

我一直是ruby/php的Web应用程序开发人员,我已经习惯了服务器实例的水平伸缩以处理更多请求的想法。水平缩放 - 表示位于负载均衡器后面的应用程序的单独实例,它们不共享任何内容,并且彼此不知道。NodeJS水平缩放

我的主要问题是,因为Node.js和它的重点evented-io允许单个框运行node.js服务器来处理'数千'的同时请求 - 是负载平衡/水平缩放使用扩展nodejs应用程序?是否缩放一个节点应用程序限于垂直缩放(在问题时抛出更多的RAM /处理能力)?

我的第二个问题与node.js水平缩放和websockets有关。我见过很多使用websockets的Node.js的“聊天”教程。由于websockets在浏览器和服务器之间有效地保持开放的通信线路,因此PHP/Ruby世界中典型的水平缩放体系结构导致类似于链接中所解释的那种聊天应用程序打破 - 因为新的websocket连接请求将被分配给不同的流程/服务器,并且没有一个中央资源会跟踪所有连接的客户端?

回答

8

Node.js支持水平缩放,与您通过内置的cluster模块描述的方式非常相似。

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

+0

这是一个老问题,但我使用mongodb来存储和检索我所有的聊天应用程序数据。由于我想横向扩展我的应用程序,因为当我有多个服务器时,我的聊天应用程序不起作用。我应该做什么,我应该完全删除mongodb并使用redis?或者有更好的解决方案。 – DragonBorn

1

Node.js的群集功能仅限于具有多个处理器的单个服务器。主要是利用服务器中的处理器数量。如果我们想通过负载均衡器Facade横向扩展多台服务器,我想这个问题是否更多。

+0

为了回答有关套接字的问题,就像任何服务器调用一样,套接字创建调用将进行负载均衡,并且在节点Nx上说达到,对于Web套接字的生命周期,此TCP连接保持打开状态。即所有从浏览器到服务器,服务器到浏览器的通信都将由Nx提供。 – Pramma

0

如果node.js实例跨多个服务器(水平缩放)分布,它将用于相同的目的,您需要对其进行正确编程以支持此类设置。