diff --git a/README-cn.md b/README-cn.md new file mode 100644 index 0000000..6f46dc8 --- /dev/null +++ b/README-cn.md @@ -0,0 +1,117 @@ +![license](https://img.shields.io/github/license/yedf/dtm) +[![Build Status](https://travis-ci.com/yedf/dtm.svg?branch=main)](https://travis-ci.com/yedf/dtm) +[![Coverage Status](https://coveralls.io/repos/github/yedf/dtm/badge.svg?branch=main)](https://coveralls.io/github/yedf/dtm?branch=main) +[![Go Report Card](https://goreportcard.com/badge/github.com/yedf/dtm)](https://goreportcard.com/report/github.com/yedf/dtm) +[![Go Reference](https://pkg.go.dev/badge/github.com/yedf/dtm.svg)](https://pkg.go.dev/github.com/yedf/dtm) + +[English Docs](https://github.com/yedf/dtm/blob/main/README.md) + +# GO语言分布式事务管理服务 + +DTM是首款golang的开源分布式事务管理器,优雅的解决了幂等、空补偿、悬挂等分布式事务难题。提供了简单易用、高性能、易水平扩展的分布式事务解决方案。 + +受邀参加中国数据库大会分享[多语言环境下分布式事务实践](http://dtcc.it168.com/yicheng.html#b9) + +## 亮点 + +* 极易接入 + - 支持HTTP,提供非常简单的接口,极大降低上手分布式事务的难度,新手也能快速接入 +* 使用简单 + - 开发者不再担心悬挂、空补偿、幂等各类问题,框架层代为处理 +* 跨语言 + - 可适合多语言栈的公司使用。方便go、python、php、nodejs、ruby各类语言使用。 +* 易部署、易扩展 + - 仅依赖mysql,部署简单,易集群化,易水平扩展 +* 多种分布式事务协议支持 + - TCC、SAGA、XA、事务消息 + +## 与其他框架对比 + +目前开源的分布式事务框架,暂未看到非Java语言有成熟的框架。而Java语言的较多,有阿里的SEATA、华为的ServiceComb-Pack,京东的shardingsphere,以及himly,tcc-transaction,ByteTCC等等,其中以seata应用最为广泛。 + +下面是dtm和seata的主要特性对比: + +| 特性| DTM | SEATA |备注| +|:-----:|:----:|:----:|:----:| +| 支持语言 | Golang、python、php及其他 | Java |dtm可轻松接入一门新语言| +|异常处理| [子事务屏障自动处理](https://zhuanlan.zhihu.com/p/388444465)|手动处理 |dtm解决了幂等、悬挂、空补偿| +| TCC事务| ||| +| XA事务|||| +|AT事务|||AT与XA类似,性能更好,但有脏回滚| +| SAGA事务 | 简单模式 | 状态机复杂模式 |dtm的状态机模式在规划中| +|事务消息|||dtm提供类似rocketmq的事务消息| +|通信协议|HTTP|dubbo等协议,无HTTP|dtm后续将支持grpc类协议| +|star数量|github stars|github stars|dtm从20210604发布0.1,发展快| + +从上面对比的特性来看,如果您的语言栈包含了Java之外的语言,那么dtm是您的首选。如果您的语言栈是Java,您也可以选择接入dtm,使用子事务屏障技术,简化您的业务编写。 + +## [各语言客户端及示例](./doc/sdk.md) + +## 快速开始 + +### 安装 + +`git clone https://github.com/yedf/dtm` + +### dtm依赖于mysql + +配置mysql: + +`cp conf.sample.yml conf.yml # 修改conf.yml` + +### 启动并运行saga示例 +`go run app/main.go saga` + +## 开始使用 + +### 使用 +``` GO + // 具体业务微服务地址 + const qsBusi = "http://localhost:8081/api/busi_saga" + req := &gin.H{"amount": 30} // 微服务的载荷 + // DtmServer为DTM服务的地址,是一个url + DtmServer := "http://localhost:8080/api/dtmsvr" + saga := dtmcli.NewSaga(DtmServer, dtmcli.MustGenGid(DtmServer)). + // 添加一个TransOut的子事务,正向操作为url: qsBusi+"/TransOut", 补偿操作为url: qsBusi+"/TransOutCompensate" + Add(qsBusi+"/TransOut", qsBusi+"/TransOutCompensate", req). + // 添加一个TransIn的子事务,正向操作为url: qsBusi+"/TransOut", 补偿操作为url: qsBusi+"/TransInCompensate" + Add(qsBusi+"/TransIn", qsBusi+"/TransInCompensate", req) + // 提交saga事务,dtm会完成所有的子事务/回滚所有的子事务 + err := saga.Submit() +``` + +成功运行后,可以看到TransOut、TransIn依次被调用,完成了整个分布式事务 + +### 时序图 + +上述saga分布式事务的时序图如下: + + + +### 完整示例 +参考[examples/quick_start.go](./examples/quick_start.go) + +## 文档与介绍(更新中) + * [分布式事务简介](https://zhuanlan.zhihu.com/p/387487859) + * 分布式事务模式 + - [XA事务模式](https://zhuanlan.zhihu.com/p/384756957) + - [SAGA事务模式](https://zhuanlan.zhihu.com/p/385594256) + - [TCC事务模式](https://zhuanlan.zhihu.com/p/388357329) + - 可靠消息事务模式 + * [子事务屏障](https://zhuanlan.zhihu.com/p/388444465) + * [通信协议](./doc/protocol.md) + * [FAQ](https://github.com/yedf/dtm/issues/1) + * 部署指南 + +## 交流群 +请加 yedf2008 好友或者扫码加好友,验证回复 dtm 按照指引进群 + +![yedf2008](http://service.ivydad.com/cover/dubbingb6b5e2c0-2d2a-cd59-f7c5-c6b90aceb6f1.jpeg) + +如果您觉得此项目不错,或者对您有帮助,请赏颗星吧! + +## 谁在使用 +
+ 常青藤爸爸 + 镜小二 +
diff --git a/README-en.md b/README-en.md deleted file mode 100644 index efcfd8b..0000000 --- a/README-en.md +++ /dev/null @@ -1,76 +0,0 @@ -![license](https://img.shields.io/github/license/yedf/dtm) -[![Build Status](https://travis-ci.com/yedf/dtm.svg?branch=main)](https://travis-ci.com/yedf/dtm) -[![Coverage Status](https://coveralls.io/repos/github/yedf/dtm/badge.svg?branch=main)](https://coveralls.io/github/yedf/dtm?branch=main) -[![Go Report Card](https://goreportcard.com/badge/github.com/yedf/dtm)](https://goreportcard.com/report/github.com/yedf/dtm) -[![Go Reference](https://pkg.go.dev/badge/github.com/yedf/dtm.svg)](https://pkg.go.dev/github.com/yedf/dtm) - -[中文版](https://github.com/yedf/dtm/blob/main/README.md) - -# A golang distributed transaction manager -DTM is the first golang open source distributed transaction project. It elegantly resolve the problem of execution out of order. In the microservice architecture, a high-performance and easy-to-use distributed transaction solution is provided. - -## Characteristic - -* Stable and reliable - + Tested in the production environment, unit test coverage is over 90% -* Simple to use - + The interface is simple, developers no longer worry about suspension, null compensation, idempotence, etc., and the framework layer takes care of them. -* Multi language supported - + It is suitable for companies with multi-language stacks. The protocol supports http. Convenient to use in various languages ​​such as go, python, php, nodejs, ruby. -* Easy to deploy, easy to expand - + Only rely on mysql, easy to deploy, easy to expand horizontally -* Multiple distributed transaction protocol supported - + TCC: Try-Confirm-Cancel - + SAGA: - + Reliable news - + XA - -### [sub-transaction barrier](./doc/barrier-en.md) -### [protocol](./doc/protocol-en.md) - -# Quick start -### Installation -`git clone https://github.com/yedf/dtm` -### DTM depends on mysql - -Configure mysql: - -`cp conf.sample.yml conf.yml # Modify conf.yml` - -### Start and run the saga example -`go run app/main.go` - -# Start using - -### Use -``` go - // business microservice address - const qsBusi = "http://localhost:8081/api/busi_saga" - req := &gin.H{"amount": 30} // Microservice payload - // The address where DtmServer serves DTM, which is a url - DtmServer := "http://localhost:8080/api/dtmsvr" - saga := dtmcli.NewSaga(DtmServer, dtmcli.MustGenGid(DtmServer)). - // Add a TransOut sub-transaction, the operation is url: qsBusi+"/TransOut", - // compensation operation is url: qsBusi+"/TransOutCompensate" - Add(qsBusi+"/TransOut", qsBusi+"/TransOutCompensate", req). - // Add a TransIn sub-transaction, the operation is url: qsBusi+"/TransOut", - // compensation operation is url: qsBusi+"/TransInCompensate" - Add(qsBusi+"/TransIn", qsBusi+"/TransInCompensate", req) - // Submit the saga transaction, dtm will complete all sub-transactions/rollback all sub-transactions - err := saga.Submit() -``` -### Complete example -Refer to [examples/quick_start.go](./examples/quick_start.go) - -### Wechat Group -Please add wechat yedf2008 friends or scan the code to add friends - -![yedf2008](http://service.ivydad.com/cover/dubbingb6b5e2c0-2d2a-cd59-f7c5-c6b90aceb6f1.jpeg) - -If you think this project is good, or helpful to you, please give a star! - -### Who is using -
- ivydad - eglass -
diff --git a/README.md b/README.md index c05241d..d758aa9 100644 --- a/README.md +++ b/README.md @@ -4,114 +4,97 @@ [![Go Report Card](https://goreportcard.com/badge/github.com/yedf/dtm)](https://goreportcard.com/report/github.com/yedf/dtm) [![Go Reference](https://pkg.go.dev/badge/github.com/yedf/dtm.svg)](https://pkg.go.dev/github.com/yedf/dtm) -[English](https://github.com/yedf/dtm/blob/main/README-en.md) +[中文文档](https://dtm.pub) -# GO语言分布式事务管理服务 +# A lightweight distributed transaction manager -DTM是首款golang的开源分布式事务管理器,优雅的解决了幂等、空补偿、悬挂等分布式事务难题。提供了简单易用、高性能、易水平扩展的分布式事务解决方案。 +DTM is the first golang open source distributed transaction project. It elegantly resolve the problem of execution out of order. In the microservice architecture, a high-performance and easy-to-use distributed transaction solution is provided. -受邀参加中国数据库大会分享[多语言环境下分布式事务实践](http://dtcc.it168.com/yicheng.html#b9) +## Characteristic -## 亮点 +* Stable and reliable + + Tested in the production environment, unit test coverage is over 90% +* Simple to use + + The interface is simple, developers no longer worry about suspension, null compensation, idempotence, etc., and the framework layer takes care of them. +* Multi language supported + + It is suitable for companies with multi-language stacks. The protocol supports http. Convenient to use in various languages ​​such as go, python, php, nodejs, ruby. +* Easy to deploy, easy to expand + + Only rely on mysql, easy to deploy, easy to expand horizontally +* Multiple distributed transaction protocol supported + + TCC: Try-Confirm-Cancel + + SAGA: + + Reliable news + + XA -* 极易接入 - - 支持HTTP,提供非常简单的接口,极大降低上手分布式事务的难度,新手也能快速接入 -* 使用简单 - - 开发者不再担心悬挂、空补偿、幂等各类问题,框架层代为处理 -* 跨语言 - - 可适合多语言栈的公司使用。方便go、python、php、nodejs、ruby各类语言使用。 -* 易部署、易扩展 - - 仅依赖mysql,部署简单,易集群化,易水平扩展 -* 多种分布式事务协议支持 - - TCC、SAGA、XA、事务消息 +## dtm vs other -## 与其他框架对比 +At present, the open source distributed transaction framework has not yet seen a mature framework for non-Java languages. There are many Java projects, such as Ali's SEATA, Huawei's ServiceComb-Pack, JD's shardingsphere, and himly, tcc-transaction, ByteTCC, etc. Among them, seata is the most widely used. -目前开源的分布式事务框架,暂未看到非Java语言有成熟的框架。而Java语言的较多,有阿里的SEATA、华为的ServiceComb-Pack,京东的shardingsphere,以及himly,tcc-transaction,ByteTCC等等,其中以seata应用最为广泛。 +The following is a comparison of the main features of dtm and seata: -下面是dtm和seata的主要特性对比: - -| 特性| DTM | SEATA |备注| +| Features | DTM | SEATA | Remarks | |:-----:|:----:|:----:|:----:| -| 支持语言 | Golang、python、php及其他 | Java |dtm可轻松接入一门新语言| -|异常处理| [子事务屏障自动处理](https://zhuanlan.zhihu.com/p/388444465)|手动处理 |dtm解决了幂等、悬挂、空补偿| -| TCC事务| ||| -| XA事务|||| -|AT事务|||AT与XA类似,性能更好,但有脏回滚| -| SAGA事务 | 简单模式 | 状态机复杂模式 |dtm的状态机模式在规划中| -|事务消息|||dtm提供类似rocketmq的事务消息| -|通信协议|HTTP|dubbo等协议,无HTTP|dtm后续将支持grpc类协议| -|star数量|github stars|github stars|dtm从20210604发布0.1,发展快| +| Supported languages ​​| Golang, python, php and others | Java |dtm can easily support a new language| +|Exception Handling| [Sub-transaction barrier automatic processing](./doc/barrier-en.md)|Manual processing | dtm solves idempotence, suspension, and null compensation| +| TCC| ||| +| XA|||| +|AT |||AT is similar to XA, with better performance but dirty rollback| +| SAGA | simple mode | state machine complex mode |dtm's state machine mode is under planning| +|Transaction message|||dtm provides transaction messages similar to rocketmq| +|Communication protocol|HTTP|dubbo and other protocols, no HTTP|dtm will support grpc protocol in the future| +|star number|github stars|github stars|dtm releases 0.1 from 20210604, fast development| -从上面对比的特性来看,如果您的语言栈包含了Java之外的语言,那么dtm是您的首选。如果您的语言栈是Java,您也可以选择接入dtm,使用子事务屏障技术,简化您的业务编写。 - -## [各语言客户端及示例](./doc/sdk.md) - -## 快速开始 - -### 安装 +From the features of the comparison above, if your language stack includes languages ​​other than Java, then dtm is your first choice. If your language stack is Java, you can also choose to access dtm and use sub-transaction barrier technology to simplify your business writing. +# Quick start +### Installation `git clone https://github.com/yedf/dtm` +### DTM depends on mysql -### dtm依赖于mysql +Configure mysql: -配置mysql: +`cp conf.sample.yml conf.yml # Modify conf.yml` -`cp conf.sample.yml conf.yml # 修改conf.yml` +### Start and run the saga example +`go run app/main.go` -### 启动并运行saga示例 -`go run app/main.go saga` +# Start using -## 开始使用 - -### 使用 -``` GO - // 具体业务微服务地址 +### Use +``` go + // business microservice address const qsBusi = "http://localhost:8081/api/busi_saga" - req := &gin.H{"amount": 30} // 微服务的载荷 - // DtmServer为DTM服务的地址,是一个url + req := &gin.H{"amount": 30} // Microservice payload + // The address where DtmServer serves DTM, which is a url DtmServer := "http://localhost:8080/api/dtmsvr" saga := dtmcli.NewSaga(DtmServer, dtmcli.MustGenGid(DtmServer)). - // 添加一个TransOut的子事务,正向操作为url: qsBusi+"/TransOut", 补偿操作为url: qsBusi+"/TransOutCompensate" + // Add a TransOut sub-transaction, the operation is url: qsBusi+"/TransOut", + // compensation operation is url: qsBusi+"/TransOutCompensate" Add(qsBusi+"/TransOut", qsBusi+"/TransOutCompensate", req). - // 添加一个TransIn的子事务,正向操作为url: qsBusi+"/TransOut", 补偿操作为url: qsBusi+"/TransInCompensate" + // Add a TransIn sub-transaction, the operation is url: qsBusi+"/TransOut", + // compensation operation is url: qsBusi+"/TransInCompensate" Add(qsBusi+"/TransIn", qsBusi+"/TransInCompensate", req) - // 提交saga事务,dtm会完成所有的子事务/回滚所有的子事务 + // Submit the saga transaction, dtm will complete all sub-transactions/rollback all sub-transactions err := saga.Submit() ``` +### Complete example -成功运行后,可以看到TransOut、TransIn依次被调用,完成了整个分布式事务 +Refer to [examples/quick_start.go](./examples/quick_start.go) -### 时序图 +## [sub-transaction barrier](./doc/barrier-en.md) -上述saga分布式事务的时序图如下: +## [protocol](./doc/protocol-en.md) - +### Wechat Group -### 完整示例 -参考[examples/quick_start.go](./examples/quick_start.go) - -## 文档与介绍(更新中) - * [分布式事务简介](https://zhuanlan.zhihu.com/p/387487859) - * 分布式事务模式 - - [XA事务模式](https://zhuanlan.zhihu.com/p/384756957) - - [SAGA事务模式](https://zhuanlan.zhihu.com/p/385594256) - - [TCC事务模式](https://zhuanlan.zhihu.com/p/388357329) - - 可靠消息事务模式 - * [子事务屏障](https://zhuanlan.zhihu.com/p/388444465) - * [通信协议](./doc/protocol.md) - * [FAQ](https://github.com/yedf/dtm/issues/1) - * 部署指南 - -## 交流群 -请加 yedf2008 好友或者扫码加好友,验证回复 dtm 按照指引进群 +Please add wechat yedf2008 friends or scan the code to add friends ![yedf2008](http://service.ivydad.com/cover/dubbingb6b5e2c0-2d2a-cd59-f7c5-c6b90aceb6f1.jpeg) -如果您觉得此项目不错,或者对您有帮助,请赏颗星吧! +If you think this project is good, or helpful to you, please give a star! -## 谁在使用 +### Who is using
- 常青藤爸爸 - 镜小二 + ivydad + eglass