网易首页 > 网易号 > 正文 申请入驻

在数据库分库分表之后,你该如何解决事务问题?

0
分享至

  一、概述

  随着时间和业务的发展,数据库中表的数据量会越来越大,相应地,数据操作,增删改查的开销也会越来越大。因此,把其中一些大表进行拆分到多个数据库中的多张表中。

  本篇文章是基于非事务消息的异步确保的方式来完成分库分表中的事务问题。

  二、需要解决问题

  2.1 原有事务

  由于分库分表之后,新表在另外一个数据库中,如何保证主库和分库的事务性是必须要解决的问题。

  解决办法:通过在主库中创建一个流水表,把操作数据库的逻辑映射为一条流水记录。当整个大事务执行完毕后(流水被插入到流水表),然后通过其他方式来执行这段流水,保证最终一致性。

  2.2 流水

  所谓流水,可以理解为一条事务消息

  上面通过在数据库中创建一张流水表,使用一条流水记录代表一个业务处理逻辑,因此,一个流水一定是能最终正确执行的.因此,当把一段业务代码提取流水中必须要考虑到:

  • 流水延迟处理性。流水不是实时处理的,而是通过流水执行器来异步执行的。因此,如果在原有逻辑中,需要特别注意后续流程对该流水是不是有实时依赖性(例如后续业务逻辑中会使用流水结果来做一些计算等)。
  • 流水处理无序性。保证即使后生成的流水先执行,也不能出现问题。
  • 流水最终成功性。对每条插入的流水,该条流水一定要保证能执行成功

  因此,提取流水的时候:

  • 流水处理越简单越好
  • 流失处理依赖越少越好
  • 提取的流水在该业务逻辑中无实时性依赖

  2.3 流水处理器

  流水处理器既要保证流水处理尽可能处理快,又能保证流水最终能执行成功。

  设想一个场景:当出现某一条流水处理失败,如果流失执行器要等当前流水执行成功才继续往后执行,那么会影响后续流水的执行,更严重的是一直卡在当条记录,导致整个系统出现问题

  因此,流水执行器中设置2个任务:

  • 第一个任务,流水处理任务,以最快的速度执行流水,如果流水处理失败了,也不影响后面流水处理
  • 第二个任务,流水校验任务,这个任务就是顺序检查流水记录,保证所有流水都执行成功,如果失败,进行重试,多次重试失败以后发出告警以让人工介入处理。

  2.4 流水处理完成

  因为流水表是放在原数据库中,而流水处理完成后是操作分库,如果分库操作完成去更新老表流水消息,那么又是跨库事务,如何保证流水状态的更新和分库也是在一个事务的?

  解决办法是:在分库中创建一个流水表,当流失处理完成以后,不是去更新老表状态,而是插入分库流水表中、

  这样做的好处:

  • 一般会对流水做唯一索引,那么如果流水重复多次执行的时候,插入分库流水表的时候肯定由于唯一索引检测不通过,整个事务就会回滚(当然也可以在处理流水事前应该再做一下幂等性判断)
  • 这样通过判断主库流水是否在分库中就能判断一条流水是否执行完毕

  三、流水处理器基本框架

  流水处理器其实不包含任何业务相关的处理逻辑,核心功能就是:

  • 通知业务接入方何时处理什么样的流水
  • 检验流水执行的成功

  注:流水执行器并不知道该流水表示什么逻辑,具体需要业务系统去识别后去执行相对应业务逻辑。

  3.1 流水执行任务

  流水处理调度任务就是通过扫描待处理的流水,然后通知业务系统该执行哪一条流水。

  示意图如下:

  3.2 流水校验任务

  流水校验任务就是要比较主库和分库中的流水记录,对执行未成功的流水通知业务系统进行重新处理,如果多次重试失败则发出告警。

  流程示意图:

  四、为什么不用事务消息

  由于是既有项目进行改造(本人从事互联网金融,所以是绝对不容忍有任何消息丢失或者消息处理失败),不使用事务消息有1个原因

  • 需要额外引入消息队列,增加系统的复杂度,而且也需要额外的逻辑保证和消息队列通讯失败的时候处理
  • 其实1不算是主要原因,而是因为事务消息需要手动的commit和rollback(使用数据库不需要),那么问题来了,spring中事务是有传递性的,那我们事务消息何时提交又是个大问题,例如 A.a()本来就是一个事务, 但是另外一个事务B.b()中又调用了A.a() 那事务消息提交是放在A.a()还是B.b()中呢?

  写在最后

  欢迎大家关注我的公众号【风平浪静如码】,海量Java相关文章,学习资料都会在里面更新,整理的资料也会放在里面。

  觉得写的还不错的就点个赞,加个关注呗!点关注,不迷路,持续更新!!!

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
法国名将怒斥WTT声明:不接受!我们正在失去偶像 必须真正改变

法国名将怒斥WTT声明:不接受!我们正在失去偶像 必须真正改变

念洲
2024-12-29 08:06:42
“爆火”之后是“暴雷”?业内人士:100%椰子水,90%都有添加剂!

“爆火”之后是“暴雷”?业内人士:100%椰子水,90%都有添加剂!

