Node.js多服务器集群:如何在多个节点集群中共享对象

时间:2013-06-06 08:13:01

标签: node.js redis socket.io cluster-computing

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

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

  1. 订阅NoSQL密钥(例如redis publish-subscribe
  2. 节点使用sockets相互更新。
  3. 哪个更好?还有其他想法吗?

1 个答案:

答案 0 :(得分:5)

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

我们在生产中有一个类似的设置,一个Redis服务器处理100万用户(每分钟大约10k命中插入和20k读取排序),并且在非CPU大量的CPU使用率很少超过5%框。