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

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

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

  1. 订阅NoSQL密钥(例如, redis发布 – 订阅 )
  2. 节点使用套接字互相更新。

哪个更好? 我错过了什么?

Redis是很好的,因为它独立于您的节点应用程序,并且相当容易扩展。 你也可以在pub / sub之外使用它,比如在你的节点服务器之间共享基本的数据结构(哈希,sorting的集合,列表,string)以帮助保持它们同步。 理论上讲,你可以把所有的聊天logging保存在一个给定的房间里,作为一个有序的集合,你的关键字是某个聊天对象的json表示(类似{'user':'some_user','msg':'some_msg'} ,你的分数是时间戳,因此很容易按时间拉对话)。 Redis速度非常快,其数据结构高度优化,因此单台服务器可以处理多个用户。

我们使用一台Redis服务器处理100万用户(每分钟大约10K次插入和20K次读取),在非CPU大型机器上CPU使用率很less超过5%。