食品内参
2024-12-29 10:10:00
金正恩抗乌援俄付出惨重代价,朝鲜特种部队被现代化战争打垮

金正恩抗乌援俄付出惨重代价,朝鲜特种部队被现代化战争打垮

环球热点快评
2024-12-28 11:58:17
伊万卡被曝和连环性侵者有联系,让对方寻找豪宅,1.8亿达成所愿

伊万卡被曝和连环性侵者有联系,让对方寻找豪宅,1.8亿达成所愿

译言
2024-12-29 09:41:38
马斯克点评中方六代机曝光,批评语气前所未有!

马斯克点评中方六代机曝光,批评语气前所未有!

小企鹅侃世界
2024-12-28 15:29:22
五菱蛋蛋车即将上市,花1.28万元买个“蛋”,是一种怎样的体验

五菱蛋蛋车即将上市,花1.28万元买个“蛋”,是一种怎样的体验

猫小狸同学
2024-12-28 16:40:30
摊大事!大爷拉横幅讨要工程款被拘10天罚500元,有理变成没理

摊大事!大爷拉横幅讨要工程款被拘10天罚500元,有理变成没理

小淇言说
2024-12-29 10:59:28
这简直是侮辱大陆14亿人的智商:台湾说,这张照片不是摆拍是真的

这简直是侮辱大陆14亿人的智商:台湾说,这张照片不是摆拍是真的

蜉蝣说
2024-12-29 09:56:42
南海决战凌晨打响!中方火速支援霸气开火,专家:该来的还是来了

南海决战凌晨打响!中方火速支援霸气开火,专家:该来的还是来了

听风者说
2024-12-28 22:38:07
韩国飞机降落爆炸:现场画面太可怕,原因被曝,28人死亡3人获救

韩国飞机降落爆炸:现场画面太可怕,原因被曝,28人死亡3人获救

影像温度
2024-12-29 10:39:43
魏德尔:俄乌冲突最终目的不是让乌受损,而是为了拖垮整个欧洲

魏德尔:俄乌冲突最终目的不是让乌受损,而是为了拖垮整个欧洲

风华讲史
2024-12-29 08:46:59
突传消息!知名女演员在家中去世

突传消息!知名女演员在家中去世

鲁中晨报
2024-12-29 12:04:14
不惜得罪中方,32国修改对华称呼,新西兰总理:中国必须遵守公约

不惜得罪中方,32国修改对华称呼,新西兰总理:中国必须遵守公约

星光历史
2024-12-28 11:21:42
美国招架不住!中国科技狂飙!七道硬菜齐上桌,美国五角大楼懵了

美国招架不住!中国科技狂飙!七道硬菜齐上桌,美国五角大楼懵了

魏家东
2024-12-29 08:12:29
终于封海!正式交锋已打响,解放军火速上场,国防部不再口头警告

终于封海!正式交锋已打响,解放军火速上场,国防部不再口头警告

现代小青青慕慕
2024-12-29 00:59:33
辉瑞前副总裁:故意设计mRNA新冠疫苗,用于降低人类生育能力

辉瑞前副总裁:故意设计mRNA新冠疫苗,用于降低人类生育能力

老佛爷Wu
2024-07-08 10:07:04
刘国梁不背锅!央视为樊振东出头,WTT发声:新规是专家制定的

刘国梁不背锅!央视为樊振东出头,WTT发声:新规是专家制定的

三十年莱斯特城球迷
2024-12-29 01:02:51
涨价了!冬天水果界的C位正在大量上市

涨价了!冬天水果界的C位正在大量上市

鲁中晨报
2024-12-28 18:44:08
“你永远可以相信”,一面旗帜高扬

“你永远可以相信”,一面旗帜高扬

汽车公社
2024-12-29 08:34:49
韩国客机坠机!几分钟就报道出来了:波音737撞向围墙燃起大火

韩国客机坠机!几分钟就报道出来了:波音737撞向围墙燃起大火

大风文字
2024-12-29 10:29:20
2024-12-29 14:32:49
程序员谷鸡泰
程序员谷鸡泰
爱分享,爱学习,从无到有!
88文章数 395关注度
往期回顾 全部

科技要闻

理想和问界今年卖爆,但明年竞争更激烈

头条要闻

石破茂:日本首相公邸被传"闹鬼" 我不是特别害怕

头条要闻

石破茂:日本首相公邸被传"闹鬼" 我不是特别害怕

体育要闻

被同一支球队裁掉5次 我还能继续打NBA吗

娱乐要闻

哭麻!赵露思好友发文,抢救、失语,还有隐情

财经要闻

什么情况?中小银行存款利率超7%

汽车要闻

“合”而不同 领克与极氪的向上一跃

态度原创

教育
本地
房产
时尚
公开课

教育要闻

惊!家长强行充值话费1000元,老师很是郁闷,最后通过工信部退还

本地新闻

好吃潮州|尝一口,这里的美食有点“潮”

房产要闻

细节拉满,迎战交付“大考”!这个安居热盘上大分!

羊绒专场|| 我衣橱里的核心单品不能没有它,连穿7年都舍不得换

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版