微服务编排框架从零到一
2024-01-04 18:01:46
探索微服务编排框架背后的奥秘(上)
初衷何在
一切的出发点往往要从问题开始谈起,我们在公司内部使用分布式事务框架 seata,seata 的使用局限于部分业务,原因是出于对 seata 性能的影响,比如:对 TCP 通信的影响,对业务代码的侵入。
seata 在分布式事务处理时,是通过 tcp 的通信方式来进行的,通信涉及三次通信(详细内容请自行了解 seata)。TCP 通信对于某些场景来说是过于重量级,因此我们选择在某些业务上避免使用 seata,但是这也就导致了多个业务系统都需要自己去进行分布式事务的处理,无疑是大大增加了开发成本。
再者,seata 的业务侵入性太强,对于一些简单的事务场景就无需 seata 过多的处理,这无疑也是大材小用。我们有没有一种更为轻量级的方案呢?
于是,我们做了一个大胆的设想:能不能做一套业务非侵入且又轻量级的分布式事务框架呢?这样我们就可以大大减少一些开发成本。
带着这个设想,我们开始了分布式事务框架的探索之旅。
调研目前分布式事务框架的技术现状
在动手设计一套分布式事务框架之前,我们对市场上现有的分布式事务框架的优缺点做了一个大致的了解。
目前市面上有很多流行的分布式事务框架,比如:seata、tcc、saga、xa、fescar 等,这些框架各有千秋。
seata:seata 是一款分布式事务中间件,它采用 TCC 的思想来实现分布式事务。seata 的优点是简单易用、性能较好,缺点是侵入性强、不支持跨语言。
tcc:tcc 是一款分布式事务框架,它采用 TCC 的思想来实现分布式事务。tcc 的优点是侵入性较低、支持跨语言,缺点是性能较差、代码复杂。
saga:saga 是一款分布式事务框架,它采用 Saga 的思想来实现分布式事务。saga 的优点是侵入性较低、支持跨语言,缺点是性能较差、代码复杂。
xa:xa 是一款分布式事务框架,它采用 XA 的思想来实现分布式事务。xa 的优点是标准制定较早、支持跨语言,缺点是侵入性强、性能较差。
fescar:fescar 是一款分布式事务框架,它采用 TCC 的思想来实现分布式事务。fescar 的优点是简单易用、性能较好,缺点是侵入性强、不支持跨语言。
通过对这些框架的优缺点的分析,我们得出了一些结论:
- TCC 的思想比较适合实现分布式事务。
- 分布式事务框架的侵入性是需要重点考虑的问题。
- 分布式事务框架的性能也是需要重点考虑的问题。
- 分布式事务框架的支持跨语言性也是需要重点考虑的问题。
基于这些结论,我们决定设计一套新的分布式事务框架,它需要具备以下特点:
- 基于 TCC 的思想。
- 非侵入性。
- 性能好。
- 支持跨语言。
理论先行:TCC 的思想
TCC(Try-Confirm-Cancel)是一种分布式事务的实现方式。TCC 的核心思想是将一个分布式事务分解成三个阶段:
- Try:在这一阶段,业务系统会执行分布式事务的准备工作,比如:检查库存、预扣除库存等。
- Confirm:在这一阶段,业务系统会执行分布式事务的提交工作,比如:更新库存等。
- Cancel:在这一阶段,业务系统会执行分布式事务的回滚工作,比如:恢复库存等。
TCC 的优点是简单易用、性能较好,缺点是侵入性强、不支持跨语言。
TCC 的流程图
TCC 的优缺点
优点:
- 简单易用。
- 性能较好。
缺点:
- 侵入性强。
- 不支持跨语言。
本系列文章的概要
本系列文章将分为两篇,分别是:
- 模仿 mapstruct 实现一个微服务编排框架(上)
- 模仿 mapstruct 实现一个微服务编排框架(下)
第一篇主要介绍我们开发这款框架的初衷、现有的分布式事务框架的技术现状以及 TCC 的思想。
第二篇主要介绍我们的框架的设计思路、实现细节以及使用案例。