跳到主要内容

分布式事务(distributed_transaction)

提供普通事务和 force_commit 两种模式。普通事务由发起者准备参与者、请求协调者记录全局决议, 再通知参与者执行本地动作并确认。force_commit 在 prepare 中执行动作,不创建协调者记录。

位置:src/component/distributed_transaction/(README 见该目录)。

快速上手​

  1. 启用 dtcoordsvr 并准备 Redis;使用对应 chart 的事务超时、恢复与清理配置。
  2. 消费方 USE_COMPONENTS 加入 distributed-transaction-sdk; 使用 sdk/transaction_client_handle.h、transaction_participator_handle.h 和 rpc/transaction/transaction_api.h。
  3. 参照组件 README 的接入契约实现业务参与者回调,准备参与者、资源 key 和事务数据, 由 client handle 提交。业务数据与参与者快照需一致保存。
  4. 先验证正常提交,再验证 prepare 失败后的拒绝;本地动作与恢复回调必须幂等。 需要事务语义时先使用普通模式,并核对下面的全局决议与失败恢复规则。

定制与详细设计​

组成​

部分位置说明
dtcoordsvrdtcoordsvr/协调者服务:transaction_manager + 一组 task action
SDKsdk/transaction_client_handle(发起者)、transaction_participator_handle(参与者)、transaction_api
协议protocol/distributed_transaction.proto、dtcoordsvr_config.proto

协调者 RPC(task action)​

create / commit / reject / query / remove / commit_participator / reject_participator。

流程​

未确认全局决议时,client 先有限次查询,不以失败调用的部分副本响应决定通知方向。 已确认的全局决议不会因后续本地动作或通知失败而反转。

资源冲突、复制、失败恢复、回调状态与运行契约见分布式事务白皮书。 接入时同时核对组件 README 中的回调与参数说明。