From 2b7a2ce72b23a44fc2d2cbc2f90aa23a2e3ed4b0 Mon Sep 17 00:00:00 2001 From: yedf2 <120050102@qq.com> Date: Wed, 23 Feb 2022 16:45:47 +0800 Subject: [PATCH] update readme --- README.md | 94 ++++++++++++++++++++------------------------- helper/README-en.md | 94 ++++++++++++++++++++------------------------- 2 files changed, 84 insertions(+), 104 deletions(-) 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: function-picture @@ -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 | github stars | github stars | 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). +saga-success -### 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 -![yedf2008](http://service.ivydad.com/cover/dubbingb6b5e2c0-2d2a-cd59-f7c5-c6b90aceb6f1.jpeg) +``` 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! +saga-failed + +## More examples -### Who is using -
- Tencent - Ivydad - Eglass - Jiou - GoldenData -
+Refer to [dtm-examples](https://github.com/dtm-labs/dtm-examples). + +## Slack + +You can join the [DTM slack channel here](https://join.slack.com/t/dtm-w6k9662/shared_invite/zt-vkrph4k1-eFqEFnMkbmlXqfUo5GWHWw). + +## Give a star! ⭐ + +If you think this project is good, or helpful to you, please give a star! diff --git a/helper/README-en.md b/helper/README-en.md index 4c14c6f..0d3f29c 100644 --- a/helper/README-en.md +++ b/helper/README-en.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: function-picture @@ -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 | github stars | github stars | 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). +saga-success -### 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 -![yedf2008](http://service.ivydad.com/cover/dubbingb6b5e2c0-2d2a-cd59-f7c5-c6b90aceb6f1.jpeg) +``` 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! +saga-failed + +## More examples -### Who is using -
- Tencent - Ivydad - Eglass - Jiou - GoldenData -
+Refer to [dtm-examples](https://github.com/dtm-labs/dtm-examples). + +## Slack + +You can join the [DTM slack channel here](https://join.slack.com/t/dtm-w6k9662/shared_invite/zt-vkrph4k1-eFqEFnMkbmlXqfUo5GWHWw). + +## Give a star! ⭐ + +If you think this project is good, or helpful to you, please give a star!