Faye集群多节点NodeJS



我正在尝试使用faye (nodejs)制作pub/sub基础设施。我想知道是否可以横向扩展。一个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。如果问题有问题,请告诉我。

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

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

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

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

最新更新