我正在研究的项目将被部署到多个“房间”。每个房间都有自己的服务器,运行node.js的实例,每个房间都有某种形式的数据存储。 (数据库风味尚未确定)。
每个房间必须能够完全独立运行...所以如果我们有5个房间,4个房间都关闭,那么最后一个房间应该能够在没有其他房间的情况下继续工作。到目前为止没问题......
棘手的部分是房间之间有一些共享数据......例如用户帐户。因此,如果一个房间添加了用户,该用户应该能够登录所有房间 如果其他房间之一对记录进行了更改,则可以通知node.js实例,以便在需要时可以重新加载该数据...
我一直在关注MongoDB副本集,但我不相信这是解决我问题的最佳解决方案。
我一直在考虑一个解决方案,其中每个房间负责其数据库,并在其他node.js实例广播发送新用户信号的事件时更新它。问题在于,如果一个房间已经离线一天,它将无法赶上其停机期间所做的更改。
我们不会在这里查看大量数据......这里有足够数据库知识的人指出我的方向正确吗?
答案 0 :(得分:1)
每个房间都没有必要拥有自己的数据库。
您要做的是拥有一个可以是SQL / NoSQL的中央数据库。该中央数据库可以集群在多台计算机上,以实现可靠性,可用性,数据分片,负载平衡以及拥有数据库集群而非单台计算机的许多其他好处。对于不同的数据库系统,这可以做的方式不同。那里有很多: mysql,redis,postgresql和许多其他。你可以看看它们。
您的所有节点实例都将从该中央数据库进行写入和读取。在某处添加新用户时,不需要实例相互通知并更新自己的本地数据库。这完全没有必要。在这种情况下,即使节点离线一天,它也能够在重新联机时从中央数据库访问所有新数据。这是你应该遵循的设计。
拥有多个数据库实例,每个房间一个,并在服务器级别实现协调层,总数为NO。这种协调应该在数据库层本身完成,所有服务器实例应该能够联系数据库,而数据库又是一致的和更新的。
我希望这个答案有助于指导你。