分布式事务处理基本原理

事务是有一系列对系统中数据进行访问与更新的操作组成的一个基本的程序逻辑执行单元。引入事务的概念有两个目的,第一,事务对多个并发访问的应用程序进行隔离,防止彼此干扰,第二,事务为数据库操作序列提供了一个失败回复的方法,同时如果数据库处于异常状态,事务提供了保持一致性的方法。

事务具有最基本的四个特性:原子性(Atomicity),一致性(consistency),隔离性(Isolation)和持久性(Durability)。简称为ACID事务特性。

原子性:

事务必须是一个原子的执行序列,即事务包含的一系列操作执行过程只有两个结果:全部执行成功或全部失败,若有任何一项任务失败,则整个事务都被撤销,并回滚到事务执行之前的系统状态。

一致性:

事务的执行过程不可以破坏系统的一致性,事务执行之前和执行之后,系统都必须处于一致性状态,事务的执行会使系统从一个一致性状态跳转的另一个状态,如果事务在执行过程发生错误导致只有一部分任务被写入系统,那事务被重新执行时就会重新执行已写入数据库的操作,导致系统不一致。

隔离性

不同事务的执行过程不能相互干扰,每个事务都有各自独立的数据空间,在标准SQL规范中,有四个事务隔离级别:

1)未授权读取:事务在对数据修改过程中,允许脏读,即允许另外的事务在修改过程访问数据,造成修改前后读取数据不一致

2)授权读取:事务在修改过程不允许其他事务进行读,其他事务只能在修改读取数据的事务执行过程结束后进行读取,但事务执行过程也会允许不可重复读取:例如A将i从1修改到2,B将i从2修改到3,事务C读取i时可以读取到2或3。

3)可重复读取:保证一个事务在读取过程数据永远一致,但会出现幻影数据,即事务被重复执行多次,每次的数据读取结果不同。

4)串行化:所有事务都被串行执行。

为了保证数据库并发性能,一般都支持授权读取,可能出现并发问题时用乐观锁或悲观锁进行事务控制。

持久性:事务提交之后对数据库的影响是永久的,一旦数据库挂掉,执行过的事务结果可以被恢复。

CAP定理:

一个分布式系统不可能同时满足一致性(Consistency),可用性(Availability)和分区容错性(Partition tolerance),最多只能满足两个。

1)一致性:数据多个副本内容是否保持一致。不同副本一般保存在不同节点中。如果对其中一个副本更改,所有用户可获得最新的数据,则系统保持的是强一致性,如果系统中的副本在一段时间后可以达到一致,则系统满足的是最终一致性

2)可用性:系统的服务必须一直处于可用状态,对用户的每一个请求总是能在一段时间内返回结果。一段时间是系统设计之初就指定好的指标,也可称为响应时间。

3)分区容错性:分布式系统在遇到任何网络分区故障时,仍然需要能够对外保持一致性和可用性的服务,除非整个网络都发生了故障。网络分区是指不同的节点在不同的网络间,网络之间无法联通,出现故障,分布式系统被划分成了孤立的区域。

下面是CAP定理的应用:

放弃CAP定理

结果

放弃C

放弃P就是将所有数据都放置在一个节点上,这就放弃了数据的可扩展性。

放弃A

放弃可用性是指系统在发生故障时,收到影响的服务需要等待一段时间,在这段时间内系统是不可用的。

放弃P

放弃一致性是指放弃系统强一致性采用最终一致性

原文地址:https://www.cnblogs.com/lichongjie/p/7131675.html