我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:2019年全年资料内部公开36码 > 强一致性 >

分布式系统一致性(ACID、CAP、BASE、二段提交、三段提交、TCC、

归档日期:07-30       文本归类:强一致性      文章编辑:爱尚语录

  本文内容属于分布式事物处理范畴,强调强一致性与区块链倡导的共识一致性略有不同,主要是最近以太坊ico导致交易拥堵问题引起我的思考,是不是有可能利用已有的解决方案进行演变增加每个节点的提交时的一致性,简单来讲就是在p2p网络中实现部分强一致性,提升区块链交易性能,文中TCC就是一种演变思路,很受启发,希望有高人给予这方面的指点;本文是我寻找资料时发现的一篇不错的文章,当做扩展思路也是不错的。

  国际开放标准组织Open Group定义了DTS(分布式事务处理模型),模型中包含4个角色:应用程序、事务管理器、资源管理器、通信资源管理器四部分。事务处理器是统管全局的管理者,资源处理器和通信资源处理器是事务的参与者。

  下面我们就介绍两阶段提交协议、三阶段提交协议以及阿里巴巴提出的TCC,它们都是根据DTS这一思想演变出来的。

  准备阶段:协调者向参与者发起指令,参与者评估自己的状态,如果参与者评估指令可以完成,参与者会写redo或者undo日志(这也是前面提起的Write-Ahead Log的一种),然后锁定资源,执行操作,但是并不提交。

  提交阶段:如果每个参与者明确返回准备成功,也就是预留资源和执行操作成功,协调者向参与者发起提交指令,参与者提交资源变更的事务,释放锁定的资源;如果任何一个参与者明确返回准备失败,也就是预留资源或者执行操作失败,协调者向参与者发起中止指令,参与者取消已经变更的事务,执行undo日志,释放锁定的资源。

  我们看到两阶段提交协议在准备阶段锁定资源,是一个重量级的操作,并能保证强一致性,但是实现起来复杂、成本较高,不够灵活,更重要的是它有如下致命的问题:

  阻塞:从上面的描述来看,对于任何一次指令必须收到明确的响应,才会继续做下一步,否则处于阻塞状态,占用的资源被一直锁定,不会被释放。

  单点故障:如果协调者宕机,参与者没有了协调者指挥,会一直阻塞,尽管可以通过选举新的协调者替代原有协调者,但是如果之前协调者在发送一个提交指令后宕机,而提交指令仅仅被一个参与者接受,并且参与者接收后也宕机,新上任的协调者无法处理这种情况。

  脑裂:协调者发送提交指令,有的参与者接收到执行了事务,有的参与者没有接收到事务,就没有执行事务,多个参与者之间是不一致的。

  上面所有的这些问题,都是需要人工干预处理,没有自动化的解决方案,因此两阶段提交协议在正常情况下能保证系统的强一致性,但是在出现异常情况下,当前处理的操作处于错误状态,需要管理员人工干预解决,因此可用性不够好,这也符合CAP协议的一致性和可用性不能兼得的原理。

  询问阶段:协调者询问参与者是否可以完成指令,协调者只需要回答是还是不是,而不需要做真正的操作,这个阶段超时导致中止。

  准备阶段:如果在询问阶段所有的参与者都返回可以执行操作,协调者向参与者发送预执行请求,然后参与者写redo和undo日志,执行操作,但是不提交操作;如果在询问阶段任何参与者返回不能执行操作的结果,则协调者向参与者发送中止请求,这里的逻辑与两阶段提交协议的的准备阶段是相似的,这个阶段超时导致成功。

  提交阶段:如果每个参与者在准备阶段返回准备成功,也就是预留资源和执行操作成功,协调者向参与者发起提交指令,参与者提交资源变更的事务,释放锁定的资源;如果任何一个参与者返回准备失败,也就是预留资源或者执行操作失败,协调者向参与者发起中止指令,参与者取消已经变更的事务,执行undo日志,释放锁定的资源,这里的逻辑与两阶段提交协议的提交阶段一致。

  增加了一个询问阶段,询问阶段可以确保尽可能早的发现无法执行操作而需要中止的行为,但是它并不能发现所有的这种行为,只会减少这种情况的发生。

  在准备阶段以后,协调者和参与者执行的任务中都增加了超时,一旦超时,协调者和参与者都继续提交事务,默认为成功,这也是根据概率统计上超时后默认成功的正确性最大。

  三阶段提交协议与两阶段提交协议相比,具有如上的优点,但是一旦发生超时,系统仍然会发生不一致,只不过这种情况很少见罢了,好处就是至少不会阻塞和永远锁定资源。

  上面两节讲解了两阶段提交协议和三阶段提交协议,实际上他们能解决转账和下订单和扣库存中的分布式事务的问题,但是遇到极端情况,系统会发生阻塞或者不一致的问题,需要运营或者技术人工解决。无论两阶段还是三阶段方案中都包含多个参与者、多个阶段实现一个事务,实现复杂,性能也是一个很大的问题,因此,在互联网高并发系统中,鲜有使用两阶段提交和三阶段提交协议的场景。

  阿里巴巴提出了新的TCC协议,TCC协议将一个任务拆分成Try、Confirm、Cancel,正常的流程会先执行Try,如果执行没有问题,再执行Confirm,如果执行过程中出了问题,则执行操作的逆操Cancel,从正常的流程上讲,这仍然是一个两阶段的提交协议,但是,在执行出现问题的时候,有一定的自我修复能力,如果任何一个参与者出现了问题,协调者通过执行操作的逆操作来取消之前的操作,达到最终的一致状态。

  可以看出,从时序上,如果遇到极端情况下TCC会有很多问题的,例如,如果在Cancel的时候一些参与者收到指令,而一些参与者没有收到指令,整个系统仍然是不一致的,这种复杂的情况,系统首先会通过补偿的方式,尝试自动修复的,如果系统无法修复,必须由人工参与解决。

  从TCC的逻辑上看,可以说TCC是简化版的三阶段提交协议,解决了两阶段提交协议的阻塞问题,但是没有解决极端情况下会出现不一致和脑裂的问题。然而,TCC通过自动化补偿手段,会把需要人工处理的不一致情况降到到最少,也是一种非常有用的解决方案,根据线人,阿里在内部的一些中间件上实现了TCC模式。

  我们给出一个使用TCC的实际案例,在秒杀的场景,用户发起下单请求,应用层先查询库存,确认商品库存还有余量,则锁定库存,此时订单状态为待支付,然后指引用户去支付,由于某种原因用户支付失败,或者支付超时,系统会自动将锁定的库存解锁供其他用户秒杀。

  总结一下,两阶段提交协议、三阶段提交协议、TCC协议都能保证分布式事务的一致性,他们保证的分布式系统的一致性从强到弱,TCC达到的目标是最终一致性,其中任何一种方法都可以不同程度的解决案例2:转账、案例3:下订单和扣库存的问题,只是实现的一致性的级别不一样而已,对于案例4:同步超时可以通过TCC的理念解决,如果同步调用超时,调用方可以使用fastfail策略,返回调用方的使用方失败的结果,同时调用服务的逆向cancel操作,保证服务的最终一致性。

  一、CAP原理一个分布式系统最多只能同时满足一致性(Consistency),可用性(Availability)和分区容错性(Partitiontolerance)这三项中的两项。(1)一致性(Con...博文来自:ZCC的专栏

  一个TCC事务框架需要解决的当然是分布式事务的管理。关于TCC事务机制的介绍,可以参考TCC事务机制简介。TCC事务模型虽然说起来简单,然而要基于TCC实现一个通用的分布式事务框架,却比它看上去要复杂...博文来自:轰鸣

  二阶段提交协议和三阶段提交协议,实际上他们能解决分布式事务的问题,但是遇到极端情况时,系统会产生阻塞或者不一致的问题,需要运营或者技术人员解决。两阶段及三阶段方案都包含多个参与者、多个阶段实现一个事务...博文来自:孤芳不自赏

  分布式系统,这早已不是什么新鲜的东西了,在分布式系统的架构设计过程中,往往会存在分布式一致性的问题,经过前人的辛苦探究,提出了二阶段提交协议,三阶段提交协议,Paxos算法等等,用来解决分布式一致性的...博文来自:进步的阶梯的博客

  转载于:一、HTTP请求方法根据HTTP标准,HTTP请求可以使用多种请求方式。GETPOS...博文来自:u011692780的博客

  说说分布式事务最终一致性(一)TCC简介TCC是由支付宝架构师提供的一种柔性解决分布式事务解决方案,主要包括三个步骤:TCC流程TCC的关键流程如下图(以下单和扣减库存为例子)Q:预生成订单失败了,为...博文来自:u010412301的博客

  1、二段提交协议步骤master向followers提出预事物执行命令,followers收到命令后反馈master自己能够执行事物操作,如果可以,followers在本地写入待执行日志master在...博文来自:tttmdds的专栏

  前面的文章提到的两段式提交,已经能够很好得解决分布式事务了,然而两阶段在即使只有一个进程发生故障时(协调员发生故障了),那么整个系统中也会存在较长时间的block(参与者进程需要block直至协调员恢...博文来自:y.a.l.e

  CAP原理和BASE思想:分布式事务如何处理?解决方案有很多种!比如事务补偿机制:即在事务链中的任何一个正向事务操作,都必须存在一个完全符合回滚规则的...博文来自:寒山空明月

  一、什么是一致性问题水平拆分和垂直拆分水平拆分是指由于单一节点无法满足性能需求,需要扩展为多个节点,多个节点具有一致的功能,组成一个服务池,一个节点服一部分的请求量,所有节点共同处理大规模高并发的请求...博文来自:gaowenhui2008的专栏

  分布式系统一致性概念在分布式系统中,数据一致性往往指的是由于数据的复制,不同数据节点中的数据内容是否完整并且相同。一致性的重要性任何一个分布式系统都无法同时满足Consistency(一致性)、Ava...博文来自:heihei

  为啥出现一致性问题在传统单体架构中,数据状态的处理都在同一个服务和数据库中,而具有ACID特性的数据库支持强一致性,就是说数据库本身是不会出现不一致的状态的,比如我们常用的关系型数据库MySQL就是通...博文来自:Vioaos Blog

  1背景一致性是一个抽象的、具有多重含义的计算机术语,在不同应用场景下,有不同的定义和含义。在传统的IT时代,一致性通常指强一致性,强一致性通常体现在你中有我、我中有你、浑然一体;而在互联网时代,一致性...博文来自:weixin_33860553的博客

  2P/3P提交(为了保证事务的ACID) 2P就是二段提交(RDBMS经常就这种机制,保证强一致性),3P就是三段提交;2P提交--1阶段:提交事务请求(投票阶段)       2P提交--2阶段:...博文来自:cxw0的博客

  CAP定理:在理论计算机科学中,CAP定理(CAPtheorem),又被称作布鲁尔定理(Brewer’stheorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点:一致性(Consis...博文来自:凌云之陟

  实践证明,在分布式系统,同时满足CAP定律(一致性、可用性、分区容错性)是不太可能的。虽然强一致性可以提高用户的体验,但是牺牲了系统的可用性,在经过综合的考虑和验证下,业界普遍的做法是在一致性和可用性...博文来自:harry1986601的专栏

  基础理论先简单介绍下数据一致性的基础理论。 强一致  当更新操作完成之后,任何多个后续进程或者线程的访问都会返回最新的更新过的值。这种是对用户最友好的,就是用户上一次写什么,下一次就保证能读到什么。根...博文来自:浮生一梦

  分布式系统是由多个不同的服务节点组成,节点与节点之间通过消息传递进行通信和协调。根据消息传递的不同,分布式系统的运行模型可以分为异步模型系统和同步模型系统。本文首先将介绍同步通信与异步通信的概念,然后...博文来自:JH_Zhai的博客

  由于毕设和Lab项目需要,最近在看《从paxos到zookeeper分布式一致性原理与实践》,2和3PC算法流程,网上资料很多,就不赘述了。由于书中关于2PC和3PC的缺点的部分描述不容易让人理解,因...博文来自:业精于勤,荒于嬉

  幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是...博文来自:纸上得来终觉浅,绝知此事要躬行

  分布式系统一致性,客户中心一致性,数据中心一致性,相互一致性博文来自:乔的博客

  两阶段提交协议:第一阶段,准备阶段:协调者向参与者发起指令,参与者评估自己的状态,如果参与者评估指令可以完成,则会写redo或者undo日志,然后锁定资源,执行操作,但并不提交;第二阶段:如果每个参与...博文来自:的博客

  现如今我们的系统大多拆分为分布式SOA,或者微服务,一套系统中包含了多个子系统服务,而一个子系统服务往往会去调用另一个服务,而服务调用服务无非就是使用RPC通信或者restful,既然是通信,那么就有...博文来自:Lovnx

  分布式系统都是基于CAP/BASE理论进行设计的。CAP/BASE在分布式系统设计过程中提供了最基本的也是最重要的原则。正确的理解CAP/BASE能够更好的指导分布式系统的设计,当然了只有经历了大量的...博文来自:鸡蛋达芬奇

  分布式事务数据库事务要满足几个要求:ACIDAtomic(原子性)事务必须是原子的工作单元Consistent(一致性)事务完成时,必须使所有数据都保持一致状态Isolation(隔离性)并发事务所做...博文来自:周振宇的博客

  原文Zookeeper与Dubbo什么是分布式系统中的幂等性ZooKeeper是一种分布式协调服务,他用简单的架构和API,解决了在分布式环境中协调和管理服务的难题。分布式SOA,或者微服务,一套系...博文来自:eluanshi12的博客

  CAP定理指出,在一个分布式系统中,对于一致性、可用性、分区容错这三个特性,不可能同时满足,而是必须有所舍弃。我们设计分布式系统时,必须在三者之间(尤其是一致性和可用性之间)有所取舍和平衡。作者:王克...博文来自:

  CAP理论是基于分布式存储系统的一种理论,CAP具体指的是:Consistency为一致性,Availability为可用性,partitiontolerance是分区容错性。CAP指的是任何一个分布...博文来自:超威半导体

  随着大型网站的各种高并发访问、海量数据处理等场景越来越多,如何实现网站的高可用、易伸缩、可扩展、安全等目标就显得越来越重要。    为了解决这样一系列问题,大型网站的架构也在不断发展。提高大型网站的高...博文来自:劝学

  小陈是IT国的一个小商贩,刚开了一个布庄和一个制衣店,生意还不错,由于刚刚开业,这布庄和制衣店的账房都由马掌柜,比如说十八里店的张员外要定制一个六十大寿的锦袍,马掌柜就在布庄的库存账簿里减去一匹布在制...博文来自:IT农场

  前言什么是分布式系统?关于这点其实并没有明确且统一的定义。在我看来,只要一个系统满足以下几点就可以称之为分布式系统系统由物理上不同分布的多个机器节点组成 系统的多个节点通过网络进行通信,协调彼此之间的...博文来自:java的博客

  [原创链接:转载请保留此声明,谢谢]绝大部分网络上对幂等性的解释类似于:幂等性是指重复使用同样的参数调用同一方法时总能获得同样的结果。比如对...博文来自:g11d111的博客

  1、背景一致性是一个抽象的、具有多重含义的计算机术语,在不同应用场景下,有不同的定义和含义。在传统的IT时代,一致性通常指强一致性,强一致性通常体现在你中有我、我中有你、浑然一体;而在互联网时代,一...博文来自:Lovnx

  事务是一个很重要的概念,它必须满足ACID特性,在单机的数据库中,这很容易实现。但在分布式数据库中,各个表分散在各台不同的机器上,如何对这些表实施分布式的事务处理就成为一个比较困难的问题,其中两段式提...博文来自:y.a.l.e

  分布式系统原理CAP理论CAP理论是由EricBrewer提出的分布式系统中最为重要的理论之一[8]。本文将CAP理论安排在原理部分的最后介绍是为了利用前面已经介绍过的几种分布式协议来帮助理解CAP理...博文来自:从零开始

  CA满足的情况下,P不能满足的原因:         数据同步(C)需要时间,也要正常的时间内响应(A),那么机器数量就要少,所以P就不满足            CP满足的情况下,A不能满足的原因:...博文来自:peng_0129的博客

  分布式系统中的每个节点都能知道自己的事物是成功还是失败,但是不知道其他节点的操作结果。要保证多个节点的事务性,就需要一个中间者来协调这些机器,由中间者来决定事物的提交。2pc和3pc应运而生。 2PC...博文来自:ddxd0406的博客

  对于分布式系统了解的不是很多,今天学习了一下分布式系统中CAP,记录一下,希望能对分布式系统的学习有所帮助Consistency(一致性),数据一致更新,所有数据变动都是同步的Availability...博文来自:沉迷代码无法自拔

  对分布式事务及两阶段提交、三阶段提交的理解一、分布式数据一致性在分布式系统中,为了保证数据的高可用,通常会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上。1.什么是数据一致性...博文来自:helloworld的专栏

  在分布式系统中,著有CAP理论,该理论由加州大学伯克利分校的EricBrewer教授提出,该理论阐述了在一个分布式系统中不可能同时满足一致性(Consistency)、可用性(Availability...博文来自:sofia1217的专栏

  来自:需求背景: 由于系统涉及到多个数据源,所以想用两阶段提交事务(分布式事务)来保证数据的一致性,完整性。 测试环境: OS--&a...博文来自:玩一玩Java

  本文之前,我只是对自旋锁有所了解,知道它是做什么的,但是没有去测试实现过,甚至以为自旋锁只有kernel用这个,今天才发现POSIX有提供自旋锁的接口。下面我会分析一下自旋锁,并代码实现自旋锁和互斥锁...博文来自:FreeeLinuxs blog

  本文转载自:随着大型网站的各种高并发访问、海量数据处理等场景越来越多,如何实现网站的高可用、易伸缩、可扩展、安全等目标就显得越来越重要。为了解决这样一系列问题,大型网站的架构也在不断发展。提高大型网站...博文来自:seanxwq的博客

  分布式系统详解--基础知识(CAP)    前面呢,文章写到了 分布式系统详解--基础知识(通信),在RPC中看到通信为题的重要性,但是分布式系统当中又要牵扯到另外一个地方...博文来自:David的博客

本文链接:http://ravynhart.com/qiangyizhixing/461.html