【微服务】4、服务保护

微服务架构与组件介绍

  1. 单体架构拆分:黑马商城早期为单体架构,后拆分为微服务架构。
  2. 跨服务调用与组件使用
    • 服务拆分后存在跨服务远程调用,如下单需查询商品信息,使用openfeign组件解决。
    • 服务间调用关系复杂,需维护服务地址和健康状态,采用Nacos组件进行服务治理。
    • 前端因服务增多不知调用哪个服务,引入网关组件,实现前端请求路由转发和身份认证。
    • 微服务增多致配置复杂,学习配置管理组件(Nacos),可抽取共享配置、实现热更新,提高服务可用性。

在这里插入图片描述

服务保护

雪崩问题引入
- 微服务中一个小故障可能引发雪崩,如某服务故障处理不当,可能导致整个链路乃至微服务群不可用。

在这里插入图片描述

雪崩问题举例分析

  1. 购物车服务调用场景:以购物车服务为例,其业务复杂,可能调用多个其他服务,如商品服务等,正常情况下调用返回结果处理成功。
  2. 商品服务故障影响
    • 若商品服务故障,请求卡住不返回或处理时间过长(如正常几十毫秒,故障时达几秒),购物车服务调用商品服务的请求无法得到响应,导致购物车服务请求也无法返回给用户。
    • 在高并发场景下,每秒请求量多,处理速度跟不上请求速度,购物车服务所在服务器资源有限,请求堆积会耗尽资源。
    • 新请求因购物车服务资源耗尽无法进入,即使其原本要调用的服务正常,也会导致购物车服务瘫痪,类似地,其他调用商品服务或购物车服务的服务也可能因资源耗尽出现故障,最终可能使整个微服务群多数服务宕机,形成雪崩。

在这里插入图片描述

雪崩问题产生原因

  1. 服务提供者故障:某微服务提供者出现故障,如进入请求阻塞或处理速度极慢。
  2. 调用者异常处理不当:服务调用者未做好应对,在调用故障服务时被卡住或等待时间长,导致自身资源耗尽,调用链中所有调用者接连失败。

雪崩问题解决思路

  1. 避免服务故障思路
    • 保证代码质量,避免代码逻辑复杂(如for循环嵌套、频繁查数据库)导致响应时间变长、内存溢出等问题。
    • 确保网络畅通,满足微服务间相互调用的网络消耗,保证足够带宽。
    • 应对高并发请求,具备处理大量请求能力,避免服务被压垮。
  2. 故障应对处理
    • 无法保证服务百分百不故障,服务调用者需做好远程调用异常后备方案,发现调用异常时做好处理,避免故障扩散,具体后备处理方式将后续分析。

在这里插入图片描述


服务保护

请求限流

  1. 雪崩问题解决方案概述

    • 解决思路

      • 保护服务提供者,避免出现故障。
      • 服务调用者隔离故障,防止故障传递。
    • 服务保护方案分类

      • 请求限流:限制访问微服务的请求并发量,保护服务提供者。
      • 线程隔离(舱壁模式):限定每个业务使用的线程数量,实现业务隔离,避免故障扩散。
      • 服务熔断与fallback逻辑:断路器监控请求异常比例和慢调用比例,超出阈值熔断接口请求,熔断后走fallback逻辑,避免资源浪费。
        在这里插入图片描述
  2. 请求限流

    • 原理:通过限流器按设定流量放行请求,将狂暴波动的并发处理成平稳请求,保护服务提供者。
    • 作用:避免服务因流量激增出现故障,是流量整形的一种方式。

在这里插入图片描述

  1. 线程隔离(舱壁模式)
    • 思想来源:模拟船舱隔板防水原理,将故障隔离在一定范围内。
    • 实现方式:限定每个业务能够使用的线程数量。例如服务A调用服务B和C,可限定业务一调用服务B使用10个线程,业务二调用服务C使用4个线程。当服务C故障时,业务二最多占用4个线程,不会耗尽服务A资源,保证其他业务不受影响。
    • 作用:实现业务隔离,避免故障扩散,但仅做隔离仍可能浪费资源。

