diff --git a/README.md b/README.md
index 4c14c6f..ae285cf 100644
--- a/README.md
+++ b/README.md
@@ -11,7 +11,7 @@ English | [简体中文](https://github.com/dtm-labs/dtm/blob/main/helper/README
## 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
-* 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
- Suit for companies with multiple-language stacks.
Easy to write bindings for Go, Python, PHP, Node.js, Ruby, and other languages.
-* Easy to deploy, easy to extend
- - DTM depends only on MySQL, easy to deploy, cluster, and scale horizontally.
-
-* Support for multiple distributed transaction protocol
- - TCC, SAGA, XA, Transactional messages.
+* Support for multiple distributed transaction solutions
+ - TCC, SAGA, XA, 2-phases message.
-## DTM vs. others
-
-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.
+* 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.
-| Features | DTM | Seata | Remarks |
-| :-----: | :----: | :----: | :----: |
-| Supported languages | Golang, Python, PHP, and others | Java | dtm allows easy access from a new language |
-| Exception handling | [Sub-transaction barrier](https://zhuanlan.zhihu.com/p/388444465) | manual | dtm solves idempotent transaction, hanging, null compensation |
-| TCC | ✓ | ✓ | |
-| XA | ✓ | ✓ | |
-| AT | suggest XA | ✓ | AT is similar to XA with better performance but with dirty rollback |
-| SAGA | support concurrency | complicated state-machine mode | dtm's state-machine mode is being planned |
-| Transactional Messaging | ✓ | ✗ | dtm provides Transactional Messaging similar to RocketMQ |
-| Multiple DBs in a service |✓|✗||
-| Communication protocols | HTTP, gRPC | Dubbo, no HTTP | |
-| Star count | |
| dtm 0.1 is released from 20210604 and under fast development |
+* Easy to deploy, easy to extend
+ - DTM depends only on MySQL/Redis, easy to deploy, cluster, and scale horizontally.
-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)
-# Quick start
+## Quick start
### run dtm
@@ -77,14 +54,17 @@ git clone https://github.com/dtm-labs/dtm && cd dtm
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
git clone https://github.com/dtm-labs/dtmcli-go-sample && cd dtmcli-go-sample
go run main.go
```
-# Code
+## Code
### Use
``` go
@@ -102,29 +82,39 @@ go run main.go
// submit the created saga transaction,dtm ensures all subtractions either complete or get revoked
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).
+
-### Wechat
+#### Rollback upon failure
+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
-
+``` go
+app.POST(qsBusiAPI+"/TransIn", func(c *gin.Context) {
+ log.Printf("TransIn")
+ // c.JSON(200, "")
+ c.JSON(409, "") // Status 409 for Failure. Won't be retried
+})
+```
-### Give a star! ⭐
+The timing diagram for the intended failure is as follows:
-If you think this project is good, or helpful to you, please give a star!
+
+
+## More examples
-### Who is using
-
-
-
-
-
-
@@ -26,49 +26,26 @@ DTM is a distributed transaction solution which provides cross-service eventuall
## 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
- Suit for companies with multiple-language stacks.
Easy to write bindings for Go, Python, PHP, Node.js, Ruby, and other languages.
-* Easy to deploy, easy to extend
- - DTM depends only on MySQL, easy to deploy, cluster, and scale horizontally.
-
-* Support for multiple distributed transaction protocol
- - TCC, SAGA, XA, Transactional messages.
+* Support for multiple distributed transaction solutions
+ - TCC, SAGA, XA, 2-phases message.
-## DTM vs. others
-
-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.
+* 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.
-| Features | DTM | Seata | Remarks |
-| :-----: | :----: | :----: | :----: |
-| Supported languages | Golang, Python, PHP, and others | Java | dtm allows easy access from a new language |
-| Exception handling | [Sub-transaction barrier](https://zhuanlan.zhihu.com/p/388444465) | manual | dtm solves idempotent transaction, hanging, null compensation |
-| TCC | ✓ | ✓ | |
-| XA | ✓ | ✓ | |
-| AT | suggest XA | ✓ | AT is similar to XA with better performance but with dirty rollback |
-| SAGA | support concurrency | complicated state-machine mode | dtm's state-machine mode is being planned |
-| Transactional Messaging | ✓ | ✗ | dtm provides Transactional Messaging similar to RocketMQ |
-| Multiple DBs in a service |✓|✗||
-| Communication protocols | HTTP, gRPC | Dubbo, no HTTP | |
-| Star count |
-### Wechat
+#### Rollback upon failure
+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
-
+``` go
+app.POST(qsBusiAPI+"/TransIn", func(c *gin.Context) {
+ log.Printf("TransIn")
+ // c.JSON(200, "")
+ c.JSON(409, "") // Status 409 for Failure. Won't be retried
+})
+```
-### Give a star! ⭐
+The timing diagram for the intended failure is as follows:
-If you think this project is good, or helpful to you, please give a star!
+
+
+## More examples
-### Who is using
-
-
-
-
-
-