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

Node.js多服务器集群:如何在多个节点集群中共享对象,node.js,redis,socket.io,cluster-computing,Node.js,Redis,Socket.io,Cluster Computing,我想为聊天室应用程序创建一个node.js服务器集群,以支持高并发性。我需要能够在所有节点之间共享信息。我试图找出保持所有服务器同步的最佳方法。我希望共享对象具有尽可能多的灵活性,因为我计划在将来添加更多功能 到目前为止,我有两个解决方案: 订阅NoSQL密钥(例如) 节点之间使用 哪个更好?还有其他想法吗?Redis很不错,因为它独立于您的节点应用程序,而且相当容易扩展。您还可以将它用于发布/订阅之外的许多内容,例如在节点服务器之间共享基本数据结构(哈希、排序集、列表、字符串),以帮助它们以这

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

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

  • 订阅NoSQL密钥(例如)
  • 节点之间使用

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

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


    我们在生产中也有类似的设置,一台Redis服务器处理100万用户(每分钟约10万次点击插入,20万次读取排序集),而在一个非CPU密集型机箱中,CPU使用率很少超过5%。

    “保持所有集群同步”是一个巨大的讨论,我想您需要一个最终一致性模型()。Redis是一个可靠的解决方案,既可以作为发布/订阅,也可以作为存储(考虑一个更持久的解决方案也是一个好主意)。对于IPC,您甚至可以尝试nodejs native IPC()。使用套接字将是一个痛苦的想法,因为您需要实现自己的“协议”。@Evalon的链接是针对单服务器集群的,而不是针对多服务器的,这就是为什么我想到使用套接字在不同服务器之间通信。这是我的第一个节点项目,我想知道socketsync和redis-subscribe哪个更好。所以你想要分布式集群而不仅仅是一个分支。我明白了,那么消息代理也应该出现在桌面上。如果您坚持使用套接字实现,您也应该阅读Eli您能告诉我更多信息吗“我们在生产中有一个类似的设置,一台Redis服务器处理100万用户(每分钟约10万次点击插入,20万次从排序集读取),”什么样的服务器?有多少个连接(websocket?)?thanks@LXG服务器是一个m2.xlarge。通常连接的应用程序服务器数量很小,但数量不一——在20台之间。你真的是说“每分钟”吗?20k/60=~333个请求/秒?