在这里插入图片描述

  1. 服务熔断与fallback逻辑

    • 服务熔断
      • 原理:断路器统计请求异常比例和慢调用比例,超出阈值熔断接口请求。
      • 举例:服务A调用服务C,若多次调用异常或慢调用比例高,断路器断开,拒绝后续请求。
    • fallback逻辑
      • 概念:熔断后定义的后备处理方案。
      • 实现:在服务调用者处提前写好业务逻辑,如查询广告数据业务,熔断后可返回默认广告数据;无返回值业务可返回友好提示给前端。
      • 作用:减少远程调用和等待,提高处理速度,避免资源浪费,提高前端响应速度。
        在这里插入图片描述
  2. Sentinel与Hystrix对比

    • 产品信息
      • Sentinel:Spring Cloud阿里巴巴产品。
      • Hystrix:Spring Cloud Netflix(网飞)产品。
    • 功能特性对比
      • 线程隔离:Sentinel基于信号量隔离;Hystrix默认基于线程池隔离,也可支持信号量(需调整配置)。
      • 熔断策略:Sentinel熔断策略较多,慢调用或异常调用比例过高都会触发;Hystrix主要是异常比例中断。
      • 限流:Sentinel限流方式多样,功能强大;Hystrix相对简单,基于线程池简单限流。
      • fallback:两者均支持。
    • 控制台
      • Sentinel提供开箱即用可配置控制台,可实时监控项目运行状态。
      • Hystrix控制台较简陋。
    • 配置方式
      • Sentinel可基于控制台或代码实现,仅基于控制台重启会失效。
      • Hystrix默认基于配置文件和注解,需编码实现,永久生效。

在这里插入图片描述

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

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

相关文章

SQL从入门到实战

学前须知 sqlzoo数据介绍 world nobel covid ge game、goal、eteam teacher、dept movie、casting、actor 基础语句 select&from SELECT from WORLD Tutorial - SQLZoo 基础查询select单列&多列&所有列&别名应用 例题一 SELECT name, continent, population …

QML学习(八) Quick中的基础组件:Item,Rectangle,MouseArea说明及使用场景和使用方法

上一篇中我们从设计器里可以看到Qt Quick-Base中有几大基础组件,如下图,这篇文章先介绍下Item,Rectangle,MouseArea这三个的说明及使用场景和使用方法 Item Item 是 QML 中所有可视元素的基类,是一个非常基础和通用的…

设计模式(1)——面向对象和面向过程,封装、继承和多态

文章目录 一、day11. 什么是面向对象2. 面向对象的三要素:继承、封装和多态2.1 封装**2.1.1 封装的概念****2.1.2 如何实现封装****2.1.3 封装的底层实现**2.1.4 为什么使用封装?(好处)**2.1.5 封装只有类能做吗?结构体…

Java到底是值传递还是引用传递????

在搞懂这个问题之前, 我们要首先了解什么是值传递, 什么是引用传递? 值传递: 传递的是数据的副本,修改副本不会影响原始数据。引用传递: 传递的是数据的引用(地址),修改引用会直接影响原始数据. 也就是说,值传递和引…

VLMs之Agent之CogAgent:《CogAgent: A Visual Language Model for GUI Agents》翻译与解读

VLMs之Agent之CogAgent:《CogAgent: A Visual Language Model for GUI Agents》翻译与解读 导读:这篇论文介绍了CogAgent,一个专注于图形用户界面 (GUI) 理解和导航的视觉语言模型 (VLM)。这篇论文提出了一种新的视觉语言模型 CogAgent&#…

23.行号没有了怎么办 滚动条没有了怎么办 C#例子

新建了一个C#项目,发现行号没有了。 想把行号调出来,打开项目,选择工具>选项> 如下图,在文本编辑器的C#里有一个行号,打开就可以了 滚动条在这里:

Element-plus表单总结

表单包含输入框,单选框,下拉选择,多选框等用户输入的组件。输入表单,您可以收集、验证和提交数据。 经典表单 最基础的表单包括各种输入表单项,比如input、select、radio、checkbox等。 在每一个form组件中&#xff0…

在K8S上部署OceanBase的最佳实践

在K8S上部署OceanBase的最佳实践 目录 1. 背景与选型 1.1 为什么选择OB1.2 为什么选择ob-operator实现OB on K8S 2. 部署实操 2.1 环境准备2.2 安装 ob-operator2.3 配置 OB 集群2.4 配置 OBProxy 集群2.5 Headless Service 和 CoreDNS 配置2.6 监控与运维 2.6.1 Promethues部…

关于FPGA中添加FIR IP核(采用了GOWIN EDA)

