一尘不染

实施可扩展聊天服务器的策略

node.js

我正在寻求实现某种聊天服务器。我希望它可以扩展。这似乎是一个很大的问题,所以我想我希望答案是方向指针,有点探索性。

最终用户客户端是Web或电话客户端。我认为某种Websocket实现,例如Socket.IO很好。

在服务器端,我希望使用Node.js。我希望该体系结构具有可伸缩性,以使用户数量不受限制(嗯,在一定范围内,预计不会有很大的成功机会,如果是这样,则由更聪明,经验丰富的人来进行工作是合理的)而不是目前仅由我编码)希望每个聊天室的用户数不受限制,或者可能是固定的大数目。这意味着我需要使用Node中编写的多个服务器进行水平扩展。

假设一些负载均衡器(希望将来不会出现单点故障,但我不知道如何实现,或者可能只是转移到AWS)正在从最终客户端向聊天服务器调度SocketIO连接。连接到不同服务器的不同用户可能位于同一房间,因此消息需要发送到其他服务器。

我将如何切实可行地实现这样的目标?希望不会太复杂。

问题:(1)如果所有服务器都需要处理所有消息,因为用户可以通过任何一台服务器登录,是否可以扩展?(2)我是否需要某种消息队列以便服务器之间进行对话?Rabbitmq的Pub-
sub可用于此吗?或者,如果为zeromq,我将如何扩展pub sub?Zeromq指南包含有关使用REQ /
REP类型的应用程序扩展到多台服务器的说明。但不是Pub Sub。(3)还是应该从XMPP开始?

我希望它尽可能容易地工作。


阅读 208

收藏
2020-07-07

共1个答案

一尘不染

Socket.io网站上有一个很好的解释。看一下

建议使用Nginx作为HTTP负载平衡器,使用Node.js集群(具有粘性会话),并使用Redis作为消息后端。

我认为,仅使用给定的模块和配置机制,几乎不需要编写任何代码就可以实现您的目标。

2020-07-07