高可用

DTM的高可用方式,与其他普通应用,完全一样,都是通过多个无状态的实例提供服务。

在前面DTM架构图中,TM由多个dtm实例构成,每个dtm实例都是无状态的应用程序,他们将全局事务数据存储在dtm的数据库/Redis。实际业务只要给dtm配置了高可用的数据库/Redis,那么整个dtm服务就是天然高可用的。

在普通的部署模式下,每个dtm进程都会启动一个协程,定时扫描超时的全局事务。

dtm的扫描协程,在获取超时全局事务时,已经考虑到多个协程并发的情况。通过数据库或者Redis的原子操作,保证了一个超时事务,最多只会被一个协程获取到。

数据库采用了"update ... where ... limit 1"的技巧,虽然多个协程并发访问,但一个事务只会被一个协程update成功,被一个协程处理。

Redis则采用了Lua脚本,进行原子的操作,保证一个事务只被一个协程取出

Last Updated: