本文由 发布,转载请注明出处,如有问题请联系我们! 发布时间: 2021-08-01go语言实战项目-编程语言排行榜
加载中在引进go语言表达做微服务架构的环节中,大家精英团队达到了分布式事务的强劲要求。大家的交易市场涉及到很多的业务流程,包含产品,库存量,各种各样活动营销,产品利益等。依据大家微服务架构的设计方案,必须将其拆分成好几个微服务架构。本来由当地事务管理确保的ACID,如今必须分布式事务计划方案来确保事务管理的准确性。
大家调研了大批量的开源软件,发觉仅有java为分布式事务给予分布式数据库,而别的语言表达都还没寻找成长的解决方法。在这类情况下,我们在內部开发设计了一个用以go语言表达分布式事务的DTM新项目。等发布平稳后,大家再开启。github详细地址是yedf/dtm。
尽管DTM最开始对于的是大家的go语言表达微服务架构,但人们的方案设计考虑到了跨语言表达的特性,将最底层通讯设计方案为HTTP(将来会适用grpc),用非常少的编码就把手机客户端做得变轻。
使我们看一个简洁的事例,Go语言浏览DTM:
const DtmServer = "http://localhost:8080/api/dtmsvr"const startBusi = "http://localhost:8081/api/busi_saga"req := &gin.H{"amount": 30} // 微服务架构的负载// 转化成dtm的saga目标saga := dtm.SagaNew(DtmServer). // 加上三个子事务管理 Add(startBusi "/TransOut", startBusi "/TransOutCompensate", req). Add(startBusi "/TransIn", startBusi "/TransInCompensate", req) // 递交saga事务管理err := saga.Commit()递交给dtm的saga买卖包含三个子买卖TransOut和TransIn,及其与这三个子买卖相匹配的赔偿买卖。买卖递交给DTM后,DTM确保要不全部TransOut TransIn取得成功实行,要不一切子交易失败,实行的子买卖以后会出现相对应的赔偿买卖。
假如TransOut和TransIn取得成功实行,状态图如下所示:

