涉及到的相关技术
1.DTM分布式事务管理器,解决跨数据库、跨服务、跨语言栈更新数据的一致性问题。
2.SAGA事务模式,SAGA事务模式是DTM中常用的一种模式,简单易上手.(当然还有其它更多的事务模式,这里采用的SAGA只不过是其中一种较为简单的方法)
3.Go-zero框架,ETCD服务注册...
更多内容移步至:go-zero 缩短从需求到上线的距离 和 介绍 | DTM开源项目文档
业务场景
如果是在单体架构的业务当中,是不需要用到分布式事务的.单体架构中,涉及到需要保证多个事务同时成功的场景,只需要创建一个全局的事务对象 如:tx := db.Begin(),然后统一用这一个tx去管理接下来的业务逻辑即可.
不清楚在一个api中如何调用其它服务rpc的可以看看我的另一篇博客中的一种解决办法:
go-zero标准的项目结构,以及如何使用docker-compose部署道linux服务器上-优快云博客
但是在go-zero框架的这种微服务中,比如说:我在一个用户服务的api中调用了用户服务rpc中注册的业务,并且同时还调用了标签服务的rpc层中的选择标签的业务. 那么,此时我就需要保证用户的注册和标签的选择这两个在不同服务下执行的业务逻辑同时成功.(总不能用户账号密码插入到的表中,但是突然断网了,导致标签没有选择上去吧,这个是不符合我的业务的).
DTM 环境搭建(Windows本地搭建)
!!!!!!!!!!!!!! 这个环境请注意,是需要在你本地去搭建的,至于为什么,我会在后面解释,最重要的先把环境搭建起来吧! 我采用的是docker-compose去搭建.(如果不了解windows电脑如何配置docker环境,可以移步:)
Windows11电脑是如何搭建docker环境的-优快云博客
废话不多说,首先从搭建环境讲起.(我这里采用的是docker-compose搭建我需要的环境)

上图就是项目的结构
在dtm和etcd的目录下面各自新建一个Dockerfile文件,Dockerfile都不需要过多的配置,只需要用到最基础的镜像即可.在dtm的目录下还需要新建一个config.yml文件.
DTM下Dokcerfile以及config.yml的编写
FROM yedf/dtm:latest
LABEL maintainer="zyf021026 <shichuxin6@163.com>"
# 指定要存储trans状态的存储驱动
# Store:
### 默认存储驱动
# Driver: 'boltdb'
### redis 存储驱动
# Driver: 'redis'
# Host: 'localhost'
# User: ''
# Password: ''
# Port: 6379
### mysql 存储驱动
# Driver: 'mysql'
# Host: 'mysql'
# User: 'root'
# Password: '123456'
# Port: 3306
### postgres 存储驱动
# Driver: 'postgres'
# Host: 'localhost'
# User: 'postgres'
# Password: 'mysecretpassword'
# Port: '5432'
### 以下配置仅适用于 postgres/mysql 驱动
# MaxOpenConns: 500
# MaxIdleConns: 500
# ConnMaxLifeTime: 5
# TransGlobalTable: 'dtm.trans_global'
# TransBranchOpTable:

本文介绍了DTM在处理跨服务一致性问题中的应用,包括SAGA事务模式的使用,以及在go-zero框架下,如何在用户服务中调用其他服务的RPC并确保事务的原子性。还详细描述了如何在Windows本地搭建DTM环境和编写相关配置。作者探讨了事务补偿机制与Undolog回滚原理的关系。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



