微服务面试(分布式事务、注册中心、远程调用、服务保护)

article/2025/8/7 11:26:04

1.分布式事务

分布式事务,就是指不是在单个服务或单个数据库架构下,产生的事务,例如:

  • 跨数据源的分布式事务
  • 跨服务的分布式事务
  • 综合情况

我们之前解决分布式事务问题是直接使用Seata框架的AT模式,但是解决分布式事务问题的方案远不止这一种。

1.1.CAP定理

解决分布式事务问题,需要一些分布式系统的基础知识作为理论指导,首先就是CAP定理

1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标:

  • Consistency(一致性)
  • Availability(可用性)
  • Partition tolerance (分区容错性)
    它们的第一个字母分别是 C、A、P。Eric Brewer认为任何分布式系统架构方案都不可能同时满足这3个目标,这个结论就叫做 CAP 定理。
    为什么呢?
    在这里插入图片描述

1.1.1.一致性

Consistency(一致性):用户访问分布式系统中的任意节点,得到的数据必须一致
比如现在包含两个节点,其中的初始数据是一致的:
在这里插入图片描述
当我们修改其中一个节点的数据时,两者的数据产生了差异:
在这里插入图片描述
要想保住一致性,就必须实现node01 到 node02的数据 同步:
在这里插入图片描述

1.1.2.可用性

Availability (可用性):用户访问分布式系统时,读或写操作总能成功
只能读不能写,或者只能写不能读,或者两者都不能执行,就说明系统弱可用或不可用。

1.1.3.分区容错

Partition,就是分区,就是当分布式系统节点之间出现网络故障导致节点之间无法通信的情况:
在这里插入图片描述
如上图,node01和node02之间网关畅通,但是与node03之间网络断开。于是node03成为一个独立的网络分区;node01和node02在一个网络分区

Tolerance,就是容错,即便是系统出现网络分区,整个系统也要持续对外提供服务

1.1.4.矛盾

在分布式系统中,网络不能100%保证畅通,也就是说网络分区的情况一定会存在。而我们的系统必须要持续运行,对外提供服务。所以分区容错性(P)是硬性指标,所有分布式系统都要满足。而在设计分布式系统时要取舍的就是一致性(C)和可用性(A)了。

假如现在出现了网络分区,如图:
在这里插入图片描述
由于网络故障,当我们把数据写入node01时,可以与node02完成数据同步,但是无法同步给node03。现在有两种选择

  • 允许用户任意读写,保证可用性。但由于node03无法完成同步,就会出现数据不一致的情况。满足AP
  • 不允许用户写,可以读,直到网络恢复,分区消失。这样就确保了一致性,但牺牲了可用性。满足CP

可见,在分布式系统中,A和C之间只能满足一个

1.2.BASE理论

既然分布式系统要遵循CAP定理,那么问题来了,我到底是该牺牲一致性还是可用性呢?如果牺牲了一致性,出现数据不一致该怎么处理?
人们在总结系统设计经验时,最终得到了一些心得

  • Basically Available (基本可用):分布式系统在出现故障时,允许损失部分可用性,即保证核心可用
  • Soft State(软状态):在一定时间内,允许出现中间状态,比如临时的不一致状态。
  • Eventually Consistent(最终一致性):虽然无法保证强一致性,但是在软状态结束后,最终达到数据一致

以上就是BASE理论。

简单来说,BASE理论就是一种取舍的方案,不再追求完美,而是最终达成目标。因此解决分布式事务的思想也是这样,有两个方向

  • AP思想:各个子事务分别执行和提交,无需锁定数据。允许出现结果不一致,然后采用弥补措施恢复,实现最终一致即可。例如AT模式就是如此
  • CP思想:各个子事务执行后不要提交,而是等待彼此结果,然后同时提交或回滚。在这个过程中锁定资源,不允许其它人访问,数据处于不可用状态,但能保证一致性。例如XA模式

1.3.AT模式的脏写问题

我们先回顾一下AT模式的流程,AT模式也分为两个阶段:
在这里插入图片描述

第一阶段是记录数据快照,执行并提交事务

