分布式事物html
随着分布式计算的发展,事物在分布式计算领域也获得了普遍的应用。在单机数据库中,咱们很容易可以实现一套知足ACID特性的事物处理系统,但在分布式数据库中,数据分散在各台不一样的机器上,如何对这些数据进行分布式的事物处理具备很是大的挑战。数据库
分布式事物是指事物的参与者、支持事物的服务器、资源服务器以及事物管理器分别位于分布式系统的不一样节点上,一般一个分布式事物中会涉及对多个数据源或业务系统的操做。服务器
能够设想一个最典型的分布式事物场景:一个跨银行的转帐操做涉及调用两个异地的银 行服务,其中一个是本地银行提供的取款服务,另外一个则是目标银行提供的存款服务,这两个服务自己是无状态而且相互独立的,共同构成了一个完整的分布式事 物。若是从本地银行取款成功,可是由于某种缘由存款服务失败了,那么就必须回滚到取款以前的状态,不然用户可能会发现本身的钱不知去向了。网络
从这个例子能够看到,一个分布式事务能够看作是多个分布式的操做序列组成的,例如 上面例子的取款服务和存款服务,一般能够把这一系列分布式的操做序列称为子事物。所以,分布式事务也能够被定义为一种嵌套型的事物,同时也就具备了 ACID事物特性。但因为在分布式事务中,各个子事物的执行是分布式的,所以要实现一种可以保证ACID特性的分布式事物处理系统就显得格外复杂。架构
CAP理论并发
一个经典的分布式系统理论。CAP理论告诉咱们:一个分布式系统不可能同时知足一致性(C:Consistency)、可用性(A:Availability)和分区容错性(P:Partition tolerance)这三个基本需求,最多只能同时知足其中两项。分布式
一、一致性高并发
在分布式环境下,一致性是指数据在多个副本之间可否保持一致的特性。在一致性的需求下,当一个系统在数据一致的状态下执行更新操做后,应该保证系统的数据仍然处于一直的状态。网站
对于一个将数据副本分布在不一样分布式节点上的系统来讲,若是对第一个节点的数据进 行了更新操做而且更新成功后,却没有使得第二个节点上的数据获得相应的更新,因而在对第二个节点的数据进行读取操做时,获取的依然是老数据(或称为脏数 据),这就是典型的分布式数据不一致的状况。在分布式系统中,若是可以作到针对一个数据项的更新操做执行成功后,全部的用户均可以读取到其最新的值,那么 这样的系统就被认为具备强一致性搜索引擎
二、可用性
可用性是指系统提供的服务必须一直处于可用的状态,对于用户的每个操做请求老是可以在有限的时间内返回结果。这里的重点是"有限时间内"和"返回结果"。
"有限时间内"是指,对于用户的一个操做请求,系统必须可以在指定的时间内返回对 应的处理结果,若是超过了这个时间范围,那么系统就被认为是不可用的。另外,"有限的时间内"是指系统设计之初就设计好的运行指标,一般不一样系统之间有很 大的不一样,不管如何,对于用户请求,系统必须存在一个合理的响应时间,不然用户便会对系统感到失望。
"返回结果"是可用性的另外一个很是重要的指标,它要求系统在完成对用户请求的处理后,返回一个正常的响应结果。正常的响应结果一般可以明确地反映出队请求的处理结果,即成功或失败,而不是一个让用户感到困惑的返回结果。
三、分区容错性
分区容错性约束了一个分布式系统具备以下特性:分布式系统在遇到任何网络分区故障的时候,仍然须要可以保证对外提供知足一致性和可用性的服务,除非是整个网络环境都发生了故障。
网络分区是指在分布式系统中,不一样的节点分布在不一样的子网络(机房或异地网络) 中,因为一些特殊的缘由致使这些子网络出现网络不连通的情况,但各个子网络的内部网络是正常的,从而致使整个系统的网络环境被切分红了若干个孤立的区域。 须要注意的是,组成一个分布式系统的每一个节点的加入与退出均可以看做是一个特殊的网络分区。
既然一个分布式系统没法同时知足一致性、可用性、分区容错性三个特色,因此咱们就须要抛弃同样:
用一张表格说明一下:
选 择 | 说 明 |
CA | 放弃分区容错性,增强一致性和可用性,其实就是传统的单机数据库的选择 |
AP | 放弃一致性(这里说的一致性是强一致性),追求分区容错性和可用性,这是不少分布式系统设计时的选择,例如不少NoSQL系统就是如此 |
CP | 放弃可用性,追求一致性和分区容错性,基本不会选择,网络问题会直接让整个系统不可用 |
须要明确的一点是,对于一个分布式系统而言,分区容错性是一个最基本的要求。由于 既然是一个分布式系统,那么分布式系统中的组件必然须要被部署到不一样的节点,不然也就无所谓分布式系统了,所以必然出现子网络。而对于分布式系统而言,网 络问题又是一个一定会出现的异常状况,所以分区容错性也就成为了一个分布式系统必然须要面对和解决的问题。所以系统架构师每每须要把精力花在如何根据业务 特色在C(一致性)和A(可用性)之间寻求平衡。
BASE理论
BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的缩写。BASE理论是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结, 是基于CAP定理逐步演化而来的。BASE理论的核心思想是:即便没法作到强一致性,但每一个应用均可以根据自身业务特色,采用适当的方式来使系统达到最终一致性。接下来看一下BASE中的三要素:
一、基本可用
基本可用是指分布式系统在出现不可预知故障的时候,容许损失部分可用性----注意,这毫不等价于系统不可用。好比:
(1)响应时间上的损失。正常状况下,一个在线搜索引擎须要在0.5秒以内返回给用户相应的查询结果,但因为出现故障,查询结果的响应时间增长了1~2秒
(2)系统功能上的损失:正常状况下,在一个电子商务网站上进行购物的时候,消费者几乎可以顺利完成每一笔订单,可是在一些节日大促购物高峰的时候,因为消费者的购物行为激增,为了保护购物系统的稳定性,部分消费者可能会被引导到一个降级页面
二、软状态
软状态指容许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的总体可用性,即容许系统在不一样节点的数据副本之间进行数据同步的过程存在延时
三、最终一致性
最终一致性强调的是全部的数据副本,在通过一段时间的同步以后,最终都可以达到一个一致的状态。所以,最终一致性的本质是须要系统保证最终数据可以达到一致,而不须要实时保证系统数据的强一致性。
总的来讲,BASE理论面向的是大型高可用可扩展的分布式系统,和传统的事物ACID特性是相反的,它彻底不一样于ACID的强一致性模型,而是经过牺牲强一致性来得到可用性,并容许数据在一段时间内是不一致的,但最终达到一致状态。但同时,在实际的分布式场景中,不一样业务单元和组件对数据一致性的要求是不一样的,所以在具体的分布式系统架构设计过程当中,ACID特性和BASE理论每每又会结合在一块儿。
基于消息中间件的分布式事务
一、A系统向消息中间件发送一条预备消息
二、消息中间件保存预备消息并返回成功
三、A执行本地事务
四、A发送提交消息给消息中间件
经过以上4步完成了一个消息事务。对于以上的4个步骤,每一个步骤均可能产生错误,下面一一分析:
基于消息中间件的两阶段提交每每用在高并发场景下,将一个分布式事务拆成一个消息事务(A系统的本地操做+发消息)+B系统的本地操做,其中B系统的操做由消息驱动,只要消息事务成功,那么A操做必定成功,消息也必定发出来了,这时候B会收到消息去执行本地操做,若是本地操做失败,消息会重投,直到B操做成功,这样就变相地实现了A与B的分布式事务。