01、分布式事务 实战 - 什么是分布式事务?

1. 什么是分布式事务?介绍这个之前,先来了解一下这几个问题**

1、 什么是事务?
2、 什么是本地事务?
3、 什么是分布式?
4、 什么是分布式事务?

2. 什么是事务?

完成某件事情,可能有多个参与者需要执行多个步骤,最终多个步骤要么全部成功,要么全部失败。

举个例子:微信上A给B转账100元,A账户减少100,B账户增加100,这就是一个事务,这个操作中要么都成功,要么都失败。

事务的场景有很多,参与者也是多种多样

1、 用户注册成功发送邮件,包含2个操作:db中插入用户信息,给用户发送邮件,主要的2个参与者:db、邮件服务器;
2、 使用支付宝充值话费,包含2个操作:支付宝账户资金减少,手机余额增加,主要的2个参与者:支付宝账户、手机号服务商账户;

事务的参与者是多种多样的,不过本文我们主要以db中的事务来做说明。

3. 什么是本地事务?

本地事务,通俗点理解:即事务中所有操作发生在同一个数据库中的情况。

比如A给B转账,A和B的账户位于同一个数据库中。

通常我们用的都是关系型数据库,比如:MySQL、Oracle、SQL Server,这些数据库默认情况,这些db已经实现了事务的功能,即在一个db中执行一个事务操作,db本身就可以确保这个事务的正确性,而不需要我们自己去考虑如何确保事务的正确性。

4. 数据库事务的4大特性

4.1. 一致性(Consistency)

事务操作之后的结果和期望的结果是一致的,A给B转账100,事务结束之后,看到A的账户应该减少100,B的账户应该增加100,不会出现其他情况

4.2. 原子性(Atomicity)

事务的整个过程如原子操作一样,最终要么全部成功,或者全部失败,这个原子性是从最终结果来看的,从最终结果来看这个过程是不可分割的。

4.3. 隔离性(Isolation)

一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

4.4. 持久性(Durability)

一个事务一旦提交,他对数据库中数据的改变就应该是永久性的。当事务提交之后,数据会持久化到硬盘,修改是永久性的。

5. 什么是分布式?

完成某件事情有多个参与者,多个参与者分布在不同的机器中,这些机器之间通过网络或者其他方式进行通讯。

比如使用工行卡给支付宝充值,工行卡的账户位于工商银行的db中,而支付宝账户位于支付宝的db中,2个db位于不同的地方。

6. 什么是分布式事务?

分布式、事务这2个概念大家都理解了,那么分布式事务很容易理解了:事务的多个参与者分布在不同的地方。

单个db中我们很容易确保事务的正确性,但是当事务的参与者位于多个db中的时候,如何确保事务的正确性呢?

比如:A给B转账,A位于DB1中,B位于DB2中

step1.通过网络,给DB1发送指令:给A账户减少100 

step2.通过网络,给DB2发送指令:给B账户增加100

step1成功之后,执行step2的时,网络出现故障,导致step2执行失败,最终:A减少了100,B却没有增加100,最终的结果和期望的结果不一致,导致了事务的失败。

在介绍分布式事务的解决方案之前,我们需要先了解另外2个概念:CAP和Base理论,这2个理论为分布式事务的解决提供了依据。