本文翻译自国外论坛 medium,原文地址:https://medium.com/@interviewready/data-replication-in-distributed-system-87f7d265ff28
什么是数据复制?
数据复制是指将数据复制到一个或多个数据容器以确保可用性的过程。复制的数据通常存储在不同的数据库实例中,即使一个实例发生故障,我们也可以从其他实例获取数据。
一种流行数据复制的实现架构是主从架构。
”
主从架构
为了理解这个架构,我们举一个例子。
-
我们有四个客户端,每个客户端都连接到一个负载均衡器。 -
然后负载均衡器将请求分发到三个应用程序服务器。 -
每台服务器连接到一个数据库实例。
你能注意到这里有什么问题吗?
我们的数据库存在单点故障。如果它崩溃了,我们的整个系统就会停止工作。
为了避免这种单点故障,我们可以使用另一个数据库(最好是不同的数据库实例)来存储原始数据的副本(一般我们成为从库)。现在如果原始数据库(主库)崩溃,我们可以将请求转到从库。
但是我们如何保持从库与主库同步呢?这有两种方法。
同步复制数据
-
在这种方法中,数据同时写入主库和从库 -
数据始终一致。即数据如果写入主库,它也会写入从库 -
数据库负载较高
异步复制数据
-
在这种方法中,首先将数据写入主库,并定期将更新写入从库 -
由于复制以固定间隔进行,因此存在数据丢失和不一致的可能性 -
数据库负载相对较低
这里我们的一般定义是收到写请求的主库数据库是 master)。从库被称为 slaves。
如上图我们的主站也就是 Server2 维护事务日志。他会更新从站中(Server1)的数据,它发送命令,然后从站以相同的顺序执行这些命令。
如果服务器向从站发送写入请求会发生什么?
有两种方法可以处理这种情况
-
不允许对从站的写请求,从站无法写入数据库,它只能去读从库数据。 -
允许从站写入数据。我们将允许从站写入数据。然后从站将更改复制到主站。在这种情况下,从站就接替了主站的角色。所以不再是主从架构而是主主架构
主主架构的问题
网络故障可能会导致主主架构中的数据不一致。
让我们用一个例子来理解这一点,假设我们有两个数据库实例 A 和 B。
-
两人都是 master。 -
它们之间的路由器出现故障。所以 A 认为 B 离线,B 认为 A 离线。 -
他们有一个数据项 X,其值最初为 100。
现在用户发送以下请求,
-
X 减去 20,该请求被路由到 A,此时 A 中 X 的值为 80。 -
X 减去 80,这个请求被路由到 B(因为都是 master,所以写请求可以路由到任何数据库)。现在 B 中 X 的值为 20。 “
由于存在通信故障,A 和 B 无法同步,它们具有不同的数据值,因此不一致。
”
-
现在,如果用户发出读请求,他/她将获得不同的值,具体取决于他/她将连接到的数据库。
这个问题被称为裂脑问题。
解决裂脑问题
我们可以通过添加第三个节点(数据库实例)来解决裂脑问题。
这里我们假设一个节点崩溃以及其他两个节点之间的路由器崩溃的可能性极小。
让我们考虑三个数据库实例 A、B 和 C。
-
如果 C 崩溃,A 和 B 是主库并且它们是同步的。所以他们处于一致的状态。当 C 在线时,他们可以读取 A 或 B 的内容。 -
如果 A 和 B 之间出现通信故障 -
当 A 收到写入请求时,它将其状态传播到 C。最初状态为 S0,然后转移到 Sx。所以现在 A 和 C 都有 Sx。 -
当 B 收到写入请求时,它将其状态从 S0 移至 Sy。它尝试将其状态传播到 C,但失败,因为 B 的先前状态不等于 C。现在 B 中止写入请求并将其状态更新为 Sx。现在 B 可以接受写入请求并将更改传播到 C。
这称为分布式共识。多个节点就特定值达成一致。在这种情况下,A、B 和 C 在最终状态上达成一致。
最后
感谢您的阅读,希望本文能对你理解分布式架构中的数据复制有所帮助。
下载说明:
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.shuli.cc/?p=14982,转载请注明出处。
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.shuli.cc/?p=14982,转载请注明出处。
评论0