众所周知,这几年微服务、云原生提得很火热。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 Go Client 它来了!!!的更多相关文章

  1. 详解 Seata Golang 客户端 AT 模式及其使用

    源码seata-golang 概述   我们知道 Seata Java Client 的 AT 模式,通过代理数据源,实现了对业务代码无侵入的分布式事务协调机制,将与 Transaction Coor ...

  2. spring boot:shardingsphere+druid多数据源整合seata分布式事务(spring boot 2.3.3)

    一,为什么要给shardingsphere配置多数据源? 1,shardingjdbc默认接管了所有的数据源, 如果我们有多个非分表的库时,则最多只能设置一个为默认数据库, 其他的非分表数据库不能访问 ...

  3. spring boot:shardingsphere+druid整合seata分布式事务(spring boot 2.3.3)

    一,shardingshpere为什么要整合seata? 分库分表是数据库扩展中最常用的处理方法, shardingshpere作为使用最广泛的分表中间件, 如果不支持分布式事务,则它的数据一致性就会 ...

  4. Fescar(Seata)-Springcloud流程分析-2阶段

    上文我们分析了fescar的一阶段执行过程.在一阶段中,服务起始方发起全局事务并注册到TC.在调用协同服务时,协同服务的事务分支事务会先完成阶段一的事务提交或回滚,并生成事务回滚的undo_log日志 ...

  5. 分布式事务框架Seata及EasyTransaction架构的比对思考

    本文将会对比Seata与EasyTransaction两个分布式事务的一些高层设计,相信大家会有收获. Seata的概述 Seata(曾用名Fescar,开源版本GTS)是阿里的开源分布式事务框架,其 ...

  6. 开源分布式事务中间件Seata使用指南

    介绍 Seata 是阿里巴巴开源的分布式事务中间件,一种分布式事务解决方案,具有高性能和易于使用的微服务架构. 初衷 对业务无侵入:即减少技术架构上的微服务化所带来的分布式事务问题对业务的侵入 高性能 ...

  7. 阿里分布式事务seata入门(采坑)

    1. 阿里分布式事务seata入门(采坑) 1.1. 前言 seata是feascar改名而来,这是阿里在19年年初开源出来的分布式事务框架,当初刚出来的时候就想研究下了,一直拖到了现在,目前是0.8 ...

  8. Spring Cloud Alibaba | 微服务分布式事务之Seata

    Spring Cloud Alibaba | 微服务分布式事务之Seata 本篇实战所使用Spring有关版本: SpringBoot:2.1.7.RELEASE Spring Cloud:Green ...

  9. Spring Cloud同步场景分布式事务怎样做?试试Seata

    一.概述 在微服务架构下,虽然我们会尽量避免分布式事务,但是只要业务复杂的情况下这是一个绕不开的问题,如何保证业务数据一致性呢?本文主要介绍同步场景下使用Seata的AT模式来解决一致性问题. Sea ...

随机推荐

  1. OpenCV-Python 直方图-3:二维直方图 | 二十八

    目标 在本章中,我们将学习查找和绘制2D直方图.这将在以后的章节中有所帮助. 介绍 在第一篇文章中,我们计算并绘制了一维直方图. 之所以称为一维,是因为我们仅考虑一个特征,即像素的灰度强度值. 但是在 ...

  2. Springboot使用自定义注解实现简单参数加密解密(注解+HandlerMethodArgumentResolver)

    前言 我黄汉三又回来了,快半年没更新博客了,这半年来的经历实属不易,疫情当头,本人实习的公司没有跟员工共患难, 直接辞掉了很多人.作为一个实习生,本人也被无情开除了.所以本人又得重新准备找工作了. 算 ...

  3. Spring中应用的那些设计模式

    设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记,只是一直没有记忆. 今天,我们就设计模式的内在价值做一番探讨,并以spring为例进行讲解,只有领略了其设计的思想理念 ...

  4. Python第十二章-多进程和多线程02-多线程

    接上一章,进程和线程之间可以存在哪些形式呢? 1 单进程单线程:一个人在一个桌子上吃菜. 2 单进程多线程:多个人在同一个桌子上一起吃菜. 3 多进程单线程:多个人每个人在自己的桌子上吃菜. 多线程的 ...

  5. Linux 《conky配置说明书》

    名称 conky - 最初基于躯干代码的X系统监视器,但更多的kickass.它只是继续给予它.是啊. 概要 conky [ options ] 描述 Conky是最初基于torsmo的X系统监视器. ...

  6. C. Yet Another Walking Robot Round #617 (Div. 3)()(map + 前后相同状态的存储)

    C. Yet Another Walking Robot time limit per test 1 second memory limit per test 256 megabytes input ...

  7. 为何关键字static在面试中频频被问?

    关键字static的神奇妙用在今天的学习中,我了解到关键字static的作用,下面我来给大家分享一下.①static 修饰局部变量只改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束生 ...

  8. 记一次mysql多表查询(left jion)优化案例

    一次mysql多表查询(left jion)优化案例 在新上线的供需模块中,发现某一个查询按钮点击后,出不来结果,找到该按钮对应sql手动执行,发现需要20-30秒才能出结果,所以服务端程序判断超时, ...

  9. Django 配置访问顺序 ->MTV开发模式

    框架模式mvc m-->model 数据库 v-->view  视图 c-->controller  控件逻辑 mtv(django) m-->model 数据库 t--> ...

  10. django 利用ORM对单表进行增删改查

    牛小妹上周末,一直在尝试如何把数据库的数据弄到界面上.毕竟是新手,搞不出来,文档也看不懂.不过没关系,才刚上大学.今晚我们就来解释下,要把数据搞到界面的第一步.先把数据放到库里,然后再把数据从库里拿出 ...