当前位置: 首页 > news >正文

分布式事务常见解决方案

分布式事务常见解决方案

一、事务介绍

事务是一系列的动作,它们综合在一起才是一个完的工作单元,这些动作必须全部完成,如果有一个失败的话,那么事务就会回滚到最开始的状态,仿佛什么都没发生过一样。

1、单事务概念

应用多次数据库操作,通过用事务进行管理,来保证ACID原则。

  • 原子性(A):操作这些指令时,要么全部执行成功,要么全部不执行。只要其中一个指令执行失败,所有的指令都执行失败,数据进行回滚,回到执行指令前的数据状态;

  • 一致性(C):事务的执行使数据从一个状态转换为另一个状态,事务在执行之前和之后,数据库都必须处于一致性状态。

  • 隔离性(I):在该事务执行的过程中,无论发生的任何数据的改变都应该只存在于该事务之中,对外界不存在任何影响。只有在事务确定正确提交之后,才会显示该事务对数据的改变。其他事务才能获取到这些改变后的数据;

  • 持久性(D):当事务正确完成后,它对于数据的改变是永久性的。

2、分布式事务概念

分布式事务常见场景:

  1. 单应用内部调用(多个数据源调用,操作多个库)

  2. 涉及多应用调用(有可能操作同一个数据源,也有可能操作不同的数据源)

CAP理论

分布式事务的理论基础(ACID事务无法满足)

  • C:一致性 数据一致性:强一致性、弱一致性、最终一致性 强一致性:流程涉及的各个环节数据必须实时一致性 弱一致性:流程涉及的各个环节数据允许存在部分数据不一致 最终一致性:允许存在中间状态,只要求经过一段时间后,数据最终是一致的

  • A:可用性 系统提供的服务必须一直处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果

  • P:分区容错性 (一定会存在) 分布式系统在遇到任何网络分区故障时,仍然需要能够保证对外提供满足一致性和可用性的服务

常见组合: AP:互联网业务 CP:金融业务

base理论

base理论是CAP理论中AP方案的延伸,核心思想是即时无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。

  • Basically Available (基本可用)

  • Soft state (软状态,中间状态)

  • Eventually consistent (最终一致性)

更详细的介绍见 分布式系统原理

二、分布式事务常见方案

分布式场景下,多个服务同时对服务一个流程,比如电商下单场景,需要支付服务进行支付、库存服务扣减库存、订单服务进行订单生成、物流服务更新物流信息等。如果某一个服务执行失败,或者网络不通引起的请求丢失,那么整个系统可能出现数据不一致的原因。

常见方案

  • 1、设计方案尽可能规避分布式事务方案(相似的业务放在一起,不要过度拆分)

  • 2、强事务(CP,低并发短事务)和柔性事务(AP,高性能)

强事务:满足CP理论,XA协议(2PC、JTA、JTS)

  • 3PC:但由于同步阻塞,处理效率低,适合低并发、短事务业务.

  • 2PC:Seeta(AT)、LCN(2PC),适合分布式系统

  • JTA: atomikos(适合单系统多数据源)

柔性事务:满足AP,base理论,适合异步更新数据,并且对数据的实时性要求较低的场景,主要分为:

  • 补偿型 (TCC、saga)

  • 最大努力通知型(MQ、本地消息表)

  • 异步确保型(MQ、本地消息表)

实现方式

  • TCC(seeta-tcc,lcn-tc)

  • Saga (seeta-saga状态机模式、Aop模式)

  • 本地事务消息

  • 事务消息MQ

互联网业务,一般的流量比较大,涉及很多高并发场景、我们一般采用柔性事务,这样系统的性能好。

三、柔性事务之最大努力通知型(互联网应用最广泛)

基于本地消息表实现分布式事务

基于mq实现柔性分布式事务

重试注意事项

  1. 通过本地消息表+MQ重试对账+下游(接口幂等、提供);

  2. 打印日志+告警+人工介入补偿

回滚注意事项

  1. 程序捕获异常,调用回滚代码;

  2. 发送回滚MQ,各个系统消费MQ,调用本地回滚方法。

相关文章:

