分布式事务的理论概述

分布式事务从理论到具体实现囊括的知识点很多,一篇文章塞满所有知识点是不可能的,本篇只包含分布式事务相关的主要理论及知识点,抛砖引玉。

分布式事务是什么

微服务架构下,一般一个微服务对应一个数据库(单服务多数据源,如果需要保证数据强一致性,可以使用中间件Atomikos),普通的数据库事务是针对单库下的多条sql同时保证执行成功或失败,而分布式事务是针对多库下的分支事务同时保证执行成功或失败。也就是分布式事务是保证系统中多个相关联的数据库的数据一致性。

分布式事务相关术语

事务的基本特性

ACID:A-原子性(Atomicity),即一个事务内的所有操作统一执行成功或失败;C-一致性(Consistency),即数据一致性;I-隔离性(Isolation),即并发事务下的互不干扰;D-持久性(Durability),即事务操作后的结果持久化。

分布式事务的理论基础

CAP:这是分布式事务的理论基础,C-一致性(Consistence),即数据一致性;A-可用性(Availability),即服务可用;P-分区容错性(Partition tolerance),即当服务访问出现问题时,保证系统整体使用正常。当系统分区的情况下,一般要求保证系统满足CP或AP;CP模型强调的是系统的一致性,在做系统设计时,需要优先考虑一致性;AP模型强调的是系统的可用性,在做系统设计时,需要优先考虑可用性。
BASE:这也是分布式事务的理论基础,在系统无法保证强一致性的情况下,可以根据此理论设计系统。BA- Basically Available(基本可用),即当系统发生故障时,允许损失部分可用性,保证核心可用;S-Soft state(软状态),即允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,比如允许数据副本同步的过程存在延时;E-Eventually Consistent(最终一致性),即系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。

事务一致性的3个级别

强一致性:要求写入数据后,下一次读取一定就是最新数据。
弱一致性:不能保证什么时候能读取到最新的值,只能保证某个时刻能达到数据一致。
最终一致性:弱一致性的升级版,系统保证在一定时间内达到数据一致。

事务对象

TC:事务协调者(Transaction Coordinator),维护全局和分支事务的状态,驱动全局事务提交或回滚。
TM:事务管理器(Transaction Manager),定义全局事务的范围:开始全局事务、提交或回滚全局事务。
RM:资源管理器(Resource Manager),管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

事务解决方案

2PC:二阶段提交协议(Two Phase Commitment Protocol),2PC将事务的提交过程分为准备阶段和提交阶段。

  • 准备阶段-查看RM是否能执行事务,可以则写redo/undo log,但不提交事务并返回成功;
  • 提交阶段-如果有RM在准备阶段返回失败,则所有RM回滚,否则所有分支事务正式提交完成。

3PC:三阶段提交协议(Three Phase Commitment Protocol),3PC将事务的提交过程分为准备阶段(CanCommit)、预提交阶段(PreCommit)和提交阶段(doCommit)。

  • 准备阶段-查看RM是否能执行事务;
  • 预提交阶段-TM发送预提交请求给RM,任一RM反馈无法执行或超时,则中断所有RM事务,等规定时间内没有收到TM的中断命令,则写redo/undo log;
  • 提交阶段-TM向RM发送提交事务请求,RM提交成功并返回完成,如果任一RM返回失败或超时,TM则发送中断请求,所有RM回滚。

事务模式

XA:XA是 X/Open 组织定义的分布式事务处理(DTP,Distributed Transaction Processing)标准。XA规范描述了全局的事务管理器与局部的资源管理器之间的接口,2PC和3PC都是基于XA规范衍生的分布式事务处理方案。XA规范需要数据库支持才能使用,比如mysql,分布式事务的回滚依靠分支事务的undo log。
AT:AT好像目前只有Seata中间件实现了,他模仿XA并作了一些改进,也不再依靠数据库去适配它,主要实现方式还是2PC。AT会自建一张UNDO_LOG Table,发生事务时,会自己解析sql,生成前、后镜像,组装后存入UNDO_LOG Table,等回滚时使用。AT还设计了全局锁,只有拿到全局锁才能提交本地事务。
TCC:TCC是通过侵入业务代码实现分布式事务的,T-尝试阶段(Try),资源检测和预留;C-确认阶段(Confirm),完成资源操作业务;C-取消阶段(Cancel),预留资源的释放。通过手动编写三个阶段的代码逻辑自定义实现分布式事务,不需要使用数据库事务,所以性能也好,TCC相当于一个设计模式。
Saga:特点是能将一个长事务拆分为多个短事务,短事务T1 ~ Tn,每个短事务对应一个补偿动作Cn。逐一执行短事务Ti,当Ti执行失败,有2种恢复方式,正向恢复-即重试Ti,反向恢复-执行C0 ~ Ci的补偿动作,逆向Tn短事务。

分布式事务中间件

常见的中间件有以下这些,不一一介绍了,去github和官网看看吧。
Atomikos:Atomikos - cloud-native transaction management for Java and REST
Seata:Seata 官网
Hmily:Dromara Hmily 官网

参考链接

Seata官网文档
CAP和BASE理论介绍
分布式事务之2PC和3PC_xiaomisolo的博客-CSDN博客
分布式事务XA、AT、TCC、SAGA - 腾讯云开发者社区
搞懂Seata分布式事务AT、TCC、SAGA、XA模式选型_知识浅谈的博客-CSDN博客

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,547评论 4 374
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,787评论 2 308
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,175评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,752评论 0 223
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,169评论 3 297
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,056评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,195评论 2 321
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,980评论 0 214
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,724评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,872评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,344评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,667评论 3 264
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,379评论 3 245
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,202评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,992评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,189评论 2 286
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,987评论 2 279

推荐阅读更多精彩内容