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

Kuf*_*Kuf 3 cluster-computing redis node.js socket.io

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

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

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

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

Eli*_*Eli 5

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

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