参与seata社区到go与seata的邂逅

dksl dksl     2023-03-21     426

关键词:

??众所周知,这几年微服务、云原生提得很火热。2017年,当时公司的领导刘巍,敏锐得提出公司转型微服务。那时,提到微服务大家一头雾水,经过两年的实践,逐渐有了一些心得。但有个问题始终萦绕在微服务开发者的头上,分布式事务到底如何解决,有没有比较完美的方案?二阶段提交、柔性事务、最终一致性?

??2019 年,我注意到阿里巴巴的同学在社区调研分布式事务需求,立即加入了社区群。在 seata 0.2 版本的时候,当时还不叫 seata,叫 fescar,我看到 seata 代码仓库里只有 dubbo 结合 seata 的 sample,随即在博客园写了一篇 spring boot 如何结合 seata 的博文 Spring Boot微服务如何集成seata解决分布式事务问题? ,这篇文章后来被收录到 seata wiki 里面,收获到了 18000+ 的阅读量,是我阅读量最高的一篇博客。

??后来,由于工作比较忙,屡次想参与 seata 贡献,发现了几个 bug,本来想修改来着,结果看社区里边已经有人在做了??。

??由于接触微服务,自然而然接触到 k8s 技术,接触到云原生,接触到 golang。个人对 golang 比较感兴趣,比较看好它的未来。看到社区里面也有关于 seata go client 的呼声,遂萌生了打造 golang 版 seata 的想法。

??有人问:喂,同学,我技术差,不懂 seata,我能参与 seata-golang 项目吗?其实我刚开始写 seata-golang 的时候也有这样的疑问,我接触 golang 不久,seata 有些细节也不是太明白,我怎么开始?其实掌握到方法论,开始就不难了。首先,掌握几个概念,TC(Transaction Coordinator)、TM(Transaction Manager)、RM(Resource Manager);然后弄明白这几个概念是干什么的,下面这张图就很好的概括了他们的职责、功能。清楚这些东西后,就是抽象接口啦。接口抽象出来后,就实现,seata 里面那么多的实现,通信序列化协议有 seata、protobuf、jackson、kryo、hessian、fst,sesssion manager 有基于内存的,也有基于 DB 的,先选择最简单你最有把握的实现。

技术图片

??目前 seata-golang 版本,已经实现基于内存的事务数据管理(session manager),client 端已经实现 TCC 模式。AT 模式的实现还有些细节没有考虑好,比如 sql 解析,主键如何处理等;metrics 收集器还未考虑;从配置中心读取配置等。这些问题,都是值得思考并参与贡献的。

源码??seata-golang

TC Server 调试

  • 先在 Goland 配置环境变量,配置为 config.yaml 文件的绝对路径

    技术图片

    技术图片

  • 运行 main.go,系统默认监听 8091 端口。

  • Demo 客户端的代码??seata-demo,设置service.localRgroup.grouplist = "127.0.0.1:8091",运行 demo 即可调试。

目前,Java client 的 AT 模式和 TCC 模式,连接 Go 版 TC,能正确提交和回滚。

Go Client 调试

可能 Gopher 们比较关心 Seata Go Client。如文章一开始提到的,当前只支持TCC 模式。运行也比较简单,直接运行 samples 文件夹中,tcc 文件夹下的 main.go,默认会去连接 127.0.0.1:8091。

技术图片

访问 http://localhost:8080/commit, 模拟的 TCC 事务提交。

访问 http://localhost:8080/rollback, 模拟的 TCC 事务回滚。

可以连接 Go 版本的 TC Server,也可以连接 Java 版的 TC Server,都能正确提交回滚。

声明:当前的 Seata Golang 版还比较粗糙简陋,存在一些未知 bug,分享出来仅作技术交流与研究。Go 版本的 TC,全局事务、分支事务是直接存放在内存中的,还未持久化,预计五一假期结束支持持久化事务数据到 DB 中,届时可以体验原汁原味的 golang 版的分布式事务解决方案。最后,非常欢迎志同道合的朋友一起来共建。

seata的部署与微服务集成(代码片段)

文章目录部署Seata的tc-server1.下载2.解压3.修改配置4.在nacos添加配置5.创建数据库表6.启动TC服务微服务集成seata1.引入依赖2.修改配置文件部署Seata的tc-server1.下载首先我们要下载seata-server包,地址在http😕/seata.io/zh-cn/blog/downl... 查看详情

seata的部署与微服务集成(代码片段)

文章目录部署Seata的tc-server1.下载2.解压3.修改配置4.在nacos添加配置5.创建数据库表6.启动TC服务微服务集成seata1.引入依赖2.修改配置文件部署Seata的tc-server1.下载首先我们要下载seata-server包,地址在http😕/seata.io/zh-cn/blog/downl... 查看详情

seata-分布式事务与seata(代码片段)

分布式事务与Seata分布式事务分布式事务是个现实中很常见的现象,日常的跨行转账就是一个很典型的分布式事务。现实中,每个银行各自管理各自的账户,在执行跨行转账时,需要确保转出账户扣费正确,转入账户增加正确的... 查看详情

分布式事务-seata框架demo运行

