Seata-微服务架构开发的必备利器
——季敏
Seata开源社区负责人
01 What is New in Seata 1.5.0?
Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式务服务,于 2019 年 1 月正式开源。目前有四种事务模式,分别是AT 事务模式(阿里独创)、 TCC事务模式、XA 事务模式以及 Saga事务模式,基本囊括了市面上大部分事务模式,可以成为是一个一站式的分布式事务解决方案。
Seata 对市面上主流的 RPC 框架和数据库都做了广泛的集成和支持,也被很多第三方社区做了主动和被动集成。目前它支持 Java、Go、PHP、Python 等多语言,已经被上千家企业在业务系统中应用。金融领域也在积极试点,用 Seata处理核心账务问题等。
截至目前,Seata 社区已收获接近 22k star,有 300 家 contributor 参与了 Seata 社区的代码提交,与 Skywalking、Shardingsphere 等众多 RPC 框架和数据库框架做了集成。
微服务架构是今年业内绕不开的词。那么,微服务架构下,会受到哪些数据一致性的困扰?
场景1:将单体应用拆分成若干个微服务,比如有ABC 三个微服务,由各自不同的团队维护。假设 C 团队的微服务正在发布部署,但 A 业务入口可能有业务流量的调用,此时无法调用 C,一旦调用不通,则会出现数据一致性问题。
场景2:C 节点宕机。
场景3:C 节点负载较高或出现网络抖动,B 调用 C 时出现 timeout,无法判断 C 的业务逻辑有没有真正被执行,最终也会导致 AB 节点业务数据的一致性问题。
场景4:服务链路里有各自的技术栈,不同的技术栈有不同的技术组件依赖,因而也无法保证ABC 整个服务链路业务逻辑数据的一致性。
场景5: C 节点遇到业务异常,导致认为 AB 节点的业务逻辑是非法的,因此 AB节点需要做数据回滚才能保证一致性。但是没有分布式事务框架则难以保证链路微服务节点之间的数据一致性。
总结而言,常见的数据一致性场景可以分为两种情况:
系统异常:①服务不可达:网络、宕机、服务上下线或者熔断限流等。②服务超时。
业务异常:①业务校验非法。②运行时异常。
而 Seata 的出发点就是解决微服务架构数据一致性带来的困扰。
分布式事务产生的原因可以总结为以下四类:
第一类:跨数据库的操作。随着业务规模的增长,单库容量和连接数都难以满足业务需求,会出现分库。而一旦出现分库,就会出现分布式事务的业务场景。
第二类:跨系统的分布式事务。与第三方系统交互(不同的系统之间)会产生分布式事务问题;另外,企业内部系统之间的交互也会产生分布式事务的问题。
第三类:跨服务的分布式事务。业务服务化之后,资源与客户端的调用解耦,同时要保证多个微服务间的变化强一致,否则会造成业务数据不完整。
第四类:跨数据库与消息的分布式事务。在某些业务中,需要进行多个DB 操作,同时还会调用消息系统,需要保证整个链路的一致性。
Seata 1.5.0 版本共计有 60+ contributor 参与了代码提交,累计贡献了 6 万+ 行代码,删减约 1 万行代码,累计修改文件 872,合并 pr 230,其中新特性 pr 30+,修复问题 pr 60+,优化类 pr 100+。
新增特性主要有如下几类:
- 支持用户控制台(如图右)。
- 支持Skywalking tracing 的集成。Seata定位是一款数据中间件,而数据中间件的 APM 监控至关重要。
- 支持 bPRC、EDAS hsf 等 RPC 框架。
- 支持 kotlin 协程。
- 支持 TCC 幂等、空回滚、防悬挂。此前,以上问题需要由业务自己保证,而 1.5.0 版本能够通过框架层面自动保证此类问题,大大降低了开发者使用 TCC 模式的入门难度。
- 支持分布式任务调度,减轻性能开销。
- 支持 Redis 存储的 Lua 模式。
- 支持 ON DUPLICATE KEY UPDATE 等语法解析。
上图左上为 Seata1.5.0 应用控制台页面,Seata server后端存储连接的 global session 信息、分支事务信息以及对应的全局锁信息等,都可以通过控制台按照条件筛选进行展示。
上图左下为 Seata 与 Skywalking 进行生态集成后的应用拓扑图。
上图右侧为整个服务链路的 tracing 过程。比如服务如何校验、Seata RPC 如何交互、Seata server 与 JDBC 如何交互等。Tracing的交互会一直传递到 Seata server,每一个过程的耗时等都能通过 tracing 链路进行直观展示。
02 使用Seata企业版平滑迁移上云
Seata 企业版于 2022 年 5 月中下旬正式宣布公测。它提供了一种免运维、高性能的企业级分布式解决方案,能够 100%兼容开源。入口在微服务引擎MSE 控制台-分布式事务菜单,可以通过此入口免费开通。
Seata 企业版的整体架构与开源版完全一致。与开源版的区别在于,除了左侧的 Userl App 与 Seata 相关联的角色,其余 Seata 依赖的注册、配置中心、Seata 本身的节点以及后端的存储等可实现全托管。用户只需在 MSE 控制台-分布式事务菜单下创建 Seata 实例,系统即可自动一键拉起后端所有依赖的注册配置中心、Seata 节点以及后端传输等,用户无须手动进行原本繁琐的流程。
Seata 企业版相较于自建版本,具有以下几个优势:
①效率与性价比: Seata 企业版的资源全托管、免运维,同时内置依赖了注册中心、配置中心支持故障节点自动上下线;而自建版本则需要自己购买各种资源以搭建系统。此外,Seata 企业版提供了白屏化、可视化的运维操作,而自建 Seata 系统运维升级需要投入精力,人工成本较高,不支持可视化操作,需要黑屏化的命令行操作以及上传配置脚本等,还需要根据不同的配置注册中心类型手动添加事务规则、事务路由等配置,涉及很多元数据的修改,极易出错。
②性能:企业版在性能上做了深度调优,整体比Seata 1.5.X 的内核性能提升了30%。而自建版本需要用户自行进行参数调优。
③可观测性:企业版基于Prometheus 和 Grafana 大盘为用户提供了多维度的监控,比如事务量、事务处理RT、正常/异常事务的 TPS;而自建 Seata 版本需要用户自己搭建监控告警体系。
④高可用和安全:Seata 企业版支持多可用区的部署,提供了故障自动检测和恢复机制;而自建版本需要人工处理,自行设计高可用策略。与此同时,Seata 企业版支持了 RAM 鉴权,可以通过 RAM 用户管理实例的访问权限;而自建Seata 版本需要用户自己对鉴权或安全方面做二次开发。
通过简单的压测对 Seata 企业版与开源版内核性能进行对比可得:
TPS :自建版本抖动非常明显,企业版进行了深度去毛刺处理,相对较平滑,TPS 提升 30% 以上。
RT:针对单链路的事务 RT 开销,自建版平均值为 44 毫秒,企业版为 34 毫秒,降低 20% 以上。
客户开通 Seata 企业版只需简单的三步:
第一步:进入 MSE 控台-分布式事务,在实例列表里点击创建 Seata 实例(公测阶段完全免费),填写VPC 、交换机等信息,输入参数,点击创建。
第二步:创建 Seata 事务分组。填入 Seata 事务分组名称,系统会自动与上一步创建的实例做关联映射。
第三步:点击上图中“显示配置”,复制相应的配置到应用里,即可在本地运行。