基于黑马教程——微服务架构解析(二):雪崩防护+分布式事务

之前的两篇文章我们介绍了微服务的基础概念及其服务间通信机制。本篇将深入探讨微服务的核心保障:服务保护与分布式事务

一、微服务保护

在这里插入图片描述

问题描述:

在一个购物车的微服务中,倘若某一项服务(服务A)同一时刻访问的数据十分庞大,但是购物车服务Tomcat的线程数据是有限的,这会导致整个购物车服务崩溃。倘若这个购物车服务又和别的微服务进行关联,这样一级连一级,最终可能导致整个微服务网络的崩溃,也被称做“雪崩”。

解决方法:

服务保护的方案有很多,最典型这几种:

  • 请求限流
  • 线程隔离
  • 服务熔断

这些方法都不用我们亲自一一实现,已经有一个组件把这些集成了起来,因此我们只需要学习这个组件就行了——Sentinel

1.1 Sentinel

Sentinel 是阿里巴巴开源的一款 轻量级流量控制、熔断降级和系统保护组件,专注于解决微服务架构中的 高可用性、稳定性 问题。它提供实时的监控和动态规则配置,帮助开发者保障服务在 高并发、依赖故障、突发流量 等场景下的稳定性。

核心功能:

  • 流量控制(Flow Control):精准控制QPS、并发线程数,防止系统过载。
  • 熔断降级(Circuit Breaking):自动检测异常比例/响应时间,触发熔断保护。
  • 系统自适应保护(System Adaptive Protection):智能调整入口流量,保护系统不被压垮。
  • 实时监控(Real-time Monitoring):可视化查看接口调用情况、限流熔断数据。

在这里插入图片描述

1.2 请求限流

核心作用:通过精准控制单位时间内的请求量,防止突发流量导致系统过载崩溃。

在这里插入图片描述

实现原理

  • 设定QPS(每秒查询量)或并发线程数阈值
  • 超出阈值的请求将被立即拒绝或排队等待
  • 支持多种算法:固定窗口、滑动窗口、漏桶、令牌桶等

典型应用场景

  • 秒杀系统的高峰期流量控制
  • API网关的全局流量管控
  • 核心业务接口的访问保护

1.3 线程隔离

核心机制:通过为每个微服务子服务分配独立的执行线程池,实现故障隔离。

关键优势

  1. 资源隔离:单个子服务的线程池耗尽不会影响其他服务
  2. 故障隔离:崩溃的线程仅影响当前服务实例
  3. 弹性伸缩:可根据服务重要性动态调整线程池大小

实现方式对比

隔离策略实现方式适用场景资源消耗
线程池隔离每个服务独立线程池耗时较长的同步调用较高
信号量隔离计数器控制并发数轻量级快速调用较低

最佳实践

  • 关键服务配置更大的线程池
  • 配合熔断机制实现双重保护
  • 通过监控实时调整线程池参数

补充说明

虽然线程隔离能有效防止级联故障,但仍需配合熔断机制使用。当某服务线程池完全耗尽时,熔断器可以快速失败并启动降级策略,避免请求堆积。

1.4 服务熔断

当系统检测到某个子服务即将崩溃(如响应时间飙升、错误率激增)时,直接阻断对该服务的所有请求,并快速返回一个预设的备选结果(Fallback),从而避免级联故障。

所以,我们要做两件事情:

  • 编写服务降级逻辑:就是服务调用失败后的处理逻辑,根据业务场景,可以抛出异常,也可以返回友好提示或默认数据。
  • 异常统计和熔断:统计服务提供方的异常比例,当比例过高表明该接口会影响到其它服务,应该拒绝调用该接口,而是直接走降级逻辑。

三者对比

保护策略核心机制主要作用触发条件实现方式适用场景代表框架
请求限流控制单位时间请求量防止突发流量压垮系统QPS或并发数超过阈值- 计数器算法 - 漏桶/令牌桶算法- 秒杀系统 - API网关限流Sentinel、Redis RateLimit
线程隔离资源隔离(线程池/信号量)避免单个服务耗尽所有线程资源线程池满/信号量耗尽- 独立线程池 - 信号量计数- 同步阻塞调用 - 耗时操作隔离Hystrix、Sentinel
服务熔断快速失败+自动恢复防止级联故障,提升系统可用性错误率/慢调用比例超过阈值- 熔断器状态机(开/半开/关) - 降级策略- 弱依赖服务 - 第三方接口调用Sentinel、Resilience4j

二、分布式事务

在这里插入图片描述

在分布式系统中,一个业务执行需要多个微服务共同参与。以图中为例,整个业务为购买商品事务,交易服务、购物车服务和库存服务为分支事务。在单体项目中,很容易满足事务ACID原则,但是在分布式如何满足?

2.1 Seata

核心定位:阿里巴巴开源的 一站式分布式事务解决方案,提供 AT、TCC、Saga、XA 多种模式,解决微服务架构下的数据一致性问题。

