更新时间:2024-06-07 GMT+08:00

分布式事务

技术背景

在分布式share nothing架构下,表的数据分布在不同的节点上。客户端的一条或多条语句可能会同时修改多个节点上的数据,这种情况下,会产生分布式事务。分布式事务需要关注:

  • 在各个节点上事务的原子性,分布式事务在所有节点上要么全部成功要么全部失败。
  • 事务的一致性,查询在各个节点上返回一致的数据。当节点出现故障时,是否会返回不一致的数据。

其中,分布式事务的原子性是必须要满足的,分布式事务的一致性根据CAP理论会有不同的标准,常见的是支持强一致2pc、3pc协议等的CP系统,或者支持最终一致性TCC、消息表等的AP系统。

技术原理

DWS支持强一致的分布式事务,在满足CP的基础上最大程度的提供高可用服务。

CSN

图1 CSN的更新以及与XID的映射关系

CSN(Commit Sequence Number)表示事务提交号。

  1. CSN是一个单调递增的8字节无符号整数,由GTM维护。
  2. 事务结束时,从GTM上获取并更新CSN值。
  3. 采用CSN机制后,查询只需从GTM上获取CSN号。

GTM

图2 GTM

GTM是GaussDB分布式框架下的一个组件:

  • 管理和分配事务号(只增不减)。
  • 管理和维护CSN号(只增不减)。

CN在执行修改操作时会从GTM上获取事务号。

CN在语句开始时会从GTM获取一个CSN用于查询。

CN在事务开始和结束会与GTM通信,注册和销毁事务相关信息。

故障处理

在节点出现故障造成分布式事务残留后,通过gs_clean工具进行自动清理。

gs_clean从各个节点上查询残留的两阶段事务,根据残留的事务号,去其它节点上查看该事务提交还是回滚,并根据最终结果对两阶段残留事务进行清理。

效果收益

DWS支持强一致的分布式事务,用户可以像使用单机数据库一样来使用DWS数据库,不用担心事务问题,非常简单方便。并且在采用基于CSN的事务机制后,并发性能有了很大的提升。