在这里插入图片描述
第二阶段根据阶段一的结果来判断:

  • 如果每一个分支事务都成功,则事务已经结束(因为阶段一已经提交),因此删除阶段一的快照即可
  • 如果有任意分支事务失败,则需要根据快照恢复到更新前数据。然后删除快照
    在这里插入图片描述
    这种模式在大多数情况下(99%)并不会有什么问题,不过在极端情况下,特别是多线程并发访问AT模式的分布式事务时,有可能出现脏写问题,如图:

在这里插入图片描述
解决思路就是引入了全局锁的概念。在释放DB锁之前,先拿到全局锁。避免同一时刻有另外一个事务来操作当前数据。(db锁的等待时长非常长,而事务2的全局锁的等待时长只有300毫秒,所以一般最后事务1一定会拿到全局锁和db锁,不会想回等待进入死锁)

在这里插入图片描述
具体可以参考官方文档:
https://seata.apache.org/zh-cn/docs/dev/mode/at-mode/

全局锁能够限制的是都被seata统一管理的,如果有一个操作不是seata提哦难过一管理的,是其他操作的,那么全局锁就会失效,需要人工介入

在这里插入图片描述


http://www.hkcw.cn/article/qufEIEtImL.shtml

相关文章

儿童节快乐,聊聊数字的规律和同余原理

某年的6月1日是星期日。那么,同一年的6月30日是星期几? 星期是7天一个循环。所以说,这一天是星期几,7天之后同样也是星期几。而6月30日是在6月1日的29天之后:29 7 4 ... 1用29除以7,可以得出余数为1。而…

视觉分析明火检测助力山东化工厂火情防控

视觉分析技术赋能化工厂火情防控:从山东事故看明火与烟雾检测的应用价值 一、背景:山东化工事故中的火情防控痛点 近期,山东高密友道化学有限公司、淄博润兴化工科技有限公司等企业接连发生爆炸事故,暴露出传统火情防控手段的局…

javaEE->多线程:定时器

一. 定时器 约定一个时间,时间到了,执行某个代码逻辑(进行网络通信时常见) 客户端给服务器发送请求 之后就需要等待 服务器的响应,客户端不可能无限的等,需要一个最大的期限。这里“等待的最大时间”可以用…

HTML表单

1. 什么是表单 表单常用格式 文本框 密码框 单选按钮 复选框 列表框 按钮 多行文本域 文件域 邮箱 网址 数字 滑块 搜索框 2. 表单的高级应用 隐藏域(⭐) 隐藏域在网页中会经常被使用,比如我们登录了以后需要持续使用我们的登录信息&#xff…

STM32F407寄存器操作(ADC非连续扫描模式)

1.前言 书接上回,在看手册的时候我突然发现手册上还描述了另一种ADC扫描模式,即非连续扫描模式,想着连续扫描模式都已经探索过了,那就顺手把非非连续模式研究一下吧。 2.理论 我们先看看手册,这里我就以规则通道举例…

老年照护实训室建设方案设计:基础照护与专业护理实训

老年照护实训室的建设是提升老年照护人才培养质量的关键环节,其方案设计需精准对接基础照护与专业护理的实训需求,为学习者构建理论与实践深度融合的教学场景。点击获取实训室建设方案 一、建设背景与目标 (一)建设背景 随着人…

C语言 — 文件

目录 1.流1.1 流的概念1.2 常见的的流 2.文件的打开和关闭2.1 fopen函数2.2 fclose函数2.3 文件的打开和关闭 3.文件的输入输出函数3.1 fputc函数3.2 fgetc函数3.3 feof函数和ferror函数3.4 fputs函数3.5 fgets函数3.6 fwrite函数3.7 fread函数3.8 fprintf函数3.9 fscanf函数 4…

13. springCloud AlibabaSeata处理分布式事务

目录 一、分布式事务面试题 1.多个数据库之间如何处理分布式事务? 2.若拿出如下场景,阁下将如何应对? 3.阿里巴巴的Seata-AT模式如何做到对业务的无侵入? 4.对于分布式事务问题,你知道的解决方案有哪些?请你谈谈? 二、分布式事务问题…

