基于本地消息表的事务补偿中间件 tx-queue

2021-02-05 17:58:04 +08:00
 Caesar123
目前支持 Oracle 、MySQL
https://github.com/yxz1025/tx-queue
1164 次点击
所在节点    程序员
6 条回复
mmdsun
2021-02-06 13:26:54 +08:00
404 ?
lewis89
2021-02-06 21:55:04 +08:00
本地消息表? 之前用这个方案被面试官吐槽了..
因为用消息队列本身就是因为本地事务太大,可能导入写入压力大,而把写入压力交个消息中间件,
然后通过消息来维护数据的最终一致性
Caesar123
2021-02-07 08:48:44 +08:00
@lewis89 本地事务尽量需要精简,而且加了这个整个事务不会拉太长,实际生产环境你可以压测试试看
Caesar123
2021-02-07 08:49:08 +08:00
@mmdsun 打不开?
lewis89
2021-02-07 09:03:51 +08:00
@Caesar123 #3 是的,我有测试过,本地消息表 可靠性好,加一个消息的写入并不会增加太大的事务压力,而且可靠性比 使用预提交的消息队列 要简单的多,麻烦的是 如果你做了水平拆分,消息如果是落地对应的分库那么本地事务就好说,如果消息统一落地一个统一的库 那么就是 XA 事务 做起来更复杂,如果消息有全局顺序依赖 提取多个分库的本地消息表就不太好做.. 当然一般不会有业务有全局消息依赖,都是局部顺序依赖

如果只是提交给消息队列,通过预提交 由消息队列中间件来询问你本地事务是否提交 是一个比较简易的方案,消息顺序性其实是消息中间件来保证了.. 应用层只要考虑分布式锁来保证消息的投递顺序..
Caesar123
2021-02-07 13:18:10 +08:00
@lewis89 消息队列这种方案就是对于第三方依赖性太强了,比如消息丢失,消息是否投递成功等等,tx-queue 这种就是先将消息写入本地表,然后通过线程分发进行进行消息投递,这种消息的存储是和你本地事务绑定在一起的,这种就属于轻量级的侵入了,不过要看场景,强事务的一致性不太适合,比如库存扣减等等

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/751634

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX