9

我正在为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 意味着什么?这是否意味着我在不同的服务器上运行了m个独立版本的 Redis?这甚至可能吗?

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

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

4

2 回答 2

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 稳定且对我们的客户有用时,我们才会发布稳定版,但我们希望在 2012 年夏天有一个合理的测试版,并在发布之前发布第一个稳定版2012 年底。

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

于 2012-10-22T14:46:12.663 回答
2

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

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

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

于 2014-01-29T12:26:49.007 回答