Seata的事务管理中有三个重要的角色:

  • TC (Transaction Coordinator) - 事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚。
  • TM (Transaction Manager) - 事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务。
  • RM (Resource Manager) - 资源管理器:管理分支事务,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
    在这里插入图片描述

TM 就是全局事务的管理者,由这个决定什么时候开启事务,什么时候提交和回滚事务,RM 就是针对自己的分支事务进行汇报,分支事务的回滚和提交。TC 其实就先相当于一个中间人, 监控所有RM 状态汇报给到TM,然后什么操作有TM决定

而TC服务则是事务协调中心,是一个独立的微服务,需要单独部署

2.2 Seata的XA模型

在这里插入图片描述

RM一阶段的工作:

  1. 注册分支事务到TC
  2. 执行分支业务sql但不提交
  3. 报告执行状态到TC

TC二阶段的工作:

  1. TC检测各分支事务执行状态
  2. 如果都成功,通知所有RM提交事务
  3. 如果有失败,通知所有RM回滚事务

RM二阶段的工作:

  • 接收TC指令,提交或回滚事务

2.3 Seata的AT模型

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

阶段一RM的工作:

  • 注册分支事务
  • 记录undo-log(数据快照)
  • 执行业务sql并提交
  • 报告事务状态

阶段二提交时RM的工作:

  • 删除undo-log即可

阶段二回滚时RM的工作:

  • 根据undo-log恢复数据到更新前

2.4 两个模型之间的区别

对比维度AT模型(自动补偿)XA模型(两阶段提交)
一致性最终一致性(存在短暂中间状态)强一致性(全程数据锁定)
性能⭐⭐⭐⭐(一阶段已提交,无阻塞)⭐⭐(同步阻塞,资源长时间锁定)
侵入性低侵入(无需改造业务代码)低侵入(依赖数据库原生XA协议)
实现复杂度简单(自动生成反向SQL)中等(需数据库支持XA)
锁范围全局行锁(仅二阶段冲突检测时短暂加锁)全程行锁(Prepare阶段即锁定)
补偿机制自动生成undo_log反向SQL依赖数据库回滚(无自动补偿)
适用场景高并发OLTP场景(如电商、库存)传统金融系统(如银行核心账务)
数据库支持支持主流关系型数据库(MySQL/Oracle等)需数据库明确支持XA协议(如MySQL InnoDB)
故障恢复依赖undo_log恢复(需保证日志可靠)依赖数据库日志恢复
典型框架Seata默认模式Seata XA模式、传统JTA

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

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

相关文章

LeetCode: 429 N叉树的层序遍历

