更新时间:2024-06-07 GMT+08:00
分布式事务
技术背景
在分布式share nothing架构下,表的数据分布在不同的节点上。客户端的一条或多条语句可能会同时修改多个节点上的数据,这种情况下,会产生分布式事务。分布式事务需要关注:
- 在各个节点上事务的原子性,分布式事务在所有节点上要么全部成功要么全部失败。
- 事务的一致性,查询在各个节点上返回一致的数据。当节点出现故障时,是否会返回不一致的数据。
其中,分布式事务的原子性是必须要满足的,分布式事务的一致性根据CAP理论会有不同的标准,常见的是支持强一致2pc、3pc协议等的CP系统,或者支持最终一致性TCC、消息表等的AP系统。
技术原理
DWS支持强一致的分布式事务,在满足CP的基础上最大程度的提供高可用服务。
CSN
图1 CSN的更新以及与XID的映射关系
CSN(Commit Sequence Number)表示事务提交号。
- CSN是一个单调递增的8字节无符号整数,由GTM维护。
- 事务结束时,从GTM上获取并更新CSN值。
- 采用CSN机制后,查询只需从GTM上获取CSN号。
GTM
图2 GTM
GTM是GaussDB分布式框架下的一个组件:
- 管理和分配事务号(只增不减)。
- 管理和维护CSN号(只增不减)。
CN在执行修改操作时会从GTM上获取事务号。
CN在语句开始时会从GTM获取一个CSN用于查询。
CN在事务开始和结束会与GTM通信,注册和销毁事务相关信息。
故障处理
在节点出现故障造成分布式事务残留后,通过gs_clean工具进行自动清理。
gs_clean从各个节点上查询残留的两阶段事务,根据残留的事务号,去其它节点上查看该事务提交还是回滚,并根据最终结果对两阶段残留事务进行清理。
效果收益
DWS支持强一致的分布式事务,用户可以像使用单机数据库一样来使用DWS数据库,不用担心事务问题,非常简单方便。并且在采用基于CSN的事务机制后,并发性能有了很大的提升。
父主题: DWS核心技术