分布式事务

概述

在微服务架构中,当我们需要跨服务保证数据一致性时,原先的数据库事务力不从心,无法将跨库、跨服务的多个操作放在一个事务中。这样的应用场景非常多,我们可以列举出很多:

  • 订单系统:需要保证创建订单和扣减库存要么同时成功,要么同时回滚
  • 跨行转账场景:数据不在一个数据库,但需要保证余额扣减和余额增加要么同时成功,要么同时失败
  • 积分兑换场景:需要保证积分扣减和权益增加同时成功,或者同时失败
  • 出行订票场景:需要在第三方系统同时定几张票,要么同时成功,要么全部取消

面对这些本地事务无法解决的场景,我们需要分布式事务的解决方案,保证跨服务、跨数据库更新数据的一致性。

解决方案

go-zero 与dtm强强联合,推出了在 go-zero 中无缝接入 dtm 的极简方案,是 go 生态中首家提供分布式事务能力的微服务框架。该方案具备以下特征:

  • dtm 服务可以通过配置,直接注册到 go-zero 的注册中心
  • go-zero 能够以内建的 target 格式访问 dtm 服务器
  • dtm 能够识别 go-zero 的 target 格式,动态访问 go-zero 中的服务

详细的接入方式,参见 dtm 文档:go-zero 支持

更多应用场景

dtm 不仅可以解决上述的分布式事务场景,还可以解决更多的与数据一致性相关的场景,包括:

  • 数据库与缓存一致性: dtm 的二阶段消息,能够保证数据库更新操作,和缓存更新/删除操作的原子性
  • 秒杀系统: dtm 能够保证秒杀场景下,创建的订单量与库存扣减数量完全一样,无需后续的人工校准
  • 多种存储组合: dtm 已支持数据库、Redis、Mongo 等多种存储,可以将它们组合为一个全局事务,保证数据的一致性

更多 dtm 的能力和介绍,参见dtm