题目描述给定一个 N 叉树,返回其节点值的层序遍历(即从左到右,逐层访问每一层的所有节点)。示例输入格式(层序序列化):输入示意:1/ | \3 2 4/ \5 6输出:[[1], [3,2,4…

使用phpstudy极简快速安装mysql

使用 phpStudy 极简快速安装 MySQL 的完整指南: 一、phpStudy 简介 phpStudy 是一款 Windows 平台下的 PHP 环境集成包,包含: Apache/Nginx PHP 5.x-7.x MySQL 5.5-8.0 phpMyAdmin 二、安装步骤 1. 下载安装包 访问官网下载&#xf…

git lfs使用

apt install git lfs 或者下载二进制文件加到环境变量 https://github.com/git-lfs/git-lfs/releases git lfs install git lfs clone huggingface文件路径 如果访问不了hugggingface.co用hf-mirror.com替代,国内下载速度还是挺快的 先按照pip install modelscope m…

6、CentOS 9 安装 Docker

🐳 CentOS 9 安装 Docker 最全图文教程(含镜像源优化与常见问题解决)标签:CentOS 9、Docker、容器技术、开发环境、国内镜像源 适合读者:后端开发、运维工程师、Linux 初学者📌 前言 在 CentOS 9 上安装 Do…

SystemV消息队列揭秘:原理与实战

目录 一、消息队列的基本原理 1、基本概念 2、基本原理 3、消息类型的关键作用 4、重要特性总结 5、生命周期管理 6、典型应用场景 二、System V 消息队列的内核数据结构 1、消息队列的管理结构 msqid_ds(消息队列标识符结构) 关键字段解析 2…

5 分钟上手 Firecrawl

文章目录Firecrawl 是什么?本地部署验证mcp安装palyground🔥 5 分钟上手 FirecrawlFirecrawl 是什么? 一句话: 开源版的 “最强网页爬虫 清洗引擎” • 自动把任意网页 → 结构化 Markdown / JSON • 支持递归整站抓取、JS 渲染…

算法训练营day31 贪心算法⑤56. 合并区间、738.单调递增的数字 、968.监控二叉树

贪心算法的最后一篇博客!前面两道题都是比较简单的思路,重点理解一下最后一道题即可。有一说一,进入到贪心算法这一章节之后,我的博客里和代码注释里的内容明显少了很多,因为很多贪心的题目我觉得不需要很复杂的文字说…

Jenkins流水线部署+webhook2.0

文章目录1. 环境2. 用到的插件3. 流水线部署脚本1. 环境 Centos7Jenkins2.5.0JDKopen17阿里云仓库 注意:这个版本兼容需要特别注意,要不然会很麻烦 2. 用到的插件 Generic Webhook Trigger 3. 流水线部署脚本 兼容钩子部署(webhook&…

IDM下载失败排查

网络连接问题排查检查网络连接是否稳定,确保能够正常访问互联网 测试其他下载工具或浏览器是否能够正常下载 尝试关闭防火墙或杀毒软件,排除安全软件拦截的可能性代理和VPN设置检查确认IDM的代理设置是否正确,是否与系统代理一致 检查是否使用…

Anaconda安装时的几个操作

一、安装Anaconda 其实Anaconda的安装比较简单,点击next就好了。在安装中需要注意以下两点: 1、选择安装路径 在安装时,路径最好选择非C盘,且路径中不要出现中文,以免后期运行代码时出现不必要的错误。 我安装时&…

网易易盾、腾讯ACE等主流10款游戏反外挂系统对比

本文将深入对比10款游戏反外挂系统:1.网易易盾;2.Ricochet Anti‑Cheat;3.BattlEye;4.几维安全手游智能反外挂系统;5.伏魔AI反外挂;6.Riot Vanguard;7.Xigncode3;8.盛大GPK&#xff…

wpa_supplicant-2.10交叉编译

参考文章:https://blog.csdn.net/weixin_45783574/article/details/145810790 1、Openssl交叉编译 1.1 下载openssl-1.1.1t.tar.gz 下载网址: https://openssl-library.org/source/old/1.1.1/index.html1.2 编译 sudo tar xvf openssl-1.1.1t.tar.gz cd openssl-1.1

源码解读SpringCloudAlibaba Nacos2.x

Nacos 服务注册 Nacos 服务注册时,客户端会将自己的信息注册到Nicosserver上,形成key-value组合,其中key通常是服务名称,value是实例地址信息。在二点X版本中,客户端通过Spring Boot的扩展机制(例如web_initialized事件…

Windows 11 下 Anaconda 命令修复指南及常见问题解决

Windows 11 下 Anaconda 命令修复指南及常见问题解决 在使用 Anaconda 过程中,可能会遇到环境损坏、更新失败、包依赖冲突等问题。本文整理了一套通过命令行修复 Anaconda 的完整方案,适用于 Windows 11 系统,同时补充了权威参考链接供深入学…

安宝特案例丨全球连线!安宝特Vuzix与RodsCones共筑实时手术教育平台

安宝特Vuzix与合作伙伴Rods&Cones协作,为Rocamed在布拉格UROSANIT诊所举办的创新型实时手术直播研讨会提供技术赋能。 本次直播通过合作伙伴Rods&Cones软件平台搭载安宝特Vuzix智能眼镜,成功连接来自9国、3大洲、6个时区的27位医生,…

【Spring Boot 快速开发】一、入门

目录Spring Boot 简介Web 入门Spring Boot 快速入门HTTP 协议概述请求协议响应协议解析协议TomcatSpring Boot 简介 Spring Boot 是由 Pivotal 团队(后被 VMware 收购)开发的基于 Spring 框架的开源项目,于 2014 年首次发布。其核心目标是简…

laravel chunkById导出数据乱序问题

2025年7月28日17:47:29 这几天在做数据导出优化,使用xlswriter作为导出组件,但是发现在 使用 $base->chunkById(2000, function ($list) use ($writer, $sheet1) { 发现导出的数据是乱的,偶尔有些重复,偶尔有些少了&#xff0c…

Spring IOC与DI

spring的两大思想:IOC与AOP一、ioc的概念什么叫控制翻转?之前:对象的使用方,创建对象,对象的控制权,在对象的使用方手中.spring:对象的控制权交给了spring.举个例子:智能驾驶,之前车的使用权在人手中,而现在在ai手中,这就是控制反转.什么叫ioc:之前车企生产车需要做整个车,费事…

【图像处理基石】Segment Anything Model (SAM) 调研

Segment Anything Model (SAM) 是由 Meta AI 开发的革命性图像分割模型,它能够对图像中的任何物体进行分割,无需针对特定类别进行训练。SAM 具有以下特点: 通用性:可以分割任何视觉对象,无论是否见过该类别 灵活性:支持多种输入提示(点、框、掩码或文本) 实时性:在普通…

unisS5800XP-G交换机配置命令之端口篇

一、批量配置端口(1) 进入系统视图。system-view(2) 指定接口范围&#xff0c;并进入接口批量配置视图。¡ 指定一个不带别名的接口列表。interface range { interface-type interface-number [ to interface-type interface-number ] } &<1-24>¡…