一、周末没事就想了解一下seata框架,首先跑通它官网提供的例子

1,因为我已经有k8s集群了,我就按k8s的安装步骤高可用的服务端,关于seata的工作原理,可以去官网了解 :seata官网地址。注意如果你使用的最新的docker镜像,官网步骤里的参数设置不生效了,通过使用docker cp 命令拷贝镜像到本地,你会发现它已经使用yaml文件来设置参数。

2、seata服务的工作模式:

docker安装Seafile 客户端 docker seata_maven

3、所有服务都避免单点故障,seate有三种模式,文件、db、redis,我这边选择数据库模式,后面做压测的把它改成redis方式,redis方式效率高。服务注册使用nacos,你可以根据自己的需要修改。

4、k8s上部署我修改了版本号1.4.2和seata服务注册到nocas这两个地方,部分yaml文件如下:

docker安装Seafile 客户端 docker seata_官网_02


5、nocas服务搭建,可以从官网上看,也是k8s的方式,部署成功的结果如下:

docker安装Seafile 客户端 docker seata_官网_03


从上图你可以到mysql也是一主两从的方式,seata服务是3个实例提供服务,nacos跟mysql都是有状态pods(statefulSet)。然后把这个服务通过ingress暴露出来给外部使用,如果你只是在k8s集群内部使用,直接使用service就可,ingress服务跟浏览器访问的界面如下:

docker安装Seafile 客户端 docker seata_官网_04


docker安装Seafile 客户端 docker seata_spring_05


我们登陆后,查询seata服务端的服务是不是已经成功的注册上去了。如果在生产上,seata服务应该是一个单独的集群,以服务的方式对外提供。记住在运行注册seata前,需要按官网的的步骤先把参数增加到nacos,官网提供了一个脚本直接导,导成功后的界面如下:

docker安装Seafile 客户端 docker seata_spring_06


修改里面的store.mode=db,同时修改里面参数store.db.url为上面部署的mysql数据库。

当seata-ha-server服务运行成功后,你在nacos能看到的它的注册信息,会看到seata-server服务有3个实例提供服务:

docker安装Seafile 客户端 docker seata_docker_07


6、现在seata服务端已经配置完成,它能提供分布式事务服务的控制了。

7、我们现在来从seata官网取一个例子来测试这个服务,我已经从github上取一个spring-boot,dubbo的例子,拉取到本地

docker安装Seafile 客户端 docker seata_spring_08


因为我采用的是jenkins直接部署到k8s上,所以我直接把部署的yaml也增加到代码管理里,如下图:

docker安装Seafile 客户端 docker seata_docker安装Seafile 客户端_09


参考seata官网客户端的配置,在每个模块中增加增加一个undo_log表,如下图:

docker安装Seafile 客户端 docker seata_docker_10


修改相关的配置后,提交代码到github上,测试代码,然后打开的jenkins,你也可以设置jenkins定时构建,界面如下:

docker安装Seafile 客户端 docker seata_官网_11


你可以只单独的更新构建部署某一个模块,也可以整个项目更新部署(my-parallel2),部署后的pods运行情况如下:

docker安装Seafile 客户端 docker seata_官网_12


你会发现有:account-deployment,logic-deployment,order-deployment,storage-deployment这四个部署,我们现在这个模块的服务是不是已经注册到nacos上了,注意你的代码里关于seata客户端的注册你也需要指定为nacos,并指定nacos地址,seata客户端注册nacos成功后,如下图:

docker安装Seafile 客户端 docker seata_spring_13


你能找到提供者,消费者,我这里每个模块只部署了一个实例,你可以随意裁剪扩展,这就是K8s的优势,我们可以看下k8s后台的管理界面:

docker安装Seafile 客户端 docker seata_maven_14


我们也可以从k8s管理控制台看到每个服务的运行情况。

8、现在我们可以来测试这个测试是不是可以正常使用了,我使用postman发请求http://logic.yuanzhibin.com:9080/business/dubbo/buy,交易成功:

docker安装Seafile 客户端 docker seata_docker安装Seafile 客户端_15


9,我们检查下数据库订单情况,是不是跟账户,金额,库存能对上,测试的时候,我们可以让它每10笔失败1笔交易:

docker安装Seafile 客户端 docker seata_docker安装Seafile 客户端_16


10,下章我们引入服务幂等,引用redis,引入缓存,用jmeter压测下这个seata服务,测下它交易的吞吐量。