java多线程与JUC

进程线程 进程:进程是操作系统分配资源的基本单位。在电脑中,一个软件就是一个进程 线程:线程是CPU调度的基本单位,是进程内的执行单元。相当于一个软件中的不同功能 多线程程序的特点:程序可以同时去做多件事&#…

GCC 下载安装

下载 官网:GCC, the GNU Compiler Collection- GNU Project Cygwin linux 环境 MinGW 在 Windows 上提供 GNU 开发工具比 Cygwin 更轻量(不模拟完整的 POSIX 环境)选择:binaries选择mingw-w64

GpuGeek如何成为AI基础设施市场的中坚力量

AI时代,算力基础设施已成为支撑技术创新和产业升级的关键要素。作为国内专注服务算法工程师群体的智算平台,GpuGeek通过持续创新的服务模式、精准的市场定位和系统化的生态建设,正快速成长为AI基础设施领域的中坚力量。本文将深入分析GpuGeek…

DAY 35 超大力王爱学Python

知识点回顾: 三种不同的模型可视化方法:推荐torchinfo打印summary权重分布可视化进度条功能:手动和自动写法,让打印结果更加美观推理的写法:评估模式 作业:调整模型定义时的超参数,对比下效果。…

MYOJ_4149:(洛谷P1002)[NOIP 2002 普及组] 过河卒(坐标型DP)

题目描述 棋盘上 A 点有一个过河卒,需要走到目标 B 点。卒行走的规则:可以向下、或者向右。同时在棋盘上 C 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。 棋盘用坐标表示&#xff0…

Java高效处理大文件:避免OOM的深度实践

​关键痛点​:当加载10GB的CSV文件时,Files.readAllLines()抛出OutOfMemoryError,该如何解决? 在Java中处理大文件是开发中的高频场景,尤其在大数据、日志分析等领域。本文将深入探讨几种高效处理大文件的方案&#x…

Word双栏英文论文排版攻略

word写双栏英文论文的注意事项 排版首先改字体添加连字符还没完呢有时候设置了两端对齐会出现这样的情况: 公式文献 等我下学期有时间了,一定要学习Latex啊,word写英文论文,不论是排版还是公式都很麻烦的,而Latex一键就…

esp-idf ubuntu环境配置

常用命令 source ~/esp/esp-idf/export.shidf.py --list-targets idf.py set-target 将清除 build 目录,并重新生成 sdkconfig 文件,原来的 sdkconfig 文件保存为 sdkconfig.old。 idf.py build idf.py flashNo module named pip wget https://bootst…

BFS入门刷题

目录 P1746 离开中山路 P1443 马的遍历 P1747 好奇怪的游戏 P2385 [USACO07FEB] Bronze Lilypad Pond B P1746 离开中山路 #include <iostream> #include <queue> #include <cstring> using namespace std; int n; int startx, starty; int endx, endy; …

Cypress + TypeScript + Vue3

🚀 从零构建 Cypress + TypeScript + Vue3 组件测试环境【详细实战教程】 组件测试是前端开发中不可忽视的一环,它能够帮助我们在开发阶段就发现 UI 与交互逻辑问题。本文将带你手把手搭建基于 Cypress + TypeScript + Vue3 的组件测试环境,包含完整目录结构、配置文件、组…

车辆检测算法在爆炸事故应急响应中的优化路径

视觉分析赋能车辆管控&#xff1a;以山东应急场景为例 背景&#xff1a;应急场景下的车辆管控痛点 近期山东多起爆炸事故暴露了应急响应中的车辆管理短板&#xff1a;消防车、救护车因违停车辆堵塞通道&#xff0c;违规车辆闯入事故核心区&#xff0c;传统监控系统依赖人工识别…

【小沐杂货铺】基于Three.JS绘制太阳系Solar System(GIS 、WebGL、vue、react,提供全部源代码)第2期

&#x1f37a;三维数字地球系列相关文章如下&#x1f37a;&#xff1a;1【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第一期2【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第二期3【小沐学GIS】…