ITPub博客

首页 > 数据库 > 数据库开发技术 > 分布式事务设计与实践

分布式事务设计与实践

原创 数据库开发技术 作者:greencoatman 时间:2024-06-21 19:51:16 0 删除 编辑


  1. 异步消息队列:用于在服务之间传递事务信息和状态,确保各服务可以异步地处理事务操作。

  2. 事务协调器:负责协调和管理全局事务的状态,包括提交和回滚操作。

  3. 补偿机制:在事务失败时,通过补偿操作来回滚或修复之前的操作,以保证数据的一致性。

设计步骤

1. 事务初始化

  • 事务发起者:事务开始时,由事务发起者(例如用户请求服务)向事务协调器发起一个全局事务。

  • 事务ID:事务协调器生成一个全局唯一的事务ID,并将其传递给所有参与服务。

2. 本地事务执行

  • 参与服务:每个参与服务接收到事务ID后,执行本地事务操作(例如数据库操作),但不立即提交。

  • 异步消息队列:参与服务在完成本地操作后,通过异步消息队列向事务协调器汇报操作结果(成功或失败)。

3. 事务协调

  • 事务协调器:根据所有参与服务的反馈结果,决定是提交还是回滚全局事务。

    • 全局提交:如果所有参与服务都成功,则事务协调器向所有服务发送提交指令,所有服务提交本地事务。

    • 全局回滚:如果有任何一个服务失败,则事务协调器向所有服务发送回滚指令,所有服务回滚本地事务。

4. 补偿机制

  • 补偿操作:如果全局事务需要回滚,参与服务需要执行补偿操作,以撤销之前的操作。这通常通过补偿接口实现,确保数据回到一致状态。

  • 重试机制:在异步场景下,可能需要多次尝试补偿操作,直到成功为止。


分布式事务补偿服务


  • tstate:事务状态管理模块,负责记录和维护事务的状态信息,确保事务的执行状态可以被追踪和管理。

  • tschedule:事务调度模块,负责调度和执行事务补偿操作,确保补偿操作按计划进行。

  • deserialize:反序列化模块,负责将事务相关的数据从存储中读取并转换为可操作的对象。

  • rpc client:RPC(远程过程调用)客户端模块,负责与其他微服务进行通信,执行远程调用以进行事务补偿操作。


微服务网关层

  • 微服务网关层:用于处理所有进入微服务的请求,执行统一的路由、认证和流量控制。


微服务业务逻辑层

  • 微服务业务逻辑层:包含业务逻辑处理的主要部分,负责执行核心的业务操作。

  • proxy(代理):代理模块,用于拦截和处理数据访问请求,确保请求可以被正确路由到对应的补偿接口或原子接口。

微服务数据访问层

  • 微服务数据访问层:负责与数据库进行交互,执行数据的读写操作。

  • 原子接口:直接与数据库进行交互的接口,执行基本的数据操作。

  • 补偿接口:用于事务补偿操作的接口,负责在事务失败时进行数据的回滚或补偿。


数据库

  • TDB:事务数据库,专门用于存储和管理事务相关的数据和状态信息。

  • DB1 和 DB2:业务数据库,存储业务数据。在分布式事务中,这些数据库可能位于不同的物理位置或节点上。


数据流向

  • TDB与分布式事务补偿服务的交互:tstate模块从TDB获取事务状态,tschedule模块根据事务状态调度补偿操作,rpc client通过远程调用执行补偿操作。

  • 微服务业务逻辑层与数据访问层的交互:业务逻辑层通过代理模块访问数据,代理模块根据需求选择调用原子接口或补偿接口。

  • DB1 和 DB2与数据访问层的交互:原子接口直接与DB1和DB2进行数据读写操作,补偿接口则在需要进行事务补偿时进行操作。




原文作者:二进制跳动;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2022-07-08

  • 博文量
    312
  • 访问量
    141134