文章目录 前言一、IP核二、MATLAB文件三、导出系数COE文件1.设计滤波器2.用官方的matlab代码或者直接用文本文件 四、进行模块化设计源文件 前言 FIR滤波器的特点是其输出信号是输入信号的加权和,权值由滤波器的系数决定。每个系数代表了滤波器在特定延迟位置上的“…

部署:上传项目代码 配置数据库

一、上传代码 1、使用git 可以使用Git Clone。使用前,在服务器上也要创建秘钥对。这里的密钥对,是专门用来读取Git仓库的。 在宝塔上,点击终端。进来后,运行 ssh-keygen还是一路回车,密钥对就建好了。 接着用命令…

【竞技宝】CS2:HLTV2024职业选手排名TOP8-broky

北京时间2025年1月7日,HLTV年度选手排名正在持续公布中,今日凌晨正式公布了今年的TOP8为FAZE战队的broky。 选手简介 broky是一位来自拉脱维亚的职业CS选手,现年23岁。2018年7月,broky获得了FPL资格,连续几季在榜上前5。他的首次赛场留名是跟随拉脱维亚本土战队Wolsung出征BES…

英伟达 RTX 5090 显卡赋能医疗大模型:变革、挑战与展望

一、英伟达 RTX 5090 与 RTX 4090 技术参数对比 1.1 核心架构与制程工艺 在探讨英伟达 RTX 4090 与 RTX 5090 的差异时,核心架构与制程工艺无疑是最为关键的基础要素,它们从根本上决定了两款显卡的性能上限与应用潜力。 1.1.1 核心架构差异 RTX 4090…

【Cesium】自定义材质,添加带有方向的滚动路线

【Cesium】自定义材质,添加带有方向的滚动路线 🍖 前言🎶一、实现过程✨二、代码展示🏀三、运行结果🏆四、知识点提示 🍖 前言 【Cesium】自定义材质,添加带有方向的滚动路线 🎶一、…

unity学习12:地图相关的一些基础2, 增加layer种草种树

目录 参考学习 1 地图设置 1.1 上次制作的地图,稍微加点地形完善下. 1.2 调整下camera 1.3 摄像机camera的移动速度 1.4 地图属性,terrain settings 1.5 但是,地图看起来像沙漠一样,很单调 2 paint terrain / paint textu…

游戏引擎学习第77天

仓库: https://gitee.com/mrxiao_com/2d_game 回顾昨天的 bug 今天我们继续开发进度,进行调试昨天代码的问题,主要是关于如何跟踪玩家和敌人在世界中的高度位置。虽然我们做的是一款 2D 游戏,但我们希望能够处理多层的房间,玩家…

【微服务】7、分布式事务

在分布系统中,一个业务由多个服务合作完成,每个服务有自己的事务,多个事务需同时成功或失败,这样的事务称为分布式事务。 其中每个服务的事务叫分支事务,整个业务的统一事务叫全局事务。 分布式事务相关知识讲解 课程引…

【pyqt】(四)Designer布局

布局 之前我们利用鼠标拖动的控件的时候,发现一些部件很难完成对齐这些工作,pyqt为我们提供的多种布局功能不仅可以让排版更加美观,还能够让界面自适应窗口大小的变化,使得布局美观合理。最常使用的三种布局就是垂直河子布局、水…

30天开发操作系统 第 12 天 -- 定时器

前言 定时器(Timer)对于操作系统非常重要。它在原理上却很简单,只是每隔一段时间(比如0.01秒)就发送一个中断信号给CPU。幸亏有了定时器,CPU才不用辛苦地去计量时间。……如果没有定时器会怎么样呢?让我们想象一下吧。 假如CPU看不到定时器而仍想计量时…

大数据-268 实时数仓 - ODS层 将 Kafka 中的维度表写入 DIM

点一下关注吧!!!非常感谢!!持续更新!!! Java篇开始了! MyBatis 更新完毕目前开始更新 Spring,一起深入浅出! 目前已经更新到了: H…

算法5--位运算

目录 基础经典例题[面试题 01.01. 判定字符是否唯一](https://leetcode.cn/problems/is-unique-lcci/description/)[268. 丢失的数字](https://leetcode.cn/problems/missing-number/description/)[371. 两整数之和](https://leetcode.cn/problems/sum-of-two-integers/descrip…