Faye集群多个节点NodeJS

我正在尝试使用faye(nodejs)来制作pub / sub infra。 我想知道水平缩放是否可能。 一个nodejs进程将运行在单核上,所以当人们谈论集群时,他们会谈到在同一台机器上创build多个进程,共享一个端口,并通过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模块使所有进程共享相同的端口和连接。

我对networking世界以及nodejs和faye都相当陌生。 如果问题出现问题,请指教。

你认为cluster模块允许在一台机器上使用多个内核是正确的。 集群模块允许同一个应用程序多次产生,同时侦听同一个端口。 核心之间的分配是由操作系统决定的,所以如果你有10个进程和4个核心,那么操作系统将会找出如何最好地分配它们(只要它们没有被设置为亲和力)。 默认情况下,这不应该是你的问题。

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

关于在所有实例之间共享消息的最后一点假定有一个单一点,所有消息都被保存。 在你链接到的文章中,他们假设只有一个服务器,所有进程都共享对redis实例的访问。 因为他们都访问相同的redis实例,所有进程将能够接收相同的消息。 如果我们开始思考世界上不同位置的多个服务器都有不同的消息存储(即他们自己的redis实例),那么我们就进入了“复制”的领域。 一些数据存储是考虑到这一点,而redis 就是其中之一 。 你最终得到一个“主”数据集和一组“奴隶”,它们将定期与主人更新,并抓住他们失踪的任何东西。 在这里需要注意的是,除非您有非常密集的复制过程,否则不会在这里“实时”发送消息。

总而言之,开发人员经历了这个应用程序的扩展链。 首先是使应用程序多进程( cluster模块)。 第二个是有一个负载均衡器代理的HTTP请求运行多进程应用程序相应的服务器。 第三个是复制数据存储,以便服务器可以独立运行,但保持相互同步。