【问题标题】:How to Scale Node.js WebSocket Redis Server?如何扩展 Node.js WebSocket Redis 服务器?
【发布时间】:2012-10-12 07:40:17
【问题描述】:

我正在为Acani 编写聊天服务器,我对Scaling node.jswebsockets with load balancer scalability 有一些疑问。

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

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

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

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

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

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

【问题讨论】:

    标签: node.js websocket redis scalability load-balancing


    【解决方案1】:

    好吧,你的问题的答案很少:

    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/download )

    Redis 集群在哪里?

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

    在此处查看演示文稿:http://redis.io/presentation/Redis_Cluster.pdf

    【讨论】:

      【解决方案2】:

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

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

      考虑使用 ZMQ 节点库让进程通过 TCP(或 IPC,如果它们在 master-worker 中集群)相互通信

      【讨论】:

        猜你喜欢
        • 2019-08-13
        • 1970-01-01
        • 2014-03-01
        • 2011-08-13
        • 2016-12-18
        • 2014-02-13
        • 2014-04-07
        • 1970-01-01
        • 2012-05-27
        相关资源
        最近更新 更多