什么是柔性事务?

概念

柔性事务,是业内解决分布式事务的主要方案。所谓柔性事务,相比较与数据库事务中的ACID这种刚性事务来说,柔性事务保证的是“基本可用,最终一致。”这其实就是基于BASE理论,保证数据的最终一致性。

虽然柔性事务并不像刚性事务那样完全遵循ACID,但是,也是部分遵循ACID的,简单看一下关于ACID四个属性,柔性事务的支撑程度:

原子性:严格遵循
一致性:事务完成后的一致性严格遵循;事务中的一致性可适当放宽
隔离性:并行事务间不可影响;事务中间结果可见性允许安全放宽
持久性:严格遵循

在业内,关于柔性事务,最主要的有以下三种类型:异步确保型、补偿型、最大努力通知型。


柔性事务的分类

柔性事务分为:两阶段型、补偿型、异步确保型、最大努力通知型。

  • 两阶段型 分布式事务二阶段提交,对应技术上的 XA、JTA/JTS,这是分布式环境下事务处理的典型模式。

  • 补偿型 TCC 型事务(Try-Confirm-Cancel)可以归为补偿型。在 Try 成功的情况下,如果事务要回滚,Cancel 将作为一个补偿机制,回滚 Try 操作;TCC 各操作事务本地化,且尽早提交(没有两阶段约束);当全局事务要求回滚时,通过另一个本地事务实现“补偿”行为。 TCC 是将资源层的二阶段提交协议转换到业务层,成为业务模型中的一部分。

  • 异步确保型 将一些有同步冲突的事务操作变为异步操作,避免对数据库事务的争用,如消息事务机制。

  • 最大努力通知型 通过通知服务器(消息通知)进行,允许失败,有补充机制。


想要实现柔性事务,有几个基础条件需要具备,以下介绍几个柔性事务实现的基础。

柔性事务实现的基础

1、可查询操作

可查询操作,几乎是所有的分布式解决方案都需要的。
举一个常见的分布式场景的例子,如订单处理这一功能:

可查询操作,几乎是所有的分布式解决方案都需要的。

