Tidb 如何支持跨服务事务

Hi,
我查看了一部分TIDB源码,tidb的事务上下文在session内管理,而每个session对应一个与客户端的连接。在微服务场景下,每个微服务都是一个TIDB client, 不同服务之间不可能共享tidb connection 或 session。 所以无法直接利用tidb的分布式事务来实现跨服务事务,从而保障跨服务业务的数据一致性。类似seata这样的数据库,它基于XA协议支持跨服务事务,在seata的官方文档中似乎也指出支持使用TIDB作为数据源。这是不是意味着TIDB也应用层支持XA协议?TIDB本身作为分布式数据库,是否有更直接的解决方案。比如给应用层直接返回全局事务id, 应用层在跨服务调用中可以通过传递全局事务id, 在另一个sql session中在该全局事务上下文中执行SQL。

2赞

tidb的事务信息是持久化tikv中的

Tikv的分布式事务处理沿用了Google的Percolator模型,是一个构建在bigtable之上的二阶段提交模型。

可以看一下 302课程,《分布式事务设计》 这一章的内容。

tikv-%E5%88%86%E5%B8%83%E5%BC%8F%E4%BA%8B%E5%8A%A12

说一下我的观点:
1、数据库作为一个基础设施,和服务端产生这样的依赖显然不合适
2、seata描述成数据库我不认同,它就是一个事务协调工具,类似于TiDB中的percolator
3、要在TiDB实现跨服务事务可以在上层搭一套seata这样的服务,这样的工具还有很多
4、TiDB并没有实现XA协议,所以不能使用Seata的XA模式,只能用AT模式

3赞

跨服务事务如果理解为跨tidb集群的事务,需要引入seata类的工具。