分布式事务从0到1-了解TX-LCN原理

本节课讲解的主要内容是TX-LCN分布式事务的原理介绍。

TX-LCN的核心控制流程

协调控制流程
image

各种事务模式的原理

id name balacne
1 A 200
2 B 100

TCC业务处理

Try Confirm Cancle 如何实现A转账给B的呢?

//尝试方法
function try(){
    //记录日志
    todo save A 转出了 100 元 
    todo save B 转入了 100 元 
    //执行转账
    update amount set balacne = balacne-100 where id = 1
    update amount set balacne = balacne+100 where id = 2
}
//确认方法
function confirm(){
    //清理日志
    clean save A 转出了 100 元 
    clean save B 转出了 100 元 
}

//取消方法
function cancle(){
    //加载日志
    load log A
    load log B

     //退钱
    update amount set balacne = balacne+100 where id = 1
    update amount set balacne = balacne-100 where id = 2    
}

特点:

  • 该模式对代码的嵌入性高,要求每个业务需要写三种步骤的操作。
  • 该模式对有无本地事务控制都可以支持使用面广。
  • 数据一致性控制几乎完全由开发者控制,对业务开发难度要求高。

TXC逆向SQL

image

特点:

  • 该模式同样对代码的嵌入性低。
  • 该模式仅限于对支持SQL方式的模块支持。
  • 该模式由于每次执行SQL之前需要先查询影响数据,因此相比LCN模式消耗资源与时间要多。
  • 该模式不会占用数据库的连接资源,但中间状态可见

LCN代理连接

image

特点:

  • 该模式对代码的嵌入性为低。
  • 该模式仅限于本地存在连接对象且可通过连接对象控制事务的模块。
  • 该模式下的事务提交与回滚是由本地事务方控制,对于数据一致性上有较高的保障。
  • 该模式缺陷在于代理的连接需要随事务发起方一共释放连接,增加了连接占用的时间。

负载问题

负载情况下的事务控制,对于无状态的TXC TCC来说是不需要关心事务的。但是对LCN来说需要考虑负载调用同一个模块时若模块不同会可能触发锁的问题。

举例:

目前TX-LCN支持的事务种类有三种,其中LCN模式是会占用资源,详情见LCN模式原理。

若存在这样的请求链,A模块先调用了B模块的one方法,然后在调用了two方法,如下所示:

A ->B.one(); A ->B.two(); 假如one与two方法的业务都是在修改同一条数据,假如两个方法的id相同,伪代码如下:

void one(id){
   execute => update demo set state = 1 where id = {id} ;
}

void two(id){
   execute => update demo set state = 2 where id = {id} ;
}

若B模块做了集群存在B1、B2两个模块。那么就可能出现A分别调用了B1 B2模块,如下:

A ->B1.one(); A ->B2.two(); 在这样的情况下业务方将在LCN下会因为资源占用而导致执行失败而回滚事务。为了支持这样的场景,框架提供了重写了rpc的负载模式。

控制在同一次事务下同一个被负载的模块被重复调用时将只会请求到第一次被选中的模块。

保障机制与补偿

超时机制

当业务模块在接受到事务请求,并完成响应以后会自动加入定时任务,等待TM通知,若TM迟迟不通知则触发TC主动请求的状况,若TC没有请求到数据就记录补偿(回滚事务)。

TM清理机制

TM全局都在记录着事务的状态消息,只有当TM确认完全都通知到了TC模块才能清楚事务信息,不然将永久保存。

一些特殊的情况介绍:
1、通知事务的时候通知不到的情况。(需要超时机制,超时机制有分为两种可能 1、联系不上TM不清楚事务状态,2提前询问了TM,业务还没有确认最终状态)
2、通知事务组执行时没有响应。(1不清楚有没有执行完业务,2不清楚有没有收到消息)
3、若业务模块死掉了,TM的日志在没有全部确认清楚之前,是不能清理事务数据,TM清理数据需要全部都确认OK方可清理。

由上述情况可见,需要补偿的情况有
1、上面的情况1中对联系不上TM的情况需要记录补偿记录。
2、上面的情况2、3中描述的场景可能会存在业务模块在没有接受到TM消息的时候联系不上了,若是服务挂了,那么就得需要在下次服务启动的时候通过切面日志来与TM通讯确认状态,然后在执行业务。若是通讯出现了故障,那么会除非超时机制自动写补偿日志。

由于这样的情况的存在 若是服务挂了,那么就得需要在下次服务启动的时候通过切面日志来与TM通讯确认状态,然后在执行业务
所以只能在切面进入是记录数据,当出现时可通过切面记录来触发业务,然后再补偿事务。

补偿出现的处理机制

1、自动补偿 (需要开启)
2、手动补偿 (自行处理删除补偿记录即可)

image

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

推荐阅读更多精彩内容

  • 1、事务简介 ​ 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(u...
    逗逼程序员阅读 679评论 0 1
  • 爱是顺其自然,是你来我往,不是试探、不是暧昧、也不是胆战心惊如履薄冰般的小心翼翼,两个人确定心意,再平常的话都觉得...
    冷冻冷冻冻阅读 155评论 0 0
  • 7月2号: 早上起床相当早,相比学校而言是早多了。早点也十分简单,吃了两根油条,喝了一碗面条。之后我陪着哥们儿张某...
    唯日月与我同孤阅读 156评论 0 0
  • 今天 突然很想很想我远在北方求学的一位友人 所以想要写下下面的几行字 送给她 #原来英雄是孤独# 我要你 孤独却勇...
    WANGRUIXUE阅读 224评论 0 0