首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node.js多服务器群集

问Node.js多服务器群集
EN

Stack Overflow用户
提问于 2013-03-19 22:18:37
回答 2查看 13.2K关注 0票数 19

我正在与Node.js合作一个涉及服务器的项目(为了简单起见,让我们将这个服务器想象成一个聊天服务器,它必须将消息从某些客户端转发到其他客户端)。出于QoS的原因,我需要此服务器始终可访问,因此我考虑使用集群在不同的服务器(不同的物理机)之间分配平衡负载,并确保如果一台服务器宕机,另一台服务器将准备好为请求提供服务。

我的问题是:这种分布式方法在Node.js中可行吗?

我已经读到过“集群”模块,但据我所知,它似乎只能在同一台机器上的多处理器上进行扩展。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-19 22:45:06

是的,这是可能的。

它不是NodeJS的属性,而是您为应用程序设计的体系结构,它将决定您是否能做到这一点。

您的主要问题始终是在实例之间共享状态,因此假设您有4个聊天服务器A、B、C、D,并且您有一个LoadBalancer L,它将连接分散到这4个服务器上,那么当A宕机时,您将所有A的连接重新连接到其余实例,如何确保聊天室在B、C和D上的状态相同?

一种方法是让应用程序代码完全无状态,并将所有数据推送到分布式内存数据库,如mongoDb或Redis。您希望在其中一个数据库实例宕机的情况下分发数据库。

现在您的最后一个问题是LoadBalancer。如果它崩溃了,你的整个系统就会崩溃。

所以长话短说;是的,你可以做到,但你需要做出一些艰难的决定,决定你的潜在故障点在哪里。如果您希望没有单点故障,那么您将需要一个复杂且昂贵的设置。

票数 30
EN

Stack Overflow用户

发布于 2013-07-05 08:48:45

我的建议是利用独立的集群来共享状态。换句话说,有一个API集群,其中的服务器不相互通信,而是共享一个公共的Redis实例/集群,并共享一个公共的MongoDB集群。这允许您共享会话、变量,并且您可以利用Redis的发布/订阅功能来避免在您的API集群中进行任何八卦。

特别是对于聊天,如果你使用Redis和Socket.IO作为你的客户端,那么无论你何时广播到一个大厅,它都会在后台使用redis将消息广播到那个大厅,尽管大厅成员存在于多个服务器上。此外,这创建了另一个级别的容错,因为任何服务器都可以管理套接字重新连接,如果连接中断,socket.io将自动重新连接到API集群,同时通过Redis维护状态。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15501997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档