目录
- Github
- 微服务中数据一致性问题
- 分布式事务的解决方案
- Seata 高可用Setup
- Seata 配置遇到的问题
- Seata AT客户端Debug
- 业务服务
- 总结
Github
结构
- account / business / order / storage 业务服务,参考Seata http://seata.io/zh-cn/docs/user/quickstart.html
- devops服务的部署和环境的初始化
- doc文档说明
微服务中数据一致性问题
分布式事务的解决方案
在此理论基础上,有TCC, Saga, 分布式消息等分布式事务的解决方案
Seata 高可用Setup
Consul
目前Consul Setup有一些问题,可以参考Github issue
https://github.com/seata/seata/issues/3777
当时希望采用Consul来作为服务注册中心,调试了很久,环境终于Setup完,但是发现了一些错误,最终放弃修正问题,有一些公司修正了问题,但是没找到开源的代码,官方还没有解决。为了快速验证功能,转而去Setup naocos的配置。
本地测试环境Setup: https://github.com/pjhu/seata/tree/master/devops/local/consul
K8s 测试环境Setup: https://github.com/pjhu/seata/tree/master/devops/k8s-seata/consul
Setup遇到的问题:https://github.com/pjhu/seata/blob/master/doc/setup-consul-qa.MD
Nacos
本地测试环境Setup: https://github.com/pjhu/seata/tree/master/devops/local/nacos
K8s 测试环境Setup: https://github.com/pjhu/seata/tree/master/devops/k8s-seata/nacos
Setup遇到的问题:https://github.com/pjhu/seata/blob/master/doc/setup-nacos-qa.MD
注意事项
- local 环境配置,需要注意Docker-compose file 中Seata的IP, 本地的IP会经常的变更
Seata 配置遇到的问题
可参考: https://github.com/pjhu/seata/blob/master/doc/setup-seata-qa.MD
Seata AT客户端Debug
可参考:https://github.com/pjhu/seata/blob/master/doc/source-code-debug.md
主要看了下分布式事务Xid的传递,由于使用的Feign做服务间调用,Feign在执行采用了SeataFeignClient,替换了client, 后续服务通过Spring MVC 执行 SeataHandlerInterceptor,解析xid 放入RootContext中,更上下文使用,最终会存入undo-log
业务服务
- 技术栈:spring boot + Java 11 + Feign + Jpa + Gradle + mysql 8
- 各服务的Applicaiton.yaml
- 服务的启动和执行日志 https://github.com/pjhu/seata/blob/master/doc/service-startup-log.MD
总结
虽然在配置中遇到了很多问题,网上都有响应的解决办法。在配置Consul过程中,花费的大量的时间,使用Nacos相对顺畅很多,可能是因为都是Ali这个开源大家族的,对Ali Cloud一套技术栈兼容更好。Consul的问题,期待后续的迭代会改善这个问题。