database - 主主数据库架构中的主节点是共享相同的数据集还是拥有自己独特的数据集?
问题描述
在传统的主从架构中,有一个主节点和一个或多个从节点。驻留在主节点中的数据集异步同步到从节点。写入仅限于一个(主)节点本身。万一主节点故障,一个从节点将成为主节点。这将带来一些停机时间和一些数据丢失。
主主架构将有多个主节点,每个主节点将有自己的从节点。这里可以在多个节点上进行写入。所以如果一个主节点出现故障,另一个主节点将支持写入请求。所以我担心是
1.master master架构中的master节点是否共享同一个数据集?如果是,那么主节点之间的通信模式是同步还是异步?如果它是异步的,那么如果一个主节点出现故障,另一个主节点将有不一致的数据,就像在主从架构中一样。
2.如果主节点有自己独特的数据集,那么主节点之间是否仍然相互通信?如果是,通信模式是什么,更重要的是,考虑到他们有自己的独特数据集,需要什么。
3.主从架构除了可以扩展写请求之外,还有没有其他的缺点被主从架构解决了?
解决方案
所有这些架构都假设一个数据集。否则,您不是在谈论复制,而是在谈论分片,这是另一门学科。这两个讨论并非不相容,而是真正解决不同问题的不同问题。
多主解决方案几乎总是允许不一致的。最终一致性或惰性一致性通常是更高性能和无停机故障转移的权衡。基于仲裁的替代方案通常比简单的主/从解决方案具有较低的整体性能,因为多个服务器必须确认更改以允许其提交。
为了解决您的问题:
1)通常是异步的,是的,绝对可能发生不一致。同步解决方案脆弱、昂贵且缓慢,但偶尔需要解决非常特殊的问题。
2)不,主节点都共享一个数据集
3)假设你说的是最终一致的,你要解决的问题是扩展和冗余。任何节点都可以关闭,系统可以不间断地继续运行。如果您在谈论 ACID 一致性,那么您纯粹是在解决保证写入问题,而不是缩放问题。如果我经营一家银行,我可能需要多个具有 ACID 一致性的 master。
推荐阅读
- neo4j - Neo4j 查询执行超过指定超时
- c - 在我的 C 程序中,为什么我的跟踪循环和实际输出不同?
- typescript - 使用两个更改相同数据的云函数处理竞争条件
- r - 根据相应的行标签将行值放入列中
- css - 如何使用媒体查询在引导程序 4 中阻止特定宽度的视差?
- google-apps-script - 是否有脚本可以找到包含星号的特定列中的每个单元格,然后在其上方插入一行?
- c++ - 如何正确使用管道将数据从子进程传输到父进程?
- r - 预测模型给出奇怪的 MAPE 值,有人可以告诉我这是否正确吗?
- android - 如何从 inputConnection 中检测和删除 unicode 序列表情符号?
- javascript - 变量不会递增并注册其新值