tc seata服务器

@globaltranction

tm 事务的发起方 

rm事务的参与方

  • Transaction Coordinator (TC): 事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚

  • Transaction Manager(TM): 控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚的决议

假设有三个微服务,分别是服务A、B、C,其中服务A中调用了服务B和服务C,TM、TC、RM三者之间的交互流程如下图:

seata

分布式事务用的比较少 底层是有锁的

只有蚂蚁金服有

forkjoin框架详解

无锁并发框架disruptor

分布式锁有哪些主流实现方式?redis 和 zk 锁有什么区别?
大体分为两类。
乐观锁: 基于版本号机制和CAS实现,与存放版本号的存储无关。
悲观锁:

  1. 基于数据库记录,进入时写数据,退出时删记录
  2. 数据库行锁,比如分布式quartz,它是一把排它锁
  3. 基于Redis的setnx函数(由于大多数会设置超时,所以推荐用带px的set原子函数)
  4. 基于zookeeper

区别:
redis获取锁是轮训机制。锁释放后会有多个调用者争抢,某些任务有可能饿死。
zk是监听机制,有变动会接到通知。除了非公平锁,也可以实现公平锁。
从优雅性来说,显然redis胜出

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