举一个常见的分布式场景的例子,如订单处理这一功能:

 /*** 支付订单处理**/public void completeOrder() {forderDao.update();//订单服务本地更新订单状态accountService.update();//调用资金账户服务给资金帐户加款pointService.update();//调用积分服务给积分帐户增加积分accountingService.insert();// 调用会计服务向会计系统写入会计原始凭证merchantNotifyService.notify();// 调用商户通知服务向商户发送支付结果通知}

以上这个支付订单处理的例子中,除了 订单服务本地更新订单状态 以外的所有操作,都需要调用RPC接口来执行,这种情况单纯的本地事务就无法保证数据的一致性了。就需要引入分布式事务。

在分布式事务执行过程中,如果某一个步骤执行出错,就需要明确的知道其他几个操作的处理情况,这就需要其他的服务都能够提供查询接口,保证可以通过查询来判断操作的处理情况。

2、幂等操作

幂等性,其实是一个数学概念。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数,如:f(f(x))= f(x)

在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。也就是说,同一个方法使用同样的参数,调用多次产生的业务结果与调用一次产生的业务结果相同。

这一个要求其实也比较好理解,因为要保证数据的最终一致性,很多解决防范都会有很多重试的操作,如果一个方法不保证幂等,那么将无法被重试。

幂等操作的实现方式有多种,如在系统中缓存所有的请求与处理结果、检测到重复操作后,直接返回上一次的处理结果等。

3、可补偿操作

提到事务,为了保证原子性,就可能发生commit和rollback,那么在分布式事务中,要想进行rollback,就需要提供可补偿操作。

比如上面的订单处理的例子中,在`调用积分服务给积分帐户增加积分`操作执行之后,经过分布式事务协调,最终决定回滚整个事务,那么就需要提供一个`调用积分服务给积分帐户扣减积分`的操作,

并且,补偿操作同时也需要满足幂等性。

4、TCC操作

TCC 即 Try-Confirm-Cancel.

Try: 尝试执行业务

完成所有业务检査(一致性)预留必须业务资源(准隔离性)

Confirm:确认执行业务

真正执行业务 不作任何业务检査 只使用Try阶段预留的业务资源 Confirm操作要满足冪等性

Cancel: 取消执行业务

释放Try阶段预留的业务资源,Cancel操作要满足冪等性
这种类型和可补偿操作类似,就是提供一种提交和回滚的机制。是一种典型的两阶段类型的操作。这里说的两阶段类型操作并不是指2PC,他和2PC还是有区别的。

总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2805070.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

使用LinkedList实现堆栈及Set集合特点、遍历方式、常见实现类

目录 一、使用LinkedList实现堆栈 堆栈 LinkedList实现堆栈 二、集合框架 三、Set集合 1.特点 2.遍历方式 3.常见实现类 HashSet LinkedHashSet TreeSet 一、使用LinkedList实现堆栈 堆栈 堆栈(stack)是一种常见的数据结构,一端…

代码随想录算法训练营day24|理论基础、77. 组合

理论基础 题目链接/文章讲解:代码随想录 视频讲解:带你学透回溯算法(理论篇)| 回溯法精讲!_哔哩哔哩_bilibili 回溯法也可以叫做回溯搜索法,它是一种搜索的方式。回溯是递归的副产品,只要有递归…

java面试设计模式篇

面试专题-设计模式 前言 在平时的开发中,涉及到设计模式的有两块内容,第一个是我们平时使用的框架(比如spring、mybatis等),第二个是我们自己开发业务使用的设计模式。 面试官一般比较关心的是你在开发过程中&#…

QGIS编译(跨平台编译)之七十:【Windows编译错误处理】找不到vector_tile.pb.h、vector_tile.pb.cc

文章目录 一、错误描述二、错误原因分析三、错误处理一、错误描述 ①无法打开源文件“vector_tile.pb.h” ②无法打开包含文件:“vector_tile.pb.h”:No Such file or directory ③无法打开源文件:“vector_tile.pb.cc”:No Such file or directory 二、错误原因分析 qgis\…

基于ssm框架的高校班级管理系统设计与实现

为解决当前高校班级管理中管理方式落后、手段落后及效率低下等问题而以当前主流的互联网技术设计一款高校班级管理系统。该系统采用B/S模式的设计思路而将前端(JSP技术)和后端(SSM框架MySQL数据库)整合于一体并通过Java语言代码编…

IT廉连看——操作符

IT廉连看—操作符 c语言中有许多操作符,可以用于对变量进行各种不同的操作 一、算术操作符 - * / % 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点…

【GB28181】wvp-gb28181-Pro 运行错误汇总避坑大全(持续更新)

快捷查找 1、【问题】终端控制台打印的日志乱码 1、【问题】终端控制台打印的日志乱码 【解决】 由于windows系统默认编码是gbk,导致jar包在windows系统运行中文会导致乱码 控制台日志乱码: 打开cmd命令框,输入以下命令 chcp 65001 更改cmd的编码为UTF-8…

【Python如何求出水仙花数】

1、求水仙花数Python代码如下: # 求水仙花数:只需要个十百位的3次幂之和与原数相等 for i in range(100, 1000): # 循环100-999整数i1 i % 10 # 取个位 “%”表示除以后取余数i2 i // 10 % 10 # 取十位i3 i // 100 # 取百位 “//”表示除以后取整…

探索美团平台的发展与创新

美团作为中国领先的生活服务平台,为用户提供了丰富多样的服务,包括外卖配送、酒店预订、旅游出行等。在激烈的市场竞争中,美团不断进行创新和拓展,致力于提升用户体验,拓展服务范围,实现商业增长。本文将探…

LLM (Large language model)的指标参数

1. 背景介绍 我们训练大模型的时候,或者我们用RAG的时候,不知道我们的算法,或者我们的提示,或者我们的本地知识库是否已经整理得符合要求了。又或我们需要一个指标去评估我们目前的所有围绕大模型,向量数据库或外挂知…

【C#】grbl-plotter 源码学习笔记(四)-MachineControl

十一、MachineControl 11.1 CheckUpdate.cs 通过Web请求获取远程版本信息,实现版本自动检查的后台逻辑,为界面提供版本更新提示。 11.2 Control2ndGRBL.cs Control2ndGRBL类管理一个用于GRBL控制的额外窗体,包括处理用户输入、发送GRBL命令和更新界面上的状态和位置…

【笔记】【开发方案】APN 配置参数 bitmask 数据转换(Android KaiOS)

一、参数说明 &#xff08;一&#xff09;APN配置结构对比 平台AndroidKaiOS文件类型xmljson结构每个<apn>标签是一条APN&#xff0c;包含完成的信息层级数组结构&#xff0c;使用JSON格式的数据。最外层是mcc&#xff0c;其次mnc&#xff0c;最后APN用数组形式配置&am…

6-ROX 羧酸,6-Rhodamine X carboxylic acid,用作需要透膜的生物探针的荧光报告基团

2891791-11-8 (6位); 2196185-85-8 (5位)&#xff0c;6-ROX 羧酸&#xff0c;6-Rhodamine X carboxylic acid&#xff0c;用作需要透膜的生物探针的荧光报告基团 您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;2891791-11-8 (6位); 2196185-85-8 (5位)&#xff0c…

JAVA--File类与IO流

目录 1. java.io.File类的使用 1.1 概述 1.2 构造器 1.3 常用方法 1、获取文件和目录基本信息 2、列出目录的下一级 3、File类的重命名功能 4、判断功能的方法 5、创建、删除功能 2. IO流原理及流的分类 2.1 Java IO原理 2.2 流的分类 2.3 流的API 3. 节点流之一…

Java SpringBoot测试OceanBase

对上篇mysql导入到OceanBase中的数据库进行代码测试&#xff0c;写了个demo包含测试方法&#xff0c;在原mysql库中成功执行&#xff0c;迁移到OceanBase时看是否能不修改业务代码而成功执行测试方法&#xff1a; 代码基于SpringBoot MyBastis测试增删改查、批量新增、多表联…

YOLOv8改进 | SPPF篇 | 利用YOLOv9最新的SPPELAN模块改进SPPF(全网独家创新,附手撕结构图)

一、本文介绍 本文给大家带来的改进机制是利用2024/02/21号最新发布的YOLOv9其中提出的SPPELAN模块来改进SPPF&#xff0c;其中YOLOv9针对于这个模块并没有介绍&#xff0c;只是在其项目文件中用到了&#xff0c;我将其整理出来用于我们的YOLOv8的项目&#xff0c;同时空间金字…

【Java程序设计】【C00288】基于Springboot的篮球竞赛预约平台(有论文)

基于Springboot的篮球竞赛预约平台&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的篮球竞赛预约平台 本系统分为前台功能模块、管理员功能模块以及用户功能模块。 前台功能模块&#xff1a;用户进入到平台首页&a…

【java面试系列】服务的限流

目录 一、常用的限流算法1.固定窗口计数器(计数器算法)2 滑动窗口计数器算法3. 漏桶算法4 令牌桶算法(`常用`)Google开源项目Guava中的RateLimiter使用的就是令牌桶控制算法二、 分布式限流1、网关层(Nginx、Openresty、Spring Cloud Gateway等)流量限制nginx限流Spring Cl…

使用向量数据库pinecone构建应用01:相似语义检索 Semantic Search

Building Applications with Vector Databases 下面是DeepLearning.AI上面这门课的学习笔记&#xff1a;https://www.deeplearning.ai/short-courses/building-applications-vector-databases/ Learn to create six exciting applications of vector databases and implement…

(六)激光线扫描-三维重建

本篇文章是《激光线扫描-三维重建》系列的最后一篇。 1. 基础理论 1.1 光平面 在之前光平面标定的文章中,已经提到过了,是指 激光发射器投射出一条线,形成的一个扇形区域平面就是光平面。 三维空间中平面的公式是: A X + B Y + C Z + D = 0 A X+B Y+C Z+D=0