分布式事务理论基础

127 阅读6分钟

这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战

前言

分布式事务.png

事务分为本地事务和分布式事务,本地事务大家都比较熟悉我们通常说的Spring某个应用的事务主要指的是本地事务,比如几个操作放在一起通过本地事务保证他的原子性,一致性。 分布式事务主要是随着互联网的发展单体的应用架构已经满足不了互联网的高速发展了,微服务的发展并发编程带来高速的同时也带来了一系列的挑战,也衍生出不同的分布式理论。

本地事务

大多数场景下,我们的应用都只需要操作单一的数据库,这种情况下的事务称之为本地事务(Local Transaction)。本地事务的ACID特性是数据库直接提供支持。 image.png

1、事务定义

事务(Transaction)是操作数据库中某个数据项的一个程序执行单元(unit)。 事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。

2. 事务的4个特性

2.1、Atomic原子性

事务必须是一个原子的操作序列单元,事务中包含的各项操作在一次执行过程中,要么全部执行成功,要么全部不执行,任何一项失败,整个事务回滚,只有全部都执行成功,整个事务才算成功。

2.2、Consistency一致性

事务的执行不能破坏数据库数据的完整性和一致性,事务在执行之前和之后,数据库都必须处于一致性状态。

2.3、Isolation隔离性

在并发环境中,并发的事务是相互隔离的,一个事务的执行不能被其他事务干扰。即不同的事务并发操纵相同的数据时,每个事务都有各自完整的数据空间,即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能相互干扰。

SQL中的4个事务隔离级别:

(1)读未提交 (2)读已提交 (3)可重复读 (4)串行化

2.4、Durability持久性

持久性(durability):持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中对应数据的状态变更就应该是永久性的。

3. MySQL的本地事务

3.1. MySQL数据库的事务实现原理

InnoDB 是通过 日志和锁 来保证的事务的 ACID特性:
(1)通过数据库锁的机制,保障事务的隔离性
(2)通过 Redo Log(重做日志)来,保障事务的持久性
(3)通过 Undo Log (撤销日志)来,保障事务的原子性
(4)通过 Undo Log (撤销日志)来,保障事务的一致性

3.2. Undo Log 如何保障事务的原子性呢?

在操作任何数据之前,首先将数据备份到一个地方(这个存储数据备份的地方称为 Undo Log),然后进行数据的修改。如果出现了错误或者用户执行了 Rollback 语句,系统可以利用 Undo Log 中的备份将数据恢复到事务开始之前的状态。

3.3 Redo Log如何保障事务的持久性呢?

Redo Log 记录的是新数据的备份(和 Undo Log 相反)。在事务提交前,只要将 Redo Log 持久化即可,不需要将数据持久化。当系统崩溃时,虽然数据没有持久化,但是 Redo Log 已经持久化。系统可以根据 Redo Log 的内容,将所有数据恢复到崩溃之前的状态。

分布式事务

分布式事务由来

1、存储端的多样性

本地事务所有的数据都落在同一个DB中,但是分布式场景下数据会落到不同的DB或者缓存,或者MQ中多种存储的场景。

2、事务链路越来越长

这一点也容易理解,比如电商的购物的场景,从用户在活动页面浏览,到下单到购物车,支付库存扣减, 运输物流信息更新一系列数据来支撑。

什么是分布式事务?

对于分布式系统而言,需要保证分布式系统中的数据一致性,保证数据在子系统中始终保持一致,避免业务出现问题。分布式系统中对数要么一起成功,要么一起失败,必须是一个整体性的事务 典型的分布式事务场景:

1. 跨库事务

2. 分库分表

3. 微服务化

分布式理论基础

CAP定理

CAP定理是由加州大学伯克利分校Eric Brewer教授提出来的,他指出WEB服务无法同时满足一下3个属性:

  • 一致性(Consistency) : 客户端知道一系列的操作都会同时发生(生效)
  • 可用性(Availability) : 每个操作都必须以可预期的响应结束
  • 分区容错性(Partition tolerance) : 即使出现单个组件无法可用,操作依然可以完成

具体地讲在分布式系统中,一个Web应用至多只能同时支持上面的两个属性。因此,设计人员必须在一致性与可用性之间做出选择。

2000年7月Eric Brewer教授仅仅提出来的是一个猜想,2年后,麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP理论,并且而一个分布式系统最多只能满足CAP中的2项。之后,CAP理论正式成为分布式计算领域的公认定理。

image.png CAP的一致性、可用性、分区容错性 具体如下:

1、一致性

数据一致性指“all nodes see the same data at the same time”,即更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致,不能存在中间状态。

分布式环境中,一致性是指多个副本之间能否保持一致的特性。在一致性的需求下,当一个系统在数据一致的状态下执行更新操作后,应该保证系统的数据仍然处理一致的状态。

2、可用性

系统提供的服务必须一直处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果

3、分区容错性

即分布式系统在遇到任何网络分区故障时,仍然需要能够保证对外提供满足一致性和可用性的服务,除非是整个网络环境都发生了故障。

参考

MySQL实战45讲