Algorithm:每周至少做一个 leetcode 的算法题
1 | public boolean isValidSudoku(char[][] board) { |
Review:阅读并点评至少一篇英文技术文章
Seata是一个分布式事务解决框架,在传统的单数据库系统演变为微服务多数据库系统时,由于一个业务的调用链可能涉及到多个微服务系统,从而对多个数据库的数据CURD时,一旦出现异常等原因导致需要数据rollback,这时候,我们就需要对每一个开启了transaction进行rollback。
当调用链中涉及的数据库数量很少的时候,这样逐个手动rollback当然也没什么问题,但是一旦数量多的时候,这样必然导致大量的代码侵入,而seata分布式事务框架则解决了这个问题。
Seata分为3个模块:
- Transaction Coordinator(TC):维护全局事务状态,并驱动全局事务的提交和回滚
- Transaction Manager(TM):定义全局事务的作用域,管理全局事务的生命周期,全局事务开启、提交、回滚的管理者
- Resource Manager(RM):管理资源本地分支事务的工作,并把分支事务注册至TC的全局事务中,在TC驱动全局事务的提交、回滚等时,对全局事务关联下的分支事务做出相应的操作
Seata具体流程:
- TM要求TC开启一个新的全局事务,TC创建全局事务的XID
- XID跟着微服务执行链流动
- RM根据XID把本地分支事务注册关联到TC的全局事务中
- TM根据XID要求TC提交或者回滚全局事务
- TC根据XID找到所有本地分支事务,驱动RM对事务进行提交或者回滚
Seata使用思考:
- 减少了分布式事务实现的代码侵入
- 使用全局事务并且生成全局事务XID关联每一个本地事务,使事务间具有关联性
Tip:学习至少一个技术技巧
Share:分享一篇有观点和思考的技术文章
文中对Repository和包结构的观点和思考,我觉得非常有意义,很多时候,我们对Repository的编写以及包结构的设计往往都是按照习惯思维来做,却对其合理性缺乏一个思考。