分布式事务
野生的程序员
这个作者很懒,什么都没留下…
展开
-
Seata源码解析7——事务协调者的启动(5)
####前言终于到了Server启动的最后一个组件,DefaultCoordinator了 。这是一个默认的事务协调者TC。DefaultCoordinator继承了很多个接口和抽象类,拥有非常大而全的能力。TCInboundHandler接口,里面定义了各种handler,主要用于处理事务协调过程中的各种请求。例如:全局事务开启的请求、全局事务提交的请求、全局事务回滚的请求。Trans...原创 2020-01-18 20:02:22 · 1820 阅读 · 0 评论 -
Seata源码解析6——事务协调者的启动(4)
前言上一篇文章中,我们讲解了启动中的RpcServer类。这个类的顶级父类AbstractRpcRemoting是一个抽象类,封装了Netty的各种能力。除了RpcServer的直接父类AbstractRpcRemotingServer继承了它,还有一个AbstractRpcRemotingClient类也继承了它。在这一篇里,我们会继续把这个Client的抽象类也讲解了。另外,RpcServ...原创 2020-01-04 22:36:47 · 704 阅读 · 0 评论 -
Seata源码解析5——事务协调者的启动(3)
前言我们在上一小节中介绍了Metric的实现原理,本小节我们继续介绍后面的流程,首先我们回顾一下协调者的启动流程1. 解析传入的参数配置2. 初始化metrics3. 初始化一个RpcServer,其实就是一个netty的server,但并不马上start4. 初始化UUID生成器5. 初始化Session管理器6. 初始化协调者模块7. 协调者作为handler设置到netty ...原创 2019-12-29 11:59:01 · 1211 阅读 · 0 评论 -
Seata源码解析3——事务协调者的启动(1)
前言事务协调者主要负责管理整个分布式事务,每个节点的分支的本地事务在执行之前,都会在事务协调者上注册,本地事务执行结束后,还会向协调者汇报。当事务需要提交或回滚时,也协调者负责推送给各个RM。就现在的协调者代码来看,如果使用文件存储过程信息,会存在单点问题。如果使用数据库存储,所有状态保存在数据库上,则最后单点问题会落到数据库上。协调者总体架构整个协调者模块可以分为以下几大部分:协调者...原创 2019-12-08 14:56:57 · 953 阅读 · 0 评论 -
Seata源码解析2 —— SPI扩展
前言我们平时使用Spring时,由Spring来管理类,Seata没有依赖Spring,因此它自己做了一套SPI机制,用于类的管理。由于Seata里面一个接口有多个实现类,如配置中心就支持consul、etcd3、nacos等。这些实现类都继承了同一个接口,在运行时获取某一个实现类,就需要使用到SPI扩展点了。使用方式EnhancedServiceLoader类中有load方法和loadF...原创 2019-11-24 15:24:26 · 1636 阅读 · 2 评论 -
分布式事务(二)消息事务方案
前言我们在上一篇文章中大致介绍了常见的分布式事务方案。基于消息的分布式事务虽然有很多的缺点,但是在合适的场景中还是可以使用的。该方案最大的优点可能就是不需要框架,只需要一个实现了反查事务消息的MQ就可以实现,简单粗暴。对于资源无法锁定导致后续不好回滚的问题,也可以在业务层通过“预扣除”、“加锁”等方式,实现资源锁定。方案回顾步骤1-2是在本地事务执行之前,服务A负责生成一个全局唯一的事务...原创 2019-10-20 19:20:14 · 363 阅读 · 0 评论 -
分布式事务(一) 常见方案
1分布式事务问题的由来 在传统的单体应用中,我们所有的功能都能在同一个数据库中完成。一致性自然也能由同一个本地事务保证。以一个交易系统为例,如果有个客户消费了,首先我们需要在余额中扣钱,然后增加这个客户的积分。 但是数据库往往会成为系统的瓶颈,因此我们引入微服务后,很可能会对数据库做垂直拆分。此时如果不使用分布式事务,就会出现数据一致性问题,因为两个服务只能保证自己本地事务的一致性。...原创 2019-10-10 22:59:37 · 575 阅读 · 0 评论