如何扩展Node.js WebSocket Redis服务器?

我正在为Acani写一个聊天服务器,而且我还有一些关于使用负载均衡器可伸缩性来扩展 node.js和websockets的问题。

  1. 究竟是什么意思来负载均衡Node.js? 这是否意味着将有n个独立版本的服务器应用程序运行,每个版本都在一个单独的服务器上运行

  2. 为了允许一个客户端向所有其他客户端广播消息,我存储了一组在服务器上打开的所有webSocketConnections 。 但是,如果我有我的服务器应用程序运行n个独立版本,每个在一个单独的服务器上,那么我将有n套不同的webSocketConnections

  3. 如果1和2的答案是肯定的,那么如何存储通用的webSocketConnections (跨所有服务器)? 我想我可以做的一个方法是使用Redis Pub / Sub,并且每个webSocketConnection订阅Redis上的一个频道。

  4. 但是,那Redis服务器不会成为瓶颈吗? 那么我将如何扩展Redis? 这对Redis的规模意味着什么? 这是否意味着我有不同的服务器上运行Redis独立版本? 这甚至可能吗?

  5. 我听说Redis没有扩展。 为什么有人会这么说呢。 那是什么意思? 如果这是真的,有没有更好的解决scheme发布/分发和/或存储所有广播的消息列表?

注意:如果你的答案是Acani永远不会规模化,那么即使地球上70亿人(和成长中的每一个人)都要每秒钟向地球上的每个人传播一个信息,那么请给出一个有效的解释。

那么,你的问题很less有答案:

  1. 为了实现Node.js的负载均衡,它意味着你对它的想法是什么,除了你不需要单独的服务器之外,你可以在同一台机器上运行多个节点服务器的进程。

  2. 节点服务器的每个服务器/进程都将拥有自己的连接,websockets的默认存储(例如Socket.IO)是MemoryStore,这意味着所有连接都将存储在机器的内存中,因此需要使用RedisStore以便与Redis一起作为连接存储。

  3. Redis PUB / SUB是实现这一任务的好方法

  4. 你在这里说的是正确的,redis在这个时候不会扩展,运行很多连接到redis的进程/连接可能会使redis成为一个瓶颈。

  5. Redis没有扩展,这是正确的,但是根据这个介绍,你可以看到在Redis中集群开发是最重要的,而Redis确实有一个集群,但它还不够稳定:(取自http:// redis。 io /下载 )

Redis集群在哪里?

Redis开发目前专注于Redis 2.6,它将为您提供对Lua脚本和其他许多改进的支持。 这是我们当前的重点,然而不稳定的分支已经包含了Redis集群的大部分基本部分。 在2.6版本之后,我们将集中精力将当前的Redis Cluster alpha转换为beta版产品,用户可以开始认真testing。 我们很难做出预测,因为只有当我们认为Redis Cluster对我们的客户来说是稳定且有用的时候,才会把Redis Cluster释放为稳定的,但是我们希望在2012年夏季有一个合理的testing版,并且在2012年底。

请参阅此处的演示文稿: http : //redis.io/presentation/Redis_Cluster.pdf

2)使用Redis可能无法存储连接:Redis可以以string格式存储数据,并且如果连接对象具有循环引用(即Engine.IO),则无法将其串行化

3)为每个客户端创build一个新的Redis客户端可能不是一个好方法,所以如果可以的话避免陷阱

考虑使用ZMQ节点库来让进程通过TCP相互通信(或者如果它们像在主人一样进行群集,则是IPC)