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

ma1*_*w28 9 scalability load-balancing websocket redis node.js

我正在为Acani编写一个聊天服务器,我有一些关于Scaling node.jswebsockets以及负载均衡器可扩展性的问题.

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

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

  3. 如果1和2的答案是肯定的,那么如何存储一套通用的webSocketConnections(跨所有服务器)?我认为我可以做到这一点的一种方法是使用Redis Pub/Sub,只需让每个webSocketConnection订阅Redis上的频道.

  4. 但是,那么,单个Redis服务器不会成为瓶颈吗?然后我如何缩放Redis?扩展Redis甚至意味着什么?这是否意味着我有中号在不同的服务器上运行的Redis的独立版本?这甚至可能吗?

  5. 我听说Redis没有扩展.有人会这么说.那是什么意思?如果这是真的,对于pub/sub和/或存储所有广播消息的列表是否有更好的解决方案?

注意:如果你的答案是Acani永远不必扩展,即使地球上所有70亿人(并且正在增长)中的每一个人每秒都向地球上的其他人广播一条消息,那么请给出有效的解释.

udi*_*idu 6

那么,你的问题答案很少:

  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 Cluster的大部分基本部分.在2.6发布之后,我们将集中精力将当前的Redis Cluster alpha转换为用户可以开始认真测试的beta产品.很难做出预测,因为只有当我们认为Redis Cluster坚如磐石且对我们的客户有用时,我们才会发布Redis Cluster,但我们希望在2012年夏季能够获得合理的测试版,并在发布之前发布第一个稳定版本. 2012年底.

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