Git Product home page Git Product logo

dtm-labs / dtm Goto Github PK

View Code? Open in Web Editor NEW
9.7K 101.0 956.0 3.94 MB

A distributed transaction framework, supports workflow, saga, tcc, xa, 2-phase message, outbox patterns, supports many languages.

Home Page: http://d.dtm.pub

License: BSD 3-Clause "New" or "Revised" License

Go 87.82% Shell 1.22% Makefile 0.27% JavaScript 0.75% Smarty 0.34% HTML 0.11% Vue 6.36% TypeScript 2.50% CSS 0.01% TSQL 0.62%
saga xa tcc microservice seata go dtm golang distributed transaction

dtm's People

Contributors

chiwency avatar dependabot[bot] avatar fsdfsffdsf avatar gdlcf88 avatar geffzhang avatar goxiaoy avatar hanyue2019 avatar hitzhangjie avatar horselk avatar huanghao9015 avatar jxlwqq avatar leizhengzi avatar li-xiao-shuang avatar lsytj0413 avatar makonike avatar namejlt avatar ostafen avatar rennbon avatar stulzq avatar tinattwang avatar vicnoah avatar wei98k avatar wondar-chan avatar wooln avatar wuqinqiang avatar wz14 avatar xyctruth avatar ychensha avatar yedf2 avatar zxmfke avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dtm's Issues

校验mysql|postgres配置

当存储引擎配置为mysql|postgres时,详细校验相关的参数,并给出详细的错误提示

没有user_account表

安装好后,执行:
go run app/main.go quick_start
提示:
----panic unknown response: {"code":500,"message":"Error 1146: Table 'dtm_busi.user_account' doesn't exist"}, will be retried handlered

看数据库里,只有三张表:
image

SAGA模式支持sql解析吗

我看到python的示例里面的SAGA模式回退是使用的手动写的补偿函数,该项目支持像SAGA那种sql解析逆向回退吗

Wait Result Option does not work

In your example, I can see code
saga.WaitResult = true
or

saga.SetOptions(&dtmcli.TransOptions{WaitResult: true})

But both of them seem not work, when I call err := saga.Submit(), It return nil before excute grpc function. My code

var DtmGrpcServer = fmt.Sprintf("localhost:%d", 36790)
fmt.Println(DtmGrpcServer)

gid := dtmgrpc.MustGenGid(DtmGrpcServer)
fmt.Println(gid)
fmt.Println("before init")

sagaServer := dtmgrpc.NewSagaGrpc(DtmGrpcServer, gid)
saga := sagaServer.
Add("localhost:50051"+"/api.account.v1.User/CreateUser", "localhost:50051"+"/api.account.v1.User/CreateUserRevert", req)
// saga.WaitResult = true
// saga.WaitResult = true
saga.SetOptions(&dtmcli.TransOptions{WaitResult: true, TimeoutToFail: 0, RetryInterval: 0})

fmt.Println("before submit")
err := saga.Submit()
dtmimp.FatalIfError(err)
fmt.Println("after submit")
return nil, err

So I config wrong or something else ? . Tks

FAQ

目前可以用于生产环境吗?

版本v 0.5 以后即可,目前已有多家大厂多个业务在使用

支持高可用吗?

支持,DTM可以部署多个无状态的应用节点,连接到数据库,只要数据库是高可用的,那么整个DTM就是高可用的

如何设计订票业务

参考文章深度剖析saga分布式事务

TCC/SAGA的回滚失败怎么办

参考不允许失败

版本发布疑问?

请问新版本的发布有什么规则吗?感觉有点随意呢,v1.5.x和v1.6.x发布的间隔怎么短,而且更新的内容也不多,也不是那种重大的功能和bug修改,给人一个不是很稳定,还在快速迭代但是每次的更新内容又很少的错觉。虽然官方在v1.0有说明已经很稳定了,但是给人的信心不够。

校验Redis配置

当配置的存储引擎为Redis时,对配置进行详细的校验,给出详细的错误提示

TransBranch的changeStatus是不是少了条件gid和branch_id

是不是写成
func (t *TransBranch) changeStatus(db *common.DB, status string) *gorm.DB {
writeTransLog(t.Gid, "branch change", status, t.BranchID, "")
dbr := db.Must().Model(t).Where("gid=?", t.Gid).Where("branch_id=?", t.BranchID).Where("status=?", t.Status).Updates(M{
"status": status,
"finish_time": time.Now(),
})
checkAffected(dbr)
t.Status = status
return dbr
}

Saga模式下,微服务2失败但没有回滚补偿

