分布式一致性:两阶段提交

分布式一致性:两阶段提交

一致性

一致性是指数据库中的信息是一致的,不矛盾的。

假如一个表示朋友关系的table有两个字段user_idfriend_id,如果有[1,2],那么必须有[2,1]。但是如果table中没有[2,1],可以认为这个table中的数据是不一致的。

又例如银行系统中用户A给用户B转账10¥,这种情况下,可以肯定A、B的资金总和是不变的。转账过程有两步,第1步是从A的账户中扣除10¥,第2步是在B的账户中增加10¥。如果在第1步后由于系统故障,第2步没有执行。此时A、B的资金总和发生变化,认为出现了不一致。这个用事务可以解决。

分布式一致性

分布式系统的一致性问题总是伴随数据复制而生, 数据复制技术在提高分布式系统的可用性、可靠性和性能的同时,却带来了不一致问题。 理想情况下, 多个副本应该是应用透明的, 从外界看来多副本如同单副本, 而事实上维护一致性非常困难。试想一下, 写入新数据时, 某副本所在的服务器宕机,或者突然发生了网络错误, 此时该如何处理? 是继续重试等待故障消失呢,还是放弃写入故障副本? 若继续重试写入, 则导致系统不可用,影响业务; 而放弃写入则副本数据不同步,产生了差异, 会不会对应用会造成影响? 这似乎是个两难问题, 看似无法抉择。 幸好一致性问题并不是非黑即白的二选一问题, 业界早就定义了多套适合于各种应用场景的一致性模型:强一致性、弱一致性、最终一致性。

这里说一下两阶段提交协议。

例如现在数据库A、B、C分别部署在3台主机上,这三个数据库要保持数据的一致性。

两阶段提交协议分为准备和提交两个阶段。

例如现在A要执行一个事务了,它先问问B和C能否执行该事务,而B和C先把这个事务执行一下看行不行。这是第一阶段。

如果B和C都可以执行该事务,那么A、B、C均提交该事务。如果B或者C告知A无法执行该事务,则回滚。这是第二阶段。


另外还有一个三阶段提交,见下面的资料。

资料

两阶段提交协议
分布式一致性
维基百科-二阶段提交
维基百科-三阶段提交
Three-phase commit protocol
Two-phase commit protocol

分布式事务设计-两段式提交
分布式事务设计-三段式提交

《改变未来的九大算法》 第八章

转载于:https://my.oschina.net/letiantian/blog/524843

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109269.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 约瑟夫环问题详解

    约瑟夫环问题详解在牛客网上做到一道题,是约瑟夫环的变型,所以借此学习一下新知识,并且巩固一下对题目意思的理解,这一篇仅作约瑟夫环问题的解释,下一篇再写题目:1.首先,我们先来了解一下什么是约瑟夫环问题:讲一个比较有意思的故事:约瑟夫是犹太军队的一个将军,在反抗罗马的起义中,他所率领的军队被击溃,只剩下残余的部队40余人,他们都是宁死不屈的人,所以不愿投降做叛徒。一群人表决说要死,所以用一种策略来先后杀…

    2022年6月4日
    34
  • tabnine激活码(注册激活)

    (tabnine激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlS32PGH0SQB-eyJsaWNlbnNlSWQi…

    2022年3月26日
    43
  • idea激活码永久 吾爱破解_通用破解码

    idea激活码永久 吾爱破解_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    1.5K
  • ds什么意思_小店源码

    ds什么意思_小店源码介绍:云铺购最新Ds网系统无后门全开源可运营版本控制端功能支持一键通秒搭建Ds网站点,一键新增修改站点版本,支持QQ一键通登录自主添加站点域名管理站点,可配置后台安全访问域名白名单IP(实时保护)控制端支持一键备份旗下所有站点数据,共享数据版大大减少服务器压力主站点功能前后台支持QQ一键通登录,前台风格8套内页风格3套,免密支付,订单代付自定义网站公告导航,等级配置,邮箱配置,密匙配置,站点一键通装修支持一键通秒对接云铺购系统,玖伍系统,亿乐系统,各大卡盟系统,网商系统等对接商品价格支持

    2022年8月13日
    5
  • Java安全之Fastjson反序列化漏洞分析

    Java安全之Fastjson反序列化漏洞分析首发:先知论坛0x00前言在前面的RMI和JNDI注入学习里面为本次的Fastjson打了一个比较好的基础。利于后面的漏洞分析。0x01Fas

    2021年12月13日
    41
  • centos7 安装gitea使用

    centos7 安装gitea使用参考官网 https gitea iohttps docs gitea iohttps docs gitea io en us install from binary 关于 GiteaGitea 是一个自己托管的 Git 服务程序 他和 GitHub BitbucketorG 等比较类似 他是从 Gogs 发展而来 不过我们已经 Fork 并且命名为 Gitea 对

    2025年9月25日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号