分布式事务处理方案及分布式锁相关

news2024/11/26 4:44:43

本文偏理论

一、事务处理

1、事务处理的四个特性ACID

Atomicity 原子性:

对于数据库的修改,全部执行or全部不执行

Consistency 一致性:

Isolation 隔离性 :

亦称为串行化,防止事务间操作混淆,需要串行化或者序列化请求,使得在同一时间仅有一个请求用于同一数据

Durability 持久性:

分布式事务处理方案及分布式锁相关

2、本地事务处理

Spring注解@Transactional

使用@Transactional,使用aop(面向切面)的方式进行管理,可使用isolation配置事务隔离级别,我的理解是Spring基于单体服务模式的本地事务处理,并不是分布式的处理方式

3、分布式事务解决方案

应对场景:

一个事务有多个步骤组成,涉及跨服务(应用)或者跨数据库的事务场景,大致可分为三类场景:同服务跨库场景、跨服务场景、混合式场景
在这里插入图片描述

如客户下单,涉及订单服务、库存服务、支付服务、积分服务,任何一步失败,都涉及相关事务的处理

处理逻辑:

强一致性(设计复杂)、最终一致性(使用较多)

解决方案:

业务设计原则:允许空补偿 、幂等性、防悬挂

*空补偿:*Cancel执行时,Try未执行,事务分支的Cancel操作需要判断出Try未执行,这时需要忽略Cancel中的业务数据更新,直接返回

*悬挂:*Try执行时,Cancel已执行完成,事务分支的Try操作需要判断出Cancel一致性,这时需要忽略Try中的业务数据更新,直接返回

(1)TCC模式

补偿型事务(try confirm cancel)

在这里插入图片描述

(2)Saga模式

补偿型事务,但是它没有 try 阶段,而是把分布式事务看作一组本地事务构成的事务链
在这里插入图片描述

(3)基于消息的分布式事务

对业务侵入较低,最终一致性的解决方案

对消息中间件要求较高,且普通消息不能支持,需要中间件支持事务型消息(RocketMq)
在这里插入图片描述

或者通过维护 本地消息表来实现
在这里插入图片描述

二、分布式锁

应对场景:

集群模式下,一个方法或属性在高并发情况下的同一时间只能被同一个线程执行

实现方式:

1、基于数据库实现

2、基于redis实现

3、zookeeper



参考文档:
分布式事务解决方案
https://mp.weixin.qq.com/s/2AL3uJ5BG2X3Y2Vxg0XqnQ
分布式锁的三种实现方式
https://cloud.tencent.com/developer/article/1628536

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

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

相关文章

Java迭代

迭代(iterate)&#xff1a;简单来说&#xff0c; 它就是一个循环。 集合框架中的Iterator接口定义了迭代器的功能&#xff0c; 迭代器的用途是遍历集合&#xff08;容器&#xff09; 中的所有元素。 1. Iterator接口 public interface Iterator<E> {boolean hasNext();…

Zynq-7000、FMQL45T900的GPIO控制(一)-----SDK配置GPIO普通输入输出模式,以及GPIO编号

Zynq-7000系列GPIO排布如下图所示&#xff0c;著名手册ug585第14章&#xff0c;第一个图&#xff0c;这图很清晰的表明&#xff0c;一共54个MIO&#xff0c;64个EMIO&#xff0c;所有这些IO共分为4个bank&#xff0c;其中 Bank0 32bit —>> MIO[0:31] Bank1 22bit —…

Java版本电子招标采购系统源代码—企业战略布局下的采购寻源

智慧寻源 多策略、多场景寻源&#xff0c;多种看板让寻源过程全程可监控&#xff0c;根据不同采购场景&#xff0c;采取不同寻源策略&#xff0c; 实现采购寻源线上化管控&#xff1b;同时支持公域和私域寻源。 询价比价 全程线上询比价&#xff0c;信息公开透明&#xff0c;可…

Ubuntu 安装和配置 Samba服务开启共享文件夹

1、 客户端&#xff1a;windows10 服务端&#xff1a;ubuntu18.04 目的&#xff1a;从ubuntu上共享一个文件夹给windows访问 2、安装Sanba sudo apt install samba 3、查看版本号验证安装是否成功 smbd --version 4、创建一个文件夹&#xff0c;用来共享 sudo mkdir /…

拼多多商品数据如何通过api接口获取

要从拼多多获取商品数据&#xff0c;可以使用拼多多提供的API接口。首先需要注册一个拼多多开放平台的开发者账号&#xff0c;然后创建一个应用程序&#xff0c;获取应用程序的app_id和app_secret&#xff0c;以在API请求中进行身份验证。 以下是一些获取拼多多商品数据的常用…

Java集合——Map接口学习总结

一、HashMap实现类 1.常用方法 增加&#xff1a;put(K key, V value)删除&#xff1a;clear() remove(Object key)修改&#xff1a;查看&#xff1a;entrySet() get(Object key) keySet() size() values()判断&#xff1a;containsKey(Object key) containsValue(Object value…

DateFormat使用时需要注意:多线程下需要特殊处理

前言 工作或学习过程中难免会接触到时间&#xff08;Date&#xff09;相关的内容&#xff0c;比如String类型转为Date类型&#xff0c;或者Date类型转为String类型&#xff0c;jdk为我们提供了一套完善的日期格式化工具&#xff0c;DateFormat类&#xff0c;使用者可以使用该接…

