English | 中文
Seata 是一个非常成熟的分布式事务框架,在Java领域是事实上的分布式事务技术标准平台。Seata-PHP 是 seata 多语言生态中的 PHP 语言实现版本,实现了 Java 和 PHP 之间的互通,让 PHPer 也能使用 Seata-php 来实现分布式事务。
在学习
Seata-PHP
前我们首先来了解一下什么是Seata
一个具有高性能和易用性的微服务架构分布式事务解决方案。
让我们想象一个传统的单体应用程序。它的业务由3个模块组成。他们使用单一的本地数据源。
自然,数据的一致性将由本地事务来保证。
微服务架构发生了变化。上面提到的 3 个模块被设计为 3 个不同数据源之上的 3 个服务(Pattern: Database per service)。 每个服务内的数据一致性自然由本地事务保证。
但是整个业务逻辑范围呢?
Seata 只是上述问题的一个解决方案。
首先,如何定义一个 分布式事务?
我们说,分布式事务 是由一批分支事务组成的 全局事务,而通常 分支事务 只是本地事务。
在 Seata 框架中,有三个角色。
-
事务协调者(TC): 维护全局和分支事务的状态,推动全局提交或回滚。
-
事务管理者(TM): 定义全局事务的范围:开始一个全局事务,提交或回滚一个全局事务
-
资源管理这(RM): 管理分支事务工作的资源,与TC对话以注册分支事务和报告分支事务的状态,并推动分支事务的提交或回滚。
Seata 管理的分布式事务的一个典型生命周期:
-
TM 要求 TC 开始一个新的全局事务。TC 生成一个代表全局事务的 XID。
-
XID 是通过微服务的调用链传播的。
-
RM 将本地事务登记为 XID 对应的全局事务分支,并提交给 TC。
-
TM 要求 TC 提交或回滚 XID 的相应全局事务。
-
TC 驱动 XID 对应的全局事务下的所有分支事务,完成分支提交或回滚。
关于原理和设计的更多细节,请访问 Seata wiki page。
- TCC
- XA
- AT
- SAGA
- TM
- RPC 通信
- 防悬挂
- 空回滚
- 注册中心
- Metric 监控
- 示例
-
下载服务端 seata java 启动 TC 服务端. 可以参考 seata 部署指南 。
-
在 seata-skeleton 环境中运行 Seata-PHP。
Seata-PHP 正处于建设阶段。 欢迎行业同仁入群参与其中,与我们一起推动 Seata-PHP 的建设!如果你想给 Seata-PHP 贡献代码,可以参考 code contribution Specification 文档来了解社区的规范,也可以加入我们的社区钉钉群: 44788115 ,一起沟通交流!
Seata-PHP 使用 Apache 许可证2.0版本,请参阅 LICENSE 文件了解更多。