实施可伸缩聊天服务器的策略

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

最终用户客户端是networking或电话客户端。 我认为某种websocket的实现,比如Socket.IO很好。

在服务器端,我希望使用Node.js. 我希望架构能够扩展,以便用户数量不受限制(在理性的情况下,没有预料到大规模攻击的可能性,如果是这样,有更聪明,有经验的人在其上工作的机会是合理的而不是目前只是我编码)每个聊天室的用户数量有希望不受限制,或者可能是一些固定的大数目。 这意味着我需要使用几个在Node中编写的服务器水平扩展。

假设有一些负载平衡器(希望将来不是单点失败,但我不知道如何实现这一点,或者也许只是转移到AWS)将调度从最终客户端到聊天服务器的SocketIO连接。 不同的用户连接到不同的服务器可能在同一个房间,所以这些消息需要发送到其他服务器。

我将如何切实执行这样的事情? 希望不要太复杂。

问题:(1)如果所有的服务器需要处理所有的消息,因为用户可以通过任何服务器login,这是否规模? (2)我需要某种消息队列让服务器在它们之间进行交谈吗? Rabbitmq的Pub-sub是否可用? 或者,如果zeromq,我将如何扩大酒吧子? Zeromq指南解释了使用REQ / REPtypes的应用程序扩展到多个服务器的情况。 但不是Pub Sub。 (3)或者我应该从XMPP开始?

我希望能够尽可能地简化工作。

在Socket.io站点有一个相当好的解释。 看一下

它build议使用Nginx作为HTTP负载均衡器,Node.js集群(使用粘性会话)和Redis作为消息的后端。

我认为你的目标应该是可以实现的,只需要使用给定的模块和configuration机制。