MECE原则

MECE原则 MECE原则|是麦肯锡咨询顾问芭芭拉•明托在《金字塔原理》中提出的一个思考工具。 原则介绍 它是Mutually Exclusive CollectivelyExhaustive的缩写&#xff0c;意思是 “相互独立&#xff0c;完全穷尽〞&#xff0c;也常被称为〞不重叠&#xff0c;不遗漏”。应用MEC…

MJ基础入门之注册:超详细注册 Midjourney 及使用方法

如何注册并使用 Midjourney Midjourney是一款优秀的AI图像生成工具&#xff0c;它的综合能力十分强大且易于上手。使用Midjourney&#xff0c;您可以在一分钟内生成4张图像&#xff0c;这是非常快的。不仅如此&#xff0c;国外的很多图像创作者都在使用Midjourney&#xff0c;并…

最值得学的编程语言是哪个?

如果让我推荐的话&#xff0c;我肯定首选是python啦&#xff01; 编程语言是一个计算机的概念&#xff0c;在我们有了计算机以后&#xff0c;想让它帮助我们做事情&#xff0c;就要通过计算机语言和它进行对话、交互&#xff0c;计算机语言能够被计算机所执行&#xff0c;完成…

电脑高效率工作、学习工具软件推荐

本文介绍在学习、工作时&#xff0c;实测很好用、明显提高工作效率的几个免费电脑软件与小工具。 1 Microsoft To Do 官方网站&#xff1a;https://todo.microsoft.com/tasks/ Microsoft To Do是一款由Microsoft公司开发的待办事项管理应用程序。它提供了一个简单易用的界面&a…

你买票了吗?五一火车票发售量创历史新高,车票总发售2209万张票

五一劳动节已经成为了除春节国庆节外最隆重的节日&#xff0c;是全国性的庆祝节日。在这个节日里&#xff0c;人们可以通过旅游、购物、娱乐等方式来放松身心&#xff0c;充满活力地迎接新的挑战。同时&#xff0c;五一假期也成为了国内外客流量最大的旅游黄金周之一&#xff0…

如何利用 GPT 开发智能应用?微软提出这九大原则

毫无疑问&#xff0c;GPT 的出现以日新月异的速度改写了软件开发的工作方式。 兴奋&#xff0c;也许也有点焦虑。作为开发人员&#xff0c;如何在 GPT 时代与人工智能协作&#xff1f;在「万物皆有副驾驶」的年代&#xff0c;如何划定分工边界&#xff0c;让 GPT 成为开发人员…

【测试开发】突破瓶颈必学技能——什么是k8s的核心概念?

目录 Docker 和K8s k8s中的重要概念 Master 节点 Node 节点 集群&#xff08;Cluster&#xff09; 标签&#xff08;Label&#xff09; 命名空间&#xff08;Namespace&#xff09; 容器组&#xff08;Pod&#xff09; 无状态部署&#xff08;Deployment&#xff09;…

车联网V2X通信技术及应用介绍

摘要&#xff1a; V2X技术影响用户体验的主要系统指标有延时时间、可靠性、数据速率、通信覆盖范围移动性、用户密度、安全性等。 1、车联网体系 车联网是物联网在交通这个特殊行业的典型应用。在车联网体系参考模型中主要包括三层&#xff1a;数据感知层、网络传输层和应用层…

【Git 入门教程】第五节、Git远程仓库

Git是一种分布式版本控制系统&#xff0c;它允许开发者在不同计算机之间协作并共享代码。在本文中&#xff0c;我们将介绍如何以Git为基础进行远程协作。其中包括克隆仓库、推送代码、拉取代码等操作。 一、克隆仓库 要协作开发一个Git项目&#xff0c;需要从服务器上获取该项…

微软开源AI修图工具让老照片重现生机

GitHub - microsoft/Bringing-Old-Photos-Back-to-Life: Bringing Old Photo Back to Life (CVPR 2020 oral) 支持划痕修复&#xff0c;以及模型训练。 Old Photo Restoration (Official PyTorch Implementation) Project Page | Paper (CVPR version) | Paper (Journal vers…

华纳云:怎么用shell脚本发送http请求

本篇内容介绍了“怎么用shell脚本发送http请求”的有关知识&#xff0c;在实际案例的操作过程中&#xff0c;不少人都会遇到这样的困境&#xff0c;接下来就让小编带领大家学习一下如何处理这些情况吧&#xff01;希望大家仔细阅读&#xff0c;能够学有所成&#xff01; 简述&…

Go官方指南(五)并发

Go 程 Go 程&#xff08;goroutine&#xff09;是由 Go 运行时管理的轻量级线程。 go f(x, y, z) 会启动一个新的 Go 程并执行 f(x, y, z) f, x, y 和 z 的求值发生在当前的 Go 程中&#xff0c;而 f 的执行发生在新的 Go 程中。 Go 程在相同的地址空间中运行&#xff0c…

鸿蒙Hi3861学习三-第一个实例程序Hello_world

一、简介 前两章介绍了环境搭建、烧录和编译。这一节&#xff0c;来介绍实现第一个经典代码“hello world”。 先介绍小熊派的目录结构&#xff0c;该目录结构延续了OpenHarmony官方目录结构。 二、实操 1.搭建代码架构 1).新建项目文件夹hello_world cd bearpi-hm_nano/appli…