Node.js多服务器集群:如何在多个节点集群中共享对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node.js多服务器集群:如何在多个节点集群中共享对象相关的知识,希望对你有一定的参考价值。
我想为聊天室应用程序创建一个node.js服务器集群,以支持高并发性。我需要能够在所有节点之间共享信息。我试图找出保持所有服务器同步的最佳方法。我希望共享对象具有尽可能多的灵活性,因为我计划在将来添加更多功能。
到目前为止,我有两个解决方案:
- 订阅NoSQL密钥(例如redis publish-subscribe)
- 节点使用sockets相互更新。
哪个更好?还有其他想法吗?
答案
Redis很不错,因为它独立于您的节点应用程序,并且相当容易扩展。您还可以将它用于pub / sub之外的许多内容,例如在节点服务器之间共享基本数据结构(哈希,有序集,列表,字符串),以帮助它们以这种方式保持同步。从理论上讲,你可以将给定房间中的所有聊天保存为一个排序集,其中你的密钥是某个聊天对象的json表示(类似于{'user':'some_user','msg':'some_msg'}
,你的分数是时间戳,因此很容易按时间拉对话)。 Redis非常快,其数据结构经过高度优化,因此单个服务器可以处理许多用户。
我们在生产中有一个类似的设置,一个Redis服务器处理100万用户(每分钟大约10k命中插入和20k读取,并且在非CPU重的盒子上CPU使用率很少超过5%)。
以上是关于Node.js多服务器集群:如何在多个节点集群中共享对象的主要内容,如果未能解决你的问题,请参考以下文章
使用集群将 Socket.IO 扩展到多个 Node.js 进程时的一些问题
Elasticsearch:在多个机器上创建多节点的 Elasticsearch 集群 - Elastic Stack 8.0