专栏风格介绍
由于本人除了是搞技术的程序猿之外,同时也是个小说迷,喜欢看一些流行无脑的小说。现突发奇想将小说情节引入到技术博客中,希望大家能在有趣的氛围中学习到技术知识点,并且扩展技术的深度,轻轻松松掌握一门技术,这是笔者的一种梦想生活。
情景剧情加载
关于灵境的说法,历朝历代的名人雅士众说纷纭,诗中记载:
“灵境不可状,鬼工谅难求。”
话说元始天尊于副本中晋升主宰境界,意气风发、气冲斗牛,准备找老梆子讨回降魔杵,并给她一顿教训,让她见识一下长短深浅。
但是被帮主傅青阳不屑地瞥了一眼,就你这种级别,一根手指就让你叫弟弟。你先回答我几个问题,我可以考虑借你一些道具。
元始天尊内心吐槽了一下,你不也是被白虎卫元帅打的叫弟弟,然后面露恭谨地说:老大请提问,小弟一定知无不言言无不尽。
分布式事务的起因和理论知识
傅青阳:有了解过事务吗?
元始:我知道,事务有 4 个特性:ACID,就是原子性、一致性、隔离性、持久性。
傅青阳:能讲一讲这 4 个特性吗?
元始:原子性就是一个事务的 SQL 语句要么全部成功,要么全部失败,不会出现部分成功部分失败;一致性就是 SQL 语句修改的前后必须是一致性的,比如修改 name=张三
,不会变成 name=李四
;隔离性就是两个同时执行的事务修改了同一行数据,互相之间不会受到影响;持久性就是事务提交之后会持久化到磁盘,不会丢失。
元始内心话:这块的原理还不是手到擒来。
傅青阳:有了解过分布式事务吗?
元始:我知道,单体系统拆分为多个微服务之后,由于一个完整逻辑的业务操作需要在多个服务协作才能完成,并且每个服务都是独立数据库,这种需要多个关系型数据库,或者需要 NoSQL 型的数据库同时完成的事务,就是分布式事务。举个例子,比如下订单这个业务操作需要先调用用户服务扣减金额,然后调用订单服务创建订单,接着订单服务继续调用仓储服务扣减库存等等,这种就是分布式事务的应用场景了。
傅青阳:那分布式事务的解决方案呢?
元始:我知道,一般是 2PC (两阶段提交)的协议,分为prepare(资源准备)阶段和 commit/rollback (提交完成)阶段。目前使用比较多的都是 2PC,当然也有 3PC 但是具体的落地实现比较少。
傅青阳:有了解过分布式事务的实现框架吗?
元始:了解过 Seata。
傅青阳:讲一讲 Seata 默认的AT模式的原理。
元始:额,好像也是使用了两阶段提交的协议,阶段一就直接提交 SQL,然后生成执行前后的数据镜像,阶段二就是提交事务,然后出现异常就回滚事务。
傅青阳:那什么全局锁、本地锁、读隔离、写隔离知道吗?
元始:额…
傅青阳:滚回去修炼吧。