一尘不染

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

redis

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

到目前为止,我想到了两种解决方案:

  1. 订阅NoSQL密钥(例如redis publish-subscribe
  2. 节点使用套接字彼此更新。

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


阅读 472

收藏
2020-06-20

共1个答案

一尘不染

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

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

2020-06-20