1、场景:用户1扣30元(成功),用户2扣30元(失败),事务没有补偿

2、具体步骤,把用户1余额设置为30元,用户2余额设置为0元,数据表字段设置为unsigned无符号

3、调用:go run app/main.go saga_barrier

4、报错:----panic unknown response: {"code":500,"message":"Error 1690: BIGINT UNSIGNED value is out of range in '(dtm_busi.user_account.balance + ?)'"}, will be retried handlered

5、重试了两次之后就没有重试了,并且事务没有回滚,用户1依然被扣了30元

6、global表数据,截图时间已超过next_cron_time的时间
image

子事务注册接口支持传入header

调用正向和补偿操作的接口都需要鉴权,鉴权是通过读取header头里面的鉴权token来实现的
是否可以支持在注册的时候把鉴权信息放在header头带上呢。

boltdb存储清除过期数据

当存储引擎为boltdb时,根据配置中的Store.DataExpire,在boltdb第一次打开时,清理已过期的数据

这个难度较高,需要对dtm如何在boltdb存储事务的方式有了解

建议考虑使用独立的数据库表创建和维护包,而不是直接使用gorm

当前DTM是利用gorm包在服务运行中动态的进行数据库表的创建和维护。但是在生产中这可能会带来不可预期的锁库时间,如某个表数据量很大,现在需要在表中增加一列,或者调整索引。

因此建议,是否考虑使用类似github.com/rubenv/sql-migrate, 这样的数据库表创建和维护包,把对数据库的维护独立出来。这样可以在运维时间单独进行数据库的维护。保证生产环境下的性能。

一些问题咨询

具体业务开发要在dtm框架里面实现?

dtm 里 orm 相关代码可能无法做到db上的分布式,db层分布式怎么实现?上 db proxy 实现?

SAGA模式下,逆向操作可以传参吗?

Add子事务的时候Add(payfsm.provider+"/TransOut", payfsm.provider+"/TransOutCompensate", req)
req这个参数在执行transout时被传入,那么发生逆向操作时,是不是也会把这个req传入?

如何参与dtm?

如果您想要参与dtm项目,贡献您的力量,您可以参考以下内容,逐步上手参与dtm。

熟悉PR流程

您的贡献是通过PR流程进行的,简单的PR教程可以参考这个链接:https://juejin.cn/post/6844903821521469448

下面问题仅为了练手,请您做一个文件的修改即可,而不要将所有文件都进行修改

  • dtmsvr/trans_* 文件,加上开源版权注释,每个文件作为一个任务,发一个PR

简单问题

您可以通过这个链接 easy issue,搜索出简单问题的issue,然后在issue的评论中,说明自己已经在解决。当您解决之后,提交完PR,然后将issue链接到PR(这步可以让review人员方便的看到这个PR是解决什么问题的)。

dtm的人员将会review您的PR和issue,没有大的问题,会合并您的PR

这类问题也仅仅为了练手,请您做1~2个issue即可,将更多其他的功能,留给其他新手练习

解决实际问题

您可以通过这个链接 medium issue,搜索出实际问题的issue,可能为bug,也可能为dtm需要的新功能,步骤和简单问题相同。

这类问题不是为了练手,如果您有较多精力,可以多帮忙解决问题

这类问题需要您搭建dtm的开发测试环境,搭建指南参考:https://dtm.pub/other/develop

挑战核心功能

您可以通过这个链接core issue,搜索出核心功能相关的issue,这类问题或功能,涉及dtm的深入理解,对代码质量要求也高,我们的review也会更严格。希望您提供高质量的PR。如果您在这方面的贡献大,未来dtm会很愿意将您发展为PMC。

能否提供一个简单的GO实例呢?

能否提供一个简单的GO实例呢?
我查看了一个您现有的go例子,还没有看懂怎么用。能否出一个连接数据库的操作实例来。这样比较容易知道怎么去操作了。

Who is using dtm

Who is using dtm

If you are using dtm, please submit a comment in this issue like this:

谁在使用 dtm

如果您正在使用dtm,我们期待您能在此提交一条评论, 您可以参考下面的样例来提供您的信息:

Optimize the config-related code.

Note that the common/types.go file includes two types of logical code: database and config related operations. Is it possible to consider that

  • Split common/types.go to two files, common/config.go and common/db.go.
  • Make the init code in common/types.go file explicit with the singleton pattern.
  • Make hard coded port in dtmsvr/dtmsvr.go configured in config.yaml.
  • Remove RetryLimit, which is not used anywhere.

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.