Faye聚类多个节点NodeJS

时间:2014-07-24 10:25:24

标签: node.js cluster-computing faye

我正在尝试使用faye(nodejs)制作pub / sub infra。我想知道水平缩放是否可行。 一个nodejs进程将在单核上运行,因此当人们谈论集群时,他们谈论在同一台机器上创建多个进程,共享端口以及通过redis共享数据。 像这样:
http://www.davidado.com/2013/12/18/using-node-js-cluster-with-socket-io-for-push-notifications/

首先,我不明白我们如何确保每个分叉进程转到不同的核心。如果我在具有4个内核的计算机上分叉10个节点服务器,是否需要注意它们是否均匀分布?

如果我想添加的是新机器,并进行缩放。我在任何地方都没有看到任何此类支持。我不确定是否有可能这样做。 让我们说某种方式正在使用多个节点,并且有一些负载均衡器。但是一个客户端将只连接到一个服务器进程。因此,当客户端C1在客户端C2已订阅的通道上发布,并且C1连接到进程P1并且C2连接到进程P2时,P1如何在没有连接的情况下将消息发布到C2 ?

这可能适用于单台机器,因为cluster模块允许所有进程共享同一端口和连接。

我是网络世界的新手,以及nodejs和faye。如果问题有问题,请告诉我。

1 个答案:

答案 0 :(得分:0)

您认为cluster模块允许在一台计算机上使用多个核心是正确的。群集模块允许在侦听同一端口的同时多次生成相同的应用程序。核心之间的分布归结为操作系统,因此如果你有10个进程和4个核心,那么操作系统将会找出最好的分配方式(只要它们没有以固定的亲和力产生)。默认情况下,这不应该成为您关注的问题。

负载均衡也可以通过节点完成,但与群集分开。相反,您将拥有一个单独的应用程序,它将获取每个正在运行的服务器上的负载统计信息,并将http请求代理到最合适的服务器(以http-proxy为例)。非常原始的负载均衡器将逐步向每个正在运行的服务器实例发送一个请求以提供均匀分布。

关于在所有实例之间共享消息的最后一点是假设存在所有消息的单个点。在您链接的文章中,他们假设只有一个服务器,并且所有进程共享对redis实例的访问权限。由于它们都访问相同的redis实例,因此所有进程都能够接收相同的消息。如果我们开始考虑世界上不同位置的多个服务器都有不同的消息存储(即他们自己的redis实例),那么我们就会进入“复制”领域。一些数据存储是在构建时考虑到这一点并且redis is one of them。你最终得到了一个'大师'一组数据和一组奴隶'这将定期与主人更新并抓住他们遗失的任何东西。重要的是要注意,邮件不会以实时的方式发送。除非你有一个非常密集的复制过程。

总之,开发人员会为他们的应用程序进行这种扩展链。第一种是使应用程序成为多进程(cluster模块)。第二个是拥有一个负载均衡器,它将http请求代理到运行多进程应用程序的相应服务器。第三种是复制数据存储,以便服务器可以独立运行,但彼此保持同步。