Skip to content

Latest commit

 

History

History
105 lines (62 loc) · 5.23 KB

README-CN.md

File metadata and controls

105 lines (62 loc) · 5.23 KB

English | 中文

seata Logo

Stable Version Php Version dtm-client License

PHPUnit for Seata-PHP Total Downloads Monthly Downloads

介绍

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

在学习 Seata-PHP前我们首先来了解一下什么是 Seata

什么是 Seata?

一个具有高性能和易用性的微服务架构分布式事务解决方案。

微服务中的分布式事务问题

让我们想象一个传统的单体应用程序。它的业务由3个模块组成。他们使用单一的本地数据源。

自然,数据的一致性将由本地事务来保证。

Monolithic App

微服务架构发生了变化。上面提到的 3 个模块被设计为 3 个不同数据源之上的 3 个服务(Pattern: Database per service)。 每个服务内的数据一致性自然由本地事务保证。

但是整个业务逻辑范围呢?

Microservices Problem

Seata 是怎么做的呢?

Seata 只是上述问题的一个解决方案。

Seata solution

首先,如何定义一个 分布式事务?

我们说,分布式事务 是由一批分支事务组成的 全局事务,而通常 分支事务 只是本地事务。

全局 & 分支

在 Seata 框架中,有三个角色。

  • 事务协调者(TC): 维护全局和分支事务的状态,推动全局提交或回滚。

  • 事务管理者(TM): 定义全局事务的范围:开始一个全局事务,提交或回滚一个全局事务

  • 资源管理这(RM): 管理分支事务工作的资源,与TC对话以注册分支事务和报告分支事务的状态,并推动分支事务的提交或回滚。

模型

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

  1. TM 要求 TC 开始一个新的全局事务。TC 生成一个代表全局事务的 XID。

  2. XID 是通过微服务的调用链传播的。

  3. RM 将本地事务登记为 XID 对应的全局事务分支,并提交给 TC。

  4. TM 要求 TC 提交或回滚 XID 的相应全局事务。

  5. TC 驱动 XID 对应的全局事务下的所有分支事务,完成分支提交或回滚。

典型流程

关于原理和设计的更多细节,请访问 Seata wiki page

Seata-PHP TODO 列表

  • TCC
  • XA
  • AT
  • SAGA
  • TM
  • RPC 通信
  • 防悬挂
  • 空回滚
  • 注册中心
  • Metric 监控
  • 示例

怎样运行 Seata-PHP?

  1. 下载服务端 seata java 启动 TC 服务端. 可以参考 seata 部署指南

  2. seata-skeleton 环境中运行 Seata-PHP。

如何成为贡献者?

Seata-PHP 正处于建设阶段。 欢迎行业同仁入群参与其中,与我们一起推动 Seata-PHP 的建设!如果你想给 Seata-PHP 贡献代码,可以参考 code contribution Specification 文档来了解社区的规范,也可以加入我们的社区钉钉群: 44788115 ,一起沟通交流!

License

Seata-PHP 使用 Apache 许可证2.0版本,请参阅 LICENSE 文件了解更多。