...架所能达到的效果再进行深入地学习。本篇文章将会介绍seata的一个入门使用demo,作为使用seata的入门学习文章。使用案例首先到github中下载一个RM的运行服务,本例中使用的是:https://github.com/seata/seata/releases/download/v1.2.0/seata-serve... 查看详情

win10安装seata1.3.0(图解版)

目录一、seata1.3.0安装前提条件二、seata1.3.0下载二、seata1.3.0安装1、解压2、创建数据库并导入数据3、修改file.conf文件4、修改registry.conf文件5、修改nacos-conf.txt文件三、启动nacos四、启动seata一、seata1.3.0安装前提条件安装nacos并启动... 查看详情

win10安装seata1.3.0(图解版)

目录一、seata1.3.0安装前提条件二、seata1.3.0下载二、seata1.3.0安装1、解压2、创建数据库并导入数据3、修改file.conf文件4、修改registry.conf文件5、修改nacos-conf.txt文件三、启动nacos四、启动seata一、seata1.3.0安装前提条件安装nacos并启动... 查看详情

分布式事务seata上手指南

官方文档地址:Seata部署指南Seata分TC、TM和RM三个角色,TC(Server端)为单独服务端部署,TM和RM(Client端)由业务系统集成。https://seata.io/zh-cn/docs/ops/deploy-guide-beginner.html下载release服务端的安装包,... 查看详情

分布式事务seata上手指南

官方文档地址:Seata部署指南Seata分TC、TM和RM三个角色,TC(Server端)为单独服务端部署,TM和RM(Client端)由业务系统集成。https://seata.io/zh-cn/docs/ops/deploy-guide-beginner.html下载release服务端的安装包,... 查看详情

阿里分布式中间件seata从入门到精通

最近在写一本关于阿里巴巴分布式事务中间件Seata的电子书,Seata可以说是分布式事务中间件中最完善的了,包括了AT、TCC、Saga、XA四种模式,目前Seata已经更新到了1.4.2版本。这本电子书主要分成两部分,第一部分... 查看详情

seata集群部署(代码片段)

Seata集群部署一、环境操作系统:Centos7及以上或MacSeata版本:1.3.0Nacos版本:2.0.4Seata单机部署Seata中文网站二、部署集群部署其实还是相对容易的,从Seata服务角度来讲的话,其实就是把Seata多个服务节点注册到... 查看详情

基础篇seata简介

...忙总是一个很好的借口。于是乎希望走个捷径,直接上手seata这款阿里巴巴发布的分布式事务中间件。寄希望于对这块中间件的阅读获得比较多的事务知识内容。本文是seata的第一篇,将做一些简要的介绍,有个初步的了解。 ... 查看详情

1.4.2seata以nacos作为注册中心的配置和使用(代码片段)

1.4.2Seata以nacos作为注册中心的配置和使用下载Seata1.4.21.解压Seata1.4.22.Seata目录如下3.下载SeataSourceCode4.解压后找到Script目录配置seata1.创建相关数据库和表建表语句2.修改file.conf文件3.修改registry.conf文件4.把配置上传到nacos在context.txt... 查看详情

whats'snewinseata1.6.x(代码片段)

Seata是一款开源的分布式事务解决方案,star高达23000+,社区活跃度极高,致力于在微服务架构下提供高性能和简单易用的分布式事务服务,本文将剖析Seata1.6.x版本的核心特性,让用户对Seata有更深入的认识。作者: 陈健斌git... 查看详情

seata分布式事务seata的使用及原理(代码片段)

文章目录1.Seata是什么1.1Seata的三大角色1.2设计思路1.3设计亮点1.4存在的问题2.Seata快速开始2.1SeataServer(TC)环境搭建2.2SeataClient快速开始1.Seata是什么Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易... 查看详情

seata分布式事务seata的使用及原理(代码片段)

文章目录1.Seata是什么1.1Seata的三大角色1.2设计思路1.3设计亮点1.4存在的问题2.Seata快速开始2.1SeataServer(TC)环境搭建2.2SeataClient快速开始1.Seata是什么Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易... 查看详情

微服务(十六)——分布式事务seata(代码片段)

...式 3)实现XA模式1、修改application.yml文件(每个参与事务的微服务),开启XA模式:2、给发起全局事务的入口方法添加@GlobalTransactional注解,3、重启服务并测试四、AT模式1)AT模式原理五、TCC模式1&#x... 查看详情

1.4.2seata以nacos作为注册中心的配置和使用(代码片段)

1.4.2Seata以nacos作为注册中心的配置和使用1.下载Seata1.4.2(1).解压Seata1.4.2(2).Seata目录如下(3).下载SeataSourceCode(4).解压后找到Script目录2.配置seata(1).创建相关数据库和表建表语句(2).修改file.conf文件(3).修改registry.conf文件(4).把配置上传... 查看详情

seata(seata配置高可用)

参考技术A客户端要注册到nacosstoremode="db"file##storelocationdirdir="sessionStore"#branchsessionsize,ifexceededfirsttrycompresslockkey,stillexceededthrowsexceptionsmaxBranchSessionSize=16384#globesessionsize,ifexceededthrowsexceptionsmaxGlobalSessionSize=512#filebuffer... 查看详情