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

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

一致性

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

假如一个表示朋友关系的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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 提升VMware虚拟机性能招数

    在VMware虚拟机(VMwareWorkstation或VMwareServer)中我们可以同时运行多个GuestOS,当同时在同一HostOS中运行多台虚拟机时势必会严重影响到HostO

    2021年12月24日
    329
  • JDK1.8下载、安装和环境配置教程

    JDK1.8下载、安装和环境配置教程一、下载安装包1.JDK1.8百度云下载路径:链接:https://pan.baidu.com/s/1ozCGy53AIeQIHWL6s9oAbw提取码:04lf网盘放的是jdk1.8版本中的1.8.0_152的版本2.如果大家想下载别的版本,可以去官网:www.oracle.com下载,进入官网页面,然后点击Downloads。…

    2022年6月12日
    32
  • 设置ASP页的Session过期时间的问题

    设置ASP页的Session过期时间的问题保持Session的方法:有人说设session.timeout=-1,或小于0的数。这种方法肯定是不行的,session计算时间以分钟为单位,必须是大于等于1的整数。又有人说设session.timeout=99999。这种同样不行,session有最大时间限制。我经过测试发现最大值为24小时,也就是说你最大可以session.timeout=1440,1441都是不可以有,呵呵。本人测试环境:

    2022年7月16日
    14
  • 对数的计算公式[通俗易懂]

    对数的计算公式[通俗易懂]性质编辑①;②;③负数与零无对数.④*=1;恒等式及证明a^log(a)(N)=N(a>0,a≠1)推导:log(a)(a^N)=N恒等式证明在a>0且a≠1,N>0时设:当l

    2022年8月1日
    5
  • fedora系统登录密码_fedora 命令行自动登录

    fedora系统登录密码_fedora 命令行自动登录情况类似于fedora10,fedora11.打开系统工具-终端输入命令:su-输入root密码(此时密码不显示,直接输入)输入命令:gedit/etc/pam.d/gdm在文本编辑器中注释掉”authrequiredpam_succeed_if.souser!=rootquiet”这一行(在这一行前面加上”#”,即改成#authrequ

    2022年9月20日
    3
  • 多重共线性VIF

    多重共线性VIF多重共线性是指自变量之间存在线性相关关系,即一个自变量可以是其他一个或几个自变量的线性组合。方差膨胀系数(varianceinflationfactor,VIF)是衡量多元线性回归模型中复(多重)共线性严重程度的一种度量。它表示回归系数估计量的方差与假设自变量间不线性相关时方差相比的比值。多重共线性是指自变量之间存在线性相关关系,即一个自变量可以是其他一个或几个自变量的线性组合。检验方法主要有:容忍度(Tolerance)和方差膨胀系数(Varianceinflationfactor,

    2022年4月29日
    116

发表回复

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

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