Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Faye群集多节点节点_Node.js_Cluster Computing_Faye - Fatal编程技术网

Node.js Faye群集多节点节点

Node.js Faye群集多节点节点,node.js,cluster-computing,faye,Node.js,Cluster Computing,Faye,我正在尝试使用faye(nodejs)制作一个酒吧/酒吧基础设施。我想知道水平缩放是否可行。 一个nodejs进程将在单核上运行,因此当人们谈论集群时,他们会谈论在同一台机器上创建多个进程、共享一个端口以及通过redis共享数据。 像这样: 首先,我不明白我们如何确保每个分叉的进程都指向不同的核心。如果我在一台有4个内核的机器上分叉10个节点的服务器,是否注意到它们是均匀分布的 如果我想添加一台新机器,并以此来扩展它,该怎么办。我在任何地方都没有看到这种支持。我甚至不确定是否有可能做到这一点。

我正在尝试使用faye(nodejs)制作一个酒吧/酒吧基础设施。我想知道水平缩放是否可行。 一个nodejs进程将在单核上运行,因此当人们谈论集群时,他们会谈论在同一台机器上创建多个进程、共享一个端口以及通过redis共享数据。 像这样:

首先,我不明白我们如何确保每个分叉的进程都指向不同的核心。如果我在一台有4个内核的机器上分叉10个节点的服务器,是否注意到它们是均匀分布的

如果我想添加一台新机器,并以此来扩展它,该怎么办。我在任何地方都没有看到这种支持。我甚至不确定是否有可能做到这一点。 让我们假设,不知何故,多个节点被使用,并且有一些负载平衡器。但是一个客户端将只连接到一个服务器进程。因此,当客户机C1在客户机C2已订阅的通道上发布消息,并且C1连接到进程P1,C2连接到进程P2时,P1在没有连接的情况下如何将消息发布到C2

这在单机情况下可能是可能的,因为
集群
模块允许所有进程共享相同的端口和连接


我对网络世界相当陌生,nodejs和faye也是如此。如果问题中有错误,请告诉我。

您认为
集群
模块允许在一台机器上使用多个内核是正确的。群集模块允许在侦听同一端口时多次生成同一应用程序。内核之间的分布取决于操作系统,因此,如果您有10个进程和4个内核,那么操作系统将确定如何最好地分布它们(只要它们没有产生一组关联)。默认情况下,这不应该是你关心的问题

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

关于在所有实例之间共享消息的最后一点是假设所有消息都保存在一个点上。在您链接到的文章中,他们假设只有一台服务器,所有进程共享对redis实例的访问。由于所有进程都访问相同的redis实例,因此所有进程都将能够接收相同的消息。如果我们开始考虑世界上不同位置的多台服务器,它们都有不同的消息存储(即它们自己的redis实例),那么我们就进入了“复制”领域。一些数据存储是基于这一点和redis构建的。最终,您将得到一组“主”数据和一组“从”数据,它们将定期使用主数据进行更新,并获取丢失的任何数据。这里需要注意的是,除非您有一个非常密集的复制过程,否则不会在此处“实时”发送消息

总之,开发人员要经历应用程序的这种扩展链。第一个是使应用程序多进程(集群模块)。第二种方法是使用负载平衡器,将http请求代理到运行多进程应用程序的适当服务器。第三个是复制数据存储,这样服务器可以独立运行,但彼此保持同步