@ -11,7 +11,7 @@ English | [简体中文](https://github.com/dtm-labs/dtm/blob/main/helper/README
## What is DTM
## What is DTM
DTM is a distributed transaction solution which provides cross-service eventually data consistency. It provides saga, tcc, xa, 2-phase message strategies for a variety of application scenarios. It also supports multiple languages and multiple store engine to form up a transaction as following:
DTM is a distributed transaction framework which provides cross-service eventually data consistency. It provides saga, tcc, xa, 2-phase message strategies for a variety of application scenarios. It also supports multiple languages and multiple store engine to form up a transaction as following:
@ -26,49 +26,26 @@ DTM is a distributed transaction solution which provides cross-service eventuall
## Features
## Features
* Extremely easy to adapt
- Support HTTP and gRPC, provide easy-to-use programming interfaces, lower substantially the barrier of getting started with distributed transactions. Newcomers can adapt quickly.
* Easy to use
- Relieving developers from worrying about suspension, null compensation, idempotent transaction, and other tricky problems, the framework layer handles them all.
* Language-agnostic
* Language-agnostic
- Suit for companies with multiple-language stacks.
- Suit for companies with multiple-language stacks.
Easy to write bindings for Go, Python, PHP, Node.js, Ruby, and other languages.
Easy to write bindings for Go, Python, PHP, Node.js, Ruby, and other languages.
* Easy to deploy, easy to extend
* Support for multiple distributed transaction solutions
- DTM depends only on MySQL, easy to deploy, cluster, and scale horizontally.
- TCC, SAGA, XA, 2-phases message.
* Support for multiple distributed transaction protocol
- TCC, SAGA, XA, Transactional messages.
## DTM vs. others
* Extremely easy to adapt
- Support HTTP and gRPC, provide easy-to-use programming interfaces, lower substantially the barrier of getting started with distributed transactions. Newcomers can adapt quickly.
There is no mature open-source distributed transaction framework for non-Java languages.
Mature open-source distributed transaction frameworks for Java language include Ali's Seata, Huawei's ServiceComb-Pack, Jingdong's shardingsphere, himly, tcc-transaction, ByteTCC, and so on, of which Seata is most widely used.
The following is a comparison of the main features of dtm and Seata.
* Easy to use
- Relieving developers from worrying about suspension, null compensation, idempotent transaction, and other tricky problems, the framework layer handles them all.
| Features | DTM | Seata | Remarks |
* Easy to deploy, easy to extend
| :-----: | :----: | :----: | :----: |
- DTM depends only on MySQL/Redis, easy to deploy, cluster, and scale horizontally.
| Supported languages | <spanstyle="color:green">Golang, Python, PHP, and others</span> | <spanstyle="color:orange">Java</span> | dtm allows easy access from a new language |
| XA | <spanstyle="color:green">✓</span> | <spanstyle="color:green">✓</span> | |
| AT | <spanstyle="color:orange">suggest XA</span> | <spanstyle="color:green">✓</span> | AT is similar to XA with better performance but with dirty rollback |
| SAGA | <spanstyle="color:green">support concurrency</span> | <spanstyle="color:green">complicated state-machine mode</span> | dtm's state-machine mode is being planned |
| Transactional Messaging | <spanstyle="color:green">✓</span> | <spanstyle="color:red">✗</span> | dtm provides Transactional Messaging similar to RocketMQ |
| Multiple DBs in a service |<spanstyle="color:green">✓</span>|<spanstyle="color:red">✗</span>||
| Communication protocols | <spanstyle="color:green">HTTP, gRPC</span> | <spanstyle="color:green">Dubbo, no HTTP</span> | |
| Star count | <imgsrc="https://img.shields.io/github/stars/dtm-labs/dtm.svg?style=social"alt="github stars"/> | <imgsrc="https://img.shields.io/github/stars/seata/seata.svg?style=social"alt="github stars"/> | dtm 0.1 is released from 20210604 and under fast development |
From the features' comparison above, if your language stack includes languages other than Java, then dtm is the one for you.
If your language stack is Java, you can also choose to access dtm and use sub-transaction barrier technology to simplify your business development.
## [Cook Book](https://en.dtm.pub)
## [Cook Book](https://en.dtm.pub)
# Quick start
## Quick start
### run dtm
### run dtm
@ -77,14 +54,17 @@ git clone https://github.com/dtm-labs/dtm && cd dtm
go run main.go
go run main.go
```
```
### Start the example
### Start an example
Suppose we want to perform an inter-bank transfer. The operations of transfer out (TransOut) and transfer in (TransIn) are coded in separate micro-services.
Here is an example to illustrate a solution of dtm to this problem:
``` bash
``` bash
git clone https://github.com/dtm-labs/dtmcli-go-sample && cd dtmcli-go-sample
git clone https://github.com/dtm-labs/dtmcli-go-sample && cd dtmcli-go-sample
go run main.go
go run main.go
```
```
# Code
## Code
### Use
### Use
``` go
``` go
@ -102,29 +82,39 @@ go run main.go
// submit the created saga transaction,dtm ensures all subtractions either complete or get revoked
// submit the created saga transaction,dtm ensures all subtractions either complete or get revoked
err := saga.Submit()
err := saga.Submit()
```
```
### Complete example
Refer to [dtm-examples](https://github.com/dtm-labs/dtm-examples).
When the above code runs, we can see in the console that services TransOut, TransIn has been called.
### Slack
#### Timing diagram
A timing diagram for a successfully completed SAGA transaction would be as follows:
You can join the [DTM slack channel here](https://join.slack.com/t/dtm-w6k9662/shared_invite/zt-vkrph4k1-eFqEFnMkbmlXqfUo5GWHWw).
If any forward operation fails, DTM invokes the corresponding compensating operation of each sub-transaction to roll back, after which the transaction is successfully rolled back.
Add wechat friend with id yedf2008, or scan the OR code. Fill in dtm as verification.
Let's purposely fail the forward operation of the second sub-transaction and watch what happens
@ -11,7 +11,7 @@ English | [简体中文](https://github.com/dtm-labs/dtm/blob/main/helper/README
## What is DTM
## What is DTM
DTM is a distributed transaction solution which provides cross-service eventually data consistency. It provides saga, tcc, xa, 2-phase message strategies for a variety of application scenarios. It also supports multiple languages and multiple store engine to form up a transaction as following:
DTM is a distributed transaction framework which provides cross-service eventually data consistency. It provides saga, tcc, xa, 2-phase message strategies for a variety of application scenarios. It also supports multiple languages and multiple store engine to form up a transaction as following:
@ -26,49 +26,26 @@ DTM is a distributed transaction solution which provides cross-service eventuall
## Features
## Features
* Extremely easy to adapt
- Support HTTP and gRPC, provide easy-to-use programming interfaces, lower substantially the barrier of getting started with distributed transactions. Newcomers can adapt quickly.
* Easy to use
- Relieving developers from worrying about suspension, null compensation, idempotent transaction, and other tricky problems, the framework layer handles them all.
* Language-agnostic
* Language-agnostic
- Suit for companies with multiple-language stacks.
- Suit for companies with multiple-language stacks.
Easy to write bindings for Go, Python, PHP, Node.js, Ruby, and other languages.
Easy to write bindings for Go, Python, PHP, Node.js, Ruby, and other languages.
* Easy to deploy, easy to extend
* Support for multiple distributed transaction solutions
- DTM depends only on MySQL, easy to deploy, cluster, and scale horizontally.
- TCC, SAGA, XA, 2-phases message.
* Support for multiple distributed transaction protocol
- TCC, SAGA, XA, Transactional messages.
## DTM vs. others
* Extremely easy to adapt
- Support HTTP and gRPC, provide easy-to-use programming interfaces, lower substantially the barrier of getting started with distributed transactions. Newcomers can adapt quickly.
There is no mature open-source distributed transaction framework for non-Java languages.
Mature open-source distributed transaction frameworks for Java language include Ali's Seata, Huawei's ServiceComb-Pack, Jingdong's shardingsphere, himly, tcc-transaction, ByteTCC, and so on, of which Seata is most widely used.
The following is a comparison of the main features of dtm and Seata.
* Easy to use
- Relieving developers from worrying about suspension, null compensation, idempotent transaction, and other tricky problems, the framework layer handles them all.
| Features | DTM | Seata | Remarks |
* Easy to deploy, easy to extend
| :-----: | :----: | :----: | :----: |
- DTM depends only on MySQL/Redis, easy to deploy, cluster, and scale horizontally.
| Supported languages | <spanstyle="color:green">Golang, Python, PHP, and others</span> | <spanstyle="color:orange">Java</span> | dtm allows easy access from a new language |
| XA | <spanstyle="color:green">✓</span> | <spanstyle="color:green">✓</span> | |
| AT | <spanstyle="color:orange">suggest XA</span> | <spanstyle="color:green">✓</span> | AT is similar to XA with better performance but with dirty rollback |
| SAGA | <spanstyle="color:green">support concurrency</span> | <spanstyle="color:green">complicated state-machine mode</span> | dtm's state-machine mode is being planned |
| Transactional Messaging | <spanstyle="color:green">✓</span> | <spanstyle="color:red">✗</span> | dtm provides Transactional Messaging similar to RocketMQ |
| Multiple DBs in a service |<spanstyle="color:green">✓</span>|<spanstyle="color:red">✗</span>||
| Communication protocols | <spanstyle="color:green">HTTP, gRPC</span> | <spanstyle="color:green">Dubbo, no HTTP</span> | |
| Star count | <imgsrc="https://img.shields.io/github/stars/dtm-labs/dtm.svg?style=social"alt="github stars"/> | <imgsrc="https://img.shields.io/github/stars/seata/seata.svg?style=social"alt="github stars"/> | dtm 0.1 is released from 20210604 and under fast development |
From the features' comparison above, if your language stack includes languages other than Java, then dtm is the one for you.
If your language stack is Java, you can also choose to access dtm and use sub-transaction barrier technology to simplify your business development.
## [Cook Book](https://en.dtm.pub)
## [Cook Book](https://en.dtm.pub)
# Quick start
## Quick start
### run dtm
### run dtm
@ -77,14 +54,17 @@ git clone https://github.com/dtm-labs/dtm && cd dtm
go run main.go
go run main.go
```
```
### Start the example
### Start an example
Suppose we want to perform an inter-bank transfer. The operations of transfer out (TransOut) and transfer in (TransIn) are coded in separate micro-services.
Here is an example to illustrate a solution of dtm to this problem:
``` bash
``` bash
git clone https://github.com/dtm-labs/dtmcli-go-sample && cd dtmcli-go-sample
git clone https://github.com/dtm-labs/dtmcli-go-sample && cd dtmcli-go-sample
go run main.go
go run main.go
```
```
# Code
## Code
### Use
### Use
``` go
``` go
@ -102,29 +82,39 @@ go run main.go
// submit the created saga transaction,dtm ensures all subtractions either complete or get revoked
// submit the created saga transaction,dtm ensures all subtractions either complete or get revoked
err := saga.Submit()
err := saga.Submit()
```
```
### Complete example
Refer to [dtm-examples](https://github.com/dtm-labs/dtm-examples).
When the above code runs, we can see in the console that services TransOut, TransIn has been called.
### Slack
#### Timing diagram
A timing diagram for a successfully completed SAGA transaction would be as follows:
You can join the [DTM slack channel here](https://join.slack.com/t/dtm-w6k9662/shared_invite/zt-vkrph4k1-eFqEFnMkbmlXqfUo5GWHWw).
If any forward operation fails, DTM invokes the corresponding compensating operation of each sub-transaction to roll back, after which the transaction is successfully rolled back.
Add wechat friend with id yedf2008, or scan the OR code. Fill in dtm as verification.
Let's purposely fail the forward operation of the second sub-transaction and watch what happens