分布式事务常见解决方案

分布式事务常见解决方案 一、事务介绍 事务是一系列的动作,它们综合在一起才是一个完的工作单元,这些动作必须全部完成,如果有一个失败的话,那么事务就会回滚到最开始的状态,仿佛什么都没发生过一样。 1、单事务概念…...

061:cesium设置棋盘图材质(material-5)

第061个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置棋盘材质,请参考源代码,了解CheckerboardMaterialProperty的应用。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共89行)相关API参考:专栏目标…...

【AI Earth试玩】权限配置与openAPI调用工具库

前言 AI earth是阿里达摩院出的遥感云计算平台,我简单体验下来感觉像是GEE的python版本遥感深度学习计算平台,整体体验还是挺不错的,尤其是多分类的结果还是挺惊艳的。 平台提供工具箱和notebook两种模式,工具箱整个交互简单易用…...

Tomcat安装与使用

Tomcat 是HTTP服务器,用于使用HTTP协议。 1、下载Tomcat 下载链接:https://tomcat.apache.org/ 进入官网后,根据自己想要下载的版本进行下载,我这里选择下载的版本是Tomcat 8. 点击选择自己想要下载的对应版本,下载Z…...

大数据课程-学习二十四周总结

6.Hive函数 Hive的函数分为三类: 聚合函数、内置函数,表生成函数,聚合函数之前已经学习过了,接下来学习内置函数和表生成函数. 6.1.Hive的内置函数 6.1.1.数学函数 6.1.1.1. 取整函数: round 语法: round(double a) 返回值: BIG…...

【GPT科技系列】国内开发者调用openAI-API科技方法

1. 前言 openAI上线7个月了,但是随着openAI的约束越来越多,国内开发者想要使用openai的接口实现开发简直就是难上加难。那真的就没有办法了吗?no no no,CF解决一切不开心~ 2.准备工作 我们需要一个国际域名 注册cloudflare账号 …...

基于QGIS的长株潭城市群边界范围融合实战

背景 在面向区域的研究过程中,比如一些研究区域,如果是具体的行政区划,比如具体的某省或者某市或者县,可以直接从国家官方的地理数据中直接下载就可以。但如果并没有直接的空间数据那怎么办呢?比如之前遇到的一个场景&…...

【MySQL联合查询】轻松实现数据关联

1、联合查询 联合查询又称为多表查询,它的基本执行过程就是笛卡尔积 1.1 认识笛卡尔积 那么什么是笛卡尔积呢? 答:笛卡尔积就是将两张表放在一起进行计算,把第一张表的每一行分别取出来和第二张表的每一行进行连接,得到…...

Windows安装Ubuntu双系统

Windows安装Ubuntu双系统 1.下载Ubuntu 16.04,地址https://releases.ubuntu.com/16.04/ 2.下载Rufus,地址https://rufus.ie/zh/ 3.准备U盘,烧录系统 4.磁盘分区 5.重启,按住shift键 本人电脑是联想小新 Windows11系统&#xff0…...

【大数据之Hadoop】三十四、Hadoop综合调优之小文件优化方法

1 Hadoop小文件弊端 HDFS上每个文件都要在NameNode上创建对应的元数据,这个元数据的大小约为150byte,这样当小文件比较多的时候,就会产生很多的元数据文件,一方面会大量占用NameNode的内存空间,另一方面就是元数据文件…...

周赛 Round#3 题解

又不能放图片,又不能写学校,你让我怎么办啊!! 系列文章目录 1.周赛 Round#1 2.周赛 Round#2 前言 这是周赛第三轮。//涉及隐私原因,博文里不放题目,要看的去http://0241:101:610:801.22222 划分字符串贪…...

详解HTTPS加密过程

目录 前言 HTTPS是什么 HTTPS的工作过程 引入对称加密 引入非对称加密 引入证书 总结 前言 对于HTTP上篇文章已经做了详细的解释了。众所周知,HTTPS要比HTTP要安全,但是为什么HTTPS要比HTTP安全呢? 这篇文章主要研究HTTPS的加密机制…...

