大佬们,一个业务调用多个第三方接口 推荐使用seata哪种模式?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
Seata 是一个开源的分布式事务解决方案,支持多种模式,比较适合调用多个第三方接口的模式是** TCC 模式**。
在 TCC 模式下,业务逻辑会被拆分成三个阶段:Try、Confirm 和 Cancel。当你需要调用多个第三方接口时,可以将每个第三方接口的调用拆分成一个个单独的 Try 阶段。在每个 Try 阶段中,你需要对当前调用的第三方接口进行预留资源或者进行检查,确保当前业务能够完成。如果所有的 Try 都执行成功,那么就会进行 Confirm 阶段,用来确认预留资源并提交结果。如果其中一个 Try 执行失败,那么就会执行 Cancel 阶段,用来撤销之前的操作。
使用 TCC 模式的好处在于可以控制事务的粒度,避免了因为单个接口调用失败而导致整个业务流程的回滚,提高了分布式事务的效率和可靠性。
Seata 是阿里开源的分布式事务框架,属于二阶段提交模式。
Seata 目前支持 AT 模式、XA 模式、TCC 模式和 SAGA 模式,AT是阿里首推的模式,因为AT模式是一个阉割版本,阿里云有上有的GTS。
AT模式很多功能都依赖于SDK的实现,在面向云原生时代,AT 模式方向将是 SDK 的轻量化和标准化,把大部分能力下沉到代理层(Agent 或 Sidecar 的形式),让应用只需要很简单的 SDK 和标准的 SQL 就可以工作。同时AT模式的条件是数据库本身必须支持本地事务,还有表必须定义主键,用来生成前置镜像和后置镜像进行回滚。
TCC 是分布式事务中的二阶段提交协议,它的全称为 Try-Confirm-Cancel,即资源预留(Try)、确认操作(Confirm)、取消操作(Cancel),他们的具体含义如下: 1. Try:对业务资源的检查并预留; 2. Confirm:对业务处理进行提交,即 commit 操作,只要 Try 成功,那么该步骤一定成功; 3. Cancel:对业务处理进行取消,即回滚操作,该步骤回对 Try 预留的资源进行释放。
TCC 是一种侵入式的分布式事务解决方案,以上三个操作都需要业务系统自行实现,对业务系统有着非常大的入侵性,设计相对复杂,但优点是 TCC 完全不依赖数据库,能够实现跨数据库、跨应用资源管理,对这些不同数据访问通过侵入式的编码方式实现一个原子操作,更好地解决了在各种复杂业务场景下的分布式事务问题。
TCC 模式在 Seata 中也是遵循 TC、TM、RM 三种角色模型的,
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。