专栏首页分布式架构分布式架构设计篇(七)-刚性事务总结和柔性事务概述
原创

分布式架构设计篇(七)-刚性事务总结和柔性事务概述

- 刚性事务总结 -

在《分布式架构之设计篇-刚性事务之2PC详解》和《分布式架构之设计篇-刚性事务之3PC详解》二文中分析了分布式事务的本质、XA、2PC、3PC等等。但是没有说分布式事务的现象或者场景,我总结了分布式事务的触发场景大约有以下几种:

1、跨数据库分布式事务:数据库的物理分割下保障跨库操作的ACID。 2、跨服务分布式事务:服务的网络分割下保障多服务的事务完整性。 3、混合式分布式事务:跨数据库分布式事务 + 跨服务分布式事务。

最根本的原因就是事务参与者出现在不同的网络中,需要网络通讯进行交互,因此不可避免的出现失败、超时等情况,所以需要分布式事务来处理。

前面也大体说了下事务的解决方案,接下来咱们先来个完整的结论:业务规避 > BASE柔性事务 > CP刚性事务。刚性事务已经介绍过了,因为追求CP,通常使用在金融等强一致性场景的行业。刚性事务首先有XA规范,这个XA规范的实现方案是2PC,业界开源框架有Atomikos、Bitronix、Seata XA模型及各大数据库厂商对XA的落地。

目前国内对刚性事务使用最广泛的是蚂蚁金服的2PC,但是并不开源。不够我们可以从Seata XA模型去看到一部分蚂蚁2PC的影子。Seata XA模型是1.2版本推出的新功能,目前并不是很成熟,建议可以先观望下。

- XA规范 -

XA规范定义将事务参与者分成了TM、AP、RM三个角色。XA规范要求事务资源(如数据库) 本身提供对规范和协议的支持,这样的好处是如下:

  1. 可以从任何角度保证数据的隔离。
  2. 实现数据的全局一致性。
  3. 对业务无侵入。

XA规范将事务机制落地到事务资源上,在落地上使用的是XAConnection和 XADataSource。XA开源框架都是从这入手的,但是从职责上去区分,XAConnection 和 XADataSource属于数据库的驱动范围内,如果框架自己去实现,无法保证数据库的兼容完整性。最佳的实践需要事务资源(如数据库) 本身提供对规范和协议的支持。Seata XA模型也是如此,不够Seata 官方承诺保证 提供的驱动程序是经过充分测试的;再加上一个场外因素-阿里多年的实践经验,因此还是可以期待。

XA 框架通过connection通讯层面去处置事务机制,避免了SQL的相关处理、也利用了数据库内部XA实现,因此最能保障 数据全局一致性。但是XA规范在1994年就出现了,至今没有大规模流行起来,必然有他一定的缺陷:

  1. 数据锁定:数据在事务未结束前,为了保障一致性,根据数据隔离级别进行锁定。
  2. 协议阻塞:本地事务在全局事务 没 commit 或 callback前都是阻塞等待的。
  3. 性能损耗高:主要体现在事务协调增加的RT成本,并发事务数据使用锁进行竞争阻塞。
- 柔性事务 -

刚性事务都是CP的,所以不可避免的面临性能有上限,无法满足超高量级的互联网场景。因此出现了柔性事务,相比较与数据库事务中的ACID这种刚性事务来说,柔性事务本质是对XA协议的妥协,它通过降低强一致性要求,从而降低数据库资源锁定时间,提升可用性。这其实就是基于BASE理论,保证数据的最终一致性。

  • Basically Available-基本可用
  • Soft state-柔性状态
  • Eventual consistency-最终一致性

基本可用指分布式系统出现不可知故障时,允许损失部分可用性。具体表现为,一响应时间的损失:出现故障后,通过延长响应(服务重试其他提供者)来保障可用性;二功能上的损失:流量高峰时,通过服务降级、限流等治理手段提供有损服务。

柔性状态指允许系统的数据存在中间状态,并认为中间状态的存在不影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。

最终一致性指系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性。

柔性事务主要分为补偿型和通知型。补偿型事务又分TCC、Saga,通知型事务分事务消息、最大努力通知事务。补偿型事务都是同步的,通知型事务都是异步的,所以有时可以听到同步事务与异步事务的划分。

- 作者介绍 -

孙玄

毕业于浙江大学,奈学教育创始人兼CEO,前转转公司技术委员会主席,前58集团技术委员会主席,前百度资深研发工程师,腾讯云TVP,阿里云MVP,在线直播大课《百万架构师》品牌创始人。

林淮川

毕业于西安交通大学;奈学教育《百万架构师训练营》讲师及企业级源码内源负责人,前大树金融高级架构师、技术委员会开创者、技术总监;前天阳宏业交易事业部技术主管;多年互联网金融行业(ToB)经验。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 分布式架构设计篇(十一)-柔性事务之最大努力通知事务详解

    ​ 咱们在上一篇文章探讨了事务消息,事务消息是基于MQ实现的一种异步事务。接下来咱们开始聊聊咱们分布式事务系列中的最后一个方案:最大努力通知事务。最...

    林淮川
  • 分布式架构设计篇(十)-柔性事务之事务消息详解

    ​ 在 《柔性事务之TCC详解》 和《柔性事务之Saga详解》两文中我们详细剖析了柔性事务的第一个分支补偿型事务。在《刚性事务总结和柔性事务概述》中...

    林淮川
  • 分布式架构设计篇(五)-刚性事务之2PC详解

    ​ 分布式场景下,多个服务同时对服务一个流程,比如电商下单场景,需要支付服务进行支付、库存服务扣减库存、订单服务进行订单生成、物流服务更新物流信息等...

    林淮川
  • Apache ShardingSphere开源分布式数据库中间件应用详解

    相比于数据分片方案的逐渐成熟,集性能、透明化、自动化、强一致、并能适用于各种应用场景于一体的分布式事务解决方案则显得凤毛麟角。基于两或三阶段提交的分布式事务的性...

    京东技术
  • 刚柔并济的开源分布式事务解决方案

    张亮,京东数科数据研发负责人,Apache ShardingSphere发起人 & PPMC

    纯洁的微笑
  • 目前最好用的开源分布式事务解决方案之一

    相比于数据分片方案的逐渐成熟,集性能、透明化、自动化、强一致、并能适用于各种应用场景于一体的分布式事务解决方案则显得凤毛麟角。基于两(三)阶段提交的分布式事务的...

    芋道源码
  • 每个Java工程师,都应该掌握数据库事务!

    转账是生活中常见的操作,比如从A账户转账100元到B账号。站在用户角度而言,这是一个逻辑上的单一操作,然而在数据库系统中,至少会分成两个步骤来完成:

    本人秃顶程序员
  • 一文看懂分布式事务

    Atomicity 原子性 构成事务的一组SQL,要么全部生效,要么全不生效,不会出现部分生效的情况

    纪莫
  • MySQL事务最全详解

    记得前些日子分享过一篇有关MySQL中事务的知识点,但当时对MySQL中的事务只是纯粹的知道如何使用,缺乏对理论的进一步认识,抽时间单独去了解了一下,便在做一个...

    A梦多啦A
  • 面试90%都会翻车的高并发分布式事务,我劝你好好啃透!

    Atomicity 原子性 构成事务的一组SQL,要么全部生效,要么全不生效,不会出现部分生效的情况

    程序员白楠楠

扫码关注云+社区

领取腾讯云代金券