Giter Club home page Giter Club logo

dtm's Introduction

license Build Status Coverage Status Go Report Card Go Reference

A lightweight 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

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.

The following is a comparison of the main features of dtm and seata:

Features DTM SEATA Remarks
Supported languages Golang, python, php and others Java dtm can easily support a new language
Exception Handling Sub-transaction barrier automatic processing 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

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

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

  // 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

Wechat Group

Please add wechat yedf2008 friends or scan the code to add friends

yedf2008

If you think this project is good, or helpful to you, please give a star!

Who is using

ivydad eglass

Following is keyword for SEO

分布式事务框架

事务消息

可靠消息

微服务

dtm's People

Contributors

yedf2 avatar ansionfor avatar jinwuu avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.