使用saga管理事务

一、事务难题

事务是每个企业级应用的基本要素,如何实现跨多个的服务的是事务一直是行业的一个炙热话题也是难题之一。

小马觉得写得很赞

二、使用saga管理事务

saga是一种在微服务架构中维护数据一致性的机制,它可以避免分布式事务所带来的问题。saga由一连串的本地事务组成,每一个本地事务负责更新它所在服务的私有数据库,这些操作仍旧依赖于我们所熟悉的ACID事务框架和函数库。saga通过使用异步消息来协调一系列本地事务,从而维护多个服务之间的数据一致性。

小马之前分析过分布式事务的集中解决方案(点这里),其中的补偿事务TCC就是和saga差不多的原理。Saga模式是SEATA提供的长事务解决方案,在Saga模式中,业务流程中每个参与者都提交本地事务,当出现某一个参与者失败则补偿前面已经成功的参与者,一阶段正向服务和二阶段补偿服务都由业务开发实现。

小马理解为,tcc需要先操作锁资源如果失败回滚释放资源;而saga先用着如果失败再作补偿回去。

三、saga的协调模式

saga的实现包含协调saga步骤的逻辑。当通过系统命令启动saga时,协调逻辑必须选择并通知第一个saga参与方执行本地事务。一旦事务完成,saga协调选择并调用下一个saga参与方。这个过程一直持续到saga执行完成所有步骤。如果任何本地事务失败,则saga必须以相反的顺序执行补偿事务(已执行完的事务越长回滚的链条越长)。以下几种不同的方法可以用来构建saga的协调逻辑。

协同式:把saga的决策和执行顺序逻辑分布在saga每一个参与方中,它们通过交换事件的方式来进行沟通。

编排式:把saga的决策和执行顺序逻辑集中在一个saga编排器中。saga编排器发出命令消息给各个saga参与方,指示这些参与方服务完成具体操作(本地事务)。

以下是两个模式的图解,来自《微服务架构设计模式》,书内也有详细的步骤说明,有兴趣的可以自行翻阅,小马就不在这赘述了。


协同式


编排式

小马来以通俗的语言分享下自己的理解。从图示我们可以很容易地看出两种模式最大的区别在于,协同式是参与方之间自己协调的通信(失败/成功消息),而编排式都是编排器在统一作消息的协调,可以把编排器视为一个状态机。编排器依赖于各参与方,参与方不依赖于编排器。而协同式会存在循环依赖的问题。因此,编排式被书中作者所推荐。


四、没有隔离性

使用saga的挑战在于它们缺乏CAID事务的隔离属性。这是因为一旦事务提交,每个saga的本地事务所作的更新都会立即被其他sagas看到。你可以认为saga只满足了事务的三个属性。

小马理解为其中之一就是使用逻辑上的状态锁来解决隔离性问题。看起来似乎相对麻烦,但技术没有“银弹”不是么?


微微一笑

参考文献:

《微服务设计模式》

微服务场景下的数据一致性解决方案


Saga分布式事务解决方案与实践

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