4

我想为聊天室应用程序创建一个 node.js 服务器集群以支持高并发。我需要能够在所有节点之间共享信息。我正在尝试找出使所有服务器保持同步的最佳方法。我希望共享对象具有尽可能多的灵活性,因为我计划在未来添加更多功能。

到目前为止,我有两个解决方案:

  1. 订阅 NoSQL 键(例如redis publish-subscribe
  2. 节点使用套接字相互更新。

哪个更好?还有其他想法吗?

4

1 回答 1

5

Redis 很好,因为它独立于您的节点应用程序并且相当容易扩展。您还可以将它用于 pub/sub 之外的许多内容,例如在节点服务器之间共享基本数据结构(哈希、排序集、列表、字符串),以帮助它们以这种方式保持同步。从理论上讲,您可以将给定房间中的所有聊天保存为一个排序集,其中您的键是某个聊天对象的 json 表示(例如{'user':'some_user','msg':'some_msg'},您的分数是时间戳,因此很容易按时间拉动对话)。Redis 速度极快,其数据结构经过高度优化,因此单个服务器可以处理很多很多用户。

我们在生产中也有类似的设置,一台 Redis 服务器处理 100 万用户(每分钟大约 1 万次点击插入和 2 万次从排序集中读取),并且 CPU 使用率在非 CPU 密集型机器上很少超过 5%。

于 2013-06-08T00:04:53.480 回答