聚观早报 | ChatGPT登顶美区iOS免费榜;库克不满苹果首款MR设备

今日要闻:ChatGPT登顶美区iOS免费榜;库克不满苹果首款MR设备;索尼正开发小尺寸折叠屏手机;万达辟谣大规模裁员;智能仿生手让截肢者重获手心的温度 ChatGPT登顶美区iOS免费榜 ChatGPT 在 iOS 美区免费 App 排行榜上位列…...

position:sticky-粘性吸附布局

一、描述 就是在一个滚动的容器里,将一个子元素设置为postion:sticky 在元素显示在可视区域内,显示的效果与position:relative 一致,当元素被滑动出可视区域外是,显示效果与position:fixed一致 二、注意事项 1、父元素需要存在滚动(overflow:auto&…...

【MySQL】-【数据库的设计规范】

文章目录 为什么需要数据库设计范式范式简介范式都包括哪些键和相关属性的概念第一范式(1st NF)第二范式(2nd NF)第三范式(3rd NF) 反范式化概述应用举例反范式化的新问题反范式的适用场景 BCNF(巴斯范式)案例案例一案例二 第四范式案例案例一案例二 第五范式、域键范式范式的实…...

全面解析缓存应用经典问题

1、前言 随着互联网从简单的单向浏览请求,发展为基于用户个性信息的定制化以及社交化的请求,这要求产品需要做到以用户和关系为基础,对海量数据进行分析和计算。对于后端服务来说,意味着用户的每次请求都需要查询用户的个人信息和…...

Java版本企业电子招采系统源码——信息数智化招采系统

信息数智化招采系统 服务框架:Spring Cloud、Spring Boot2、Mybatis、OAuth2、Security 前端架构:VUE、Uniapp、Layui、Bootstrap、H5、CSS3 涉及技术:Eureka、Config、Zuul、OAuth2、Security、OSS、Turbine、Zipkin、Feign、Monitor、Stre…...

Rust每日一练(Leetday0005) 罗马数字、公共前缀、三数之和

目录 13. 罗马数字转整数 Roman to Integer 🌟 14. 最长公共前缀 Longest Common Prefix 🌟 15. 三数之和 3Sum 🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日…...

【告别校园,迎接未来】

作为一个曾经的大学生,我的四年大学时光充满了起伏和挑战。回顾这段时光,我深刻认识到了自己的不足,同时也感悟了一些珍贵的人生经验和收获。 我是一个比较内向的人,进入大学后感觉有些孤独,难以适应新的环境和生活方…...

SaaS系统用户权限设计

SaaS系统用户权限设计 学习目标: 理解RBAC模型的基本概念及设计思路 了解SAAS-HRM中权限控制的需求及表结构分析完成组织机构的基本CRUD操作 完成用户管理的基本CRUD操作完成角色管理的基本CRUD操作 组织机构管理 需求分析 需求分析 实现企业组织结构管理&#xff0…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

管理学院权限管理系统开发总结

文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...

GitHub 趋势日报 (2025年06月06日)

📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...

加密通信 + 行为分析:运营商行业安全防御体系重构

在数字经济蓬勃发展的时代,运营商作为信息通信网络的核心枢纽,承载着海量用户数据与关键业务传输,其安全防御体系的可靠性直接关乎国家安全、社会稳定与企业发展。随着网络攻击手段的不断升级,传统安全防护体系逐渐暴露出局限性&a…...

java高级——高阶函数、如何定义一个函数式接口类似stream流的filter

java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用(Math::max) 2 函数接口…...

2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版

1.题目描述 2.思路 当前的元素可以重复使用。 (1)确定回溯算法函数的参数和返回值(一般是void类型) (2)因为是用递归实现的,所以我们要确定终止条件 (3)单层搜索逻辑 二…...

Netty自定义协议解析

目录 自定义协议设计 实现消息解码器 实现消息编码器 自定义消息对象 配置ChannelPipeline Netty提供了强大的编解码器抽象基类,这些基类能够帮助开发者快速实现自定义协议的解析。 自定义协议设计 在实现自定义协议解析之前,需要明确协议的具体格式。例如,一个简单的…...