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

如何扩展Node.js WebSocket Redis服务器?,node.js,websocket,redis,scalability,load-balancing,Node.js,Websocket,Redis,Scalability,Load Balancing,我正在为写一个聊天服务器,我有一些关于和的问题 负载平衡Node.js到底意味着什么?这是否意味着我的服务器应用程序将有n个独立版本在运行,每个版本都在一个单独的服务器上 为了允许一个客户端向所有其他客户端广播消息,我存储了一组服务器上打开的所有webSocketConnections。但是,如果我有n个独立版本的服务器应用程序在运行,每个版本都在一个单独的服务器上,那么我会有n组不同的webSocketConnections 如果对1和2的回答是肯定的,那么如何存储一组通用的webSocket

我正在为写一个聊天服务器,我有一些关于和的问题

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

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

  • 如果对1和2的回答是肯定的,那么如何存储一组通用的
    webSocketConnections
    (跨所有服务器)?我想我可以这样做的一种方法是使用Redis Pub/Sub,让每个
    webSocketConnection
    订阅Redis上的频道

  • 但是,单一的Redis服务器不会成为瓶颈吗?那么我将如何扩展Redis?缩放Redis到底意味着什么?这是否意味着我有m个独立版本的Redis在不同的服务器上运行?这可能吗

  • 我听说Redis不能伸缩。为什么会有人这么说。这是什么意思?如果是这样的话,有没有更好的解决方案来发布/订阅和/或存储所有广播消息的列表


  • 注意:如果你的答案是,即使地球上70亿人口(以及不断增长的人口)中的每一个人每秒都要向地球上的每一个人广播一条信息,Acani也永远不必扩大规模,那么请给出一个有效的解释。

    好吧,你的问题没有几个答案:

  • 对于load balance Node.js,它的意思与您所想的完全一样,只是您并不真正需要单独的服务器,您可以在同一台机器上运行节点服务器的多个进程

  • 节点服务器的每个服务器/进程都有自己的连接,WebSocket的默认存储(例如Socket.IO)是MemoryStore,这意味着所有连接都将存储在机器内存中,需要使用Redistore才能将redis用作连接存储

  • Redis PUB/SUB是实现此任务的好方法

  • 你在这里说的没错,redis目前无法扩展,运行大量连接到redis的进程/连接可能会使redis成为瓶颈

  • Redis不可扩展,这是正确的,但根据本演示,您可以看到,在Redis中,集群开发是最重要的,Redis确实有一个集群,但它还不稳定:(摘自)

  • Redis集群在哪里?

    Redis开发目前的重点是Redis 2.6,它将为您带来对Lua脚本和许多其他改进的支持。这是我们当前的优先事项,但是不稳定的分支已经包含了Redis集群的大部分基本部分。在2.6版本发布后,我们将集中精力将当前的Redis Cluster alpha转变为一个测试版产品,用户可以开始认真测试。 很难做出预测,因为只有当我们觉得Redis Cluster坚如磐石且对客户有用时,我们才会将其作为稳定版发布,但我们希望在2012年夏季有一个合理的测试版,并在2012年底前发布第一个稳定版

    请参见此处的演示:

    2)使用Redis可能无法存储连接:Redis可以以字符串格式存储数据,如果connecion对象具有循环引用(即Engine.IO),则无法序列化它们

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

    考虑使用ZMQ节点库让进程通过TCP(或IPC,如果它们像主工作进程一样集群)彼此通信