这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

分布式事务开源项目

1 - Seata项目

seata项目

1.1 - seata

seata

Seata 介绍

Seata == Simple Extensible Autonomous Transaction Architecture

Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。

Seata 支持的模式

  • AT 模式:基于 支持本地 ACID 事务关系型数据库,适用于Java 应用,通过 JDBC 访问数据库。
  • TCC 模式:不依赖于底层数据资源的事务支持
  • Saga 模式: 长事务解决方案,在Saga模式中,业务流程中每个参与者都提交本地事务,当出现某一个参与者失败则补偿前面已经成功的参与者,一阶段正向服务和二阶段补偿服务都由业务开发实现。目前SEATA提供的Saga模式是基于状态机引擎来实现。
  • XA 模式:支持XA 事务的数据库。适用于Java 应用,通过 JDBC 访问数据库。

Seata 的关键术语和组件

https://seata.io/zh-cn/docs/overview/terminology.html

145942191-7a2d469f-94c8-4cd2-8c7e-46ad75683636

  • TC (Transaction Coordinator) - 事务协调者

    维护全局和分支事务的状态,驱动全局事务提交或回滚。

  • TM (Transaction Manager) - 事务管理器

    定义全局事务的范围:开始全局事务、提交或回滚全局事务。

  • RM (Resource Manager) - 资源管理器

    管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

结合这张图片看:

Seata 管理的分布式事务的典型生命周期:

  1. TM要求TC开始一个新的全局交易。TC生成一个代表全局事务的XID。
  2. XID通过微服务的调用链进行传播。
  3. RM将本地事务注册为XID对应的全局事务的一个分支,并将其发送给TC。
  4. TM要求TC提交或回滚相应的XID的全局事务。
  5. TC驱动XID对应的全局事务下的所有分支事务,完成分支提交或回滚。

Seata 的发展历史

https://github.com/seata/seata#history

Alibaba
  • TXC: Taobao Transaction Constructor. Alibaba middleware team started this project since 2014 to meet the distributed transaction problems caused by application architecture change from monolithic to microservices.
  • GTS: Global Transaction Service. TXC as an Aliyun middleware product with new name GTS was published since 2016.
  • Fescar: we started the open source project Fescar based on TXC/GTS since 2019 to work closely with the community in the future.
Ant Financial
  • XTS: Extended Transaction Service. Ant Financial middleware team developed the distributed transaction middleware since 2007, which is widely used in Ant Financial and solves the problems of data consistency across databases and services.
  • DTX: Distributed Transaction Extended. Since 2013, XTS has been published on the Ant Financial Cloud, with the name of DTX
Seata Community
  • Seata :Simple Extensible Autonomous Transaction Architecture. Ant Financial joins Fescar, which make it to be a more neutral and open community for distributed transaction, and Fescar be renamed to Seata.

Seata 资料

Seata Java

https://github.com/seata/seata

Seata Go

https://github.com/seata/seata-go/blob/master/README_ZH.md

Seata是一个非常成熟的分布式事务框架,在Java领域是事实上的分布式事务技术标准平台。Seata-go 是 seata 多语言生态中的Go语言实现版本,实现了 Java 和 Go 之间的互通,让 Go 开发者也能使用 seata-go 来实现分布式事务。

Seata-go 的原理和 Seata-java 保持一致,都是由 TM、RM 和 TC 组成,其中 TC 的功能复用 Java 的,TM和RM功能后面会和 Seata-java对齐,整体流程如下:

145942191-7a2d469f-94c8-4cd2-8c7e-46ad75683636

完成度:从readme页面介绍看,和java版本差距很大,XA/AT/SAGA 模式都没有实现,暂时只有TCC模式。

2 - DTM项目

DTM项目

2.1 - DTM项目概述

DTM项目概述

dtm

DTM 项目介绍

A distributed transaction framework, supports workflow, saga, tcc, xa, 2-phase message, outbox patterns, supports many languages.

一个分布式事务框架,支持工作流、saga、tcc、xa、2阶段消息、outbox模式,支持许多语言。

GO语言分布式事务管理服务

DTM == Distributed Transaction Manager

DTM是一款开源的分布式事务管理器,解决跨数据库、跨服务、跨语言栈更新数据的一致性问题。

DTM是一个分布式事务框架,提供跨服务的最终数据一致性。它为各种应用场景提供了saga、tcc、xa、2阶段消息、outbox、工作流模式。它还支持多语言和多存储引擎,以形成如下的事务:

特点(来自:https://www.dtm.pub/):

  • 💡 极易接入

零配置启动服务,提供非常简单的HTTP接口,极大降低上手分布式事务的难度,新手也能快速接入

  • ⚡️ 跨语言

可适合多语言栈的公司使用。方便go、python、php、nodejs、ruby、c# 各类语言使用。

  • 🛠️ 使用简单

开发者不再担心悬挂、空补偿、幂等等异常问题,首创子事务屏障技术代为处理

  • 📦 易部署、易扩展

依赖mysql|redis,部署简单,易集群化,易水平扩展

  • 🔩 多种分布式事务协议支持

TCC、SAGA、XA、二阶段消息,一站式解决所有分布式事务问题

DTM 支持的模式

  • 二阶段消息:

​ 二阶段消息是dtm首创的事务模式,用于替换本地事务表和事务消息这两种现有的方案。

​ 见文档:例子原理

  • SAGA 模式

​ 见文档:例子原理

DTM 项目资料

3 - Eventuate项目

Eventuate项目

3.1 - Eventuate概述

Eventuate

Eventuate 介绍

eventuate 的背景

Solving distributed data management problems in a microservice architecture

Microservices accelerate development and enable businesses to innovate faster and stay ahead of the competition. But one major challenge with the microservices architecture is the management of distributed data. Each microservice has its own private database. It is difficult to implement business transactions that maintain data consistency across multiple services as well as queries that retrieve data from multiple services.

在微服务架构中解决分布式数据管理问题

微服务加速了开发,使企业能够更快地进行创新,并在竞争中保持领先地位。但微服务架构的一个主要挑战是分布式数据的管理。每个微服务都有自己的私有数据库。要实现保持多个服务间数据一致性的业务交易以及从多个服务中检索数据的查询是很困难的。

eventuate 项目介绍

Eventuate™是一个平台,它解决了微服务架构中固有的分布式数据管理问题,使您能够专注于您的业务逻辑。

Eventuate™由以下部分组成:

  • Eventuate Tram - 一个使用传统(如 JPA / JDBC 和 Entity Framework)持久性的服务框架。你可以轻松地将 Eventuate Tram 添加到你的 Spring Boot、Micronaut、Quarkus 和 .NE T微服务中,而不必重写你的业务逻辑。

  • Eventuate Local - 一个 event sourcing 框架。 event sourcing 是一种以事件为中心的业务逻辑和持久化编程模型,具有一些优势,包括在数据变化时自动发布事件,对所有更新进行可靠的审计,以及对时间查询的内置支持。 Eventuate Local 包括一个事件存储和客户端库,适用于各种语言和框架,包括 Java、Scala、Spring、Micronaut和Quarkus 框架。

Eventuate:使开发人员能够专注于业务逻辑

  • 使用Sagas维护数据一致性

    通过使用 Sagas 实现更新多个微服务中的数据的命令,Sagas 是使用消息协调的本地事务序列。

  • 使用CQRS实施查询

    实施查询,通过使用CQRS视图从多个服务中检索数据,这些视图是使用事件维护的容易查询的副本。

Eventuate 资料