【微服务】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.mzph.cn/bicheng/67748.shtml

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

相关文章

【网络安全 | 漏洞挖掘】通过模拟功能实现提权(Bugcrowd)

未经许可,不得转载。 我将与大家分享我在 Bugcrowd 的某个项目中发现的一个漏洞,该项目中有一个“用户模拟”功能。 什么是用户模拟? 用户模拟允许管理员在不知晓用户凭据的情况下“以用户身份登录”。这种功能常见于管理员需要调试问题、审查用户权限或解决投诉的平台中。…

安装MySQL的五种方法(Linux系统和Windows系统)

一.在Linux系统中安装MySQL 第一种方法:在线YUM仓库 首先打开MySQL官网首页 www.mysql.com 找到【DOWNLOADS】选项,点击 下拉,找到 【MySQL Community(GPL) Downloads】 在社区版下载页面中,【 MySQL Yum Repository 】链接为在线仓库安装…

【Spring Boot 应用开发】-01 初识

特性 Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是帮助开发者快速创建独立的、生产级的基于 Spring 框架的应用程序。以下是 Spring Boot 的一些主要特点: 简化配置:Spring Boot 提供了自动配置机制,能够根据类路径…

AR 眼镜之-拍照/录像动效切换-实现方案

目录 📂 前言 AR 眼镜系统版本 拍照/录像动效切换 1. 🔱 技术方案 1.1 技术方案概述 1.2 实现方案 1)第一阶段动效 2)第二阶段动效 2. 💠 默认代码配置 2.1 XML 初始布局 2.2 监听滑动对 View 改变 3. ⚛️…

django解决跨域问题

# 1.安装django-cors-headers 库 pip install django-cors-headers -i https://pypi.tuna.tsinghua.edu.cn/simple2.添加到应用程序中 添加 corsheaders 到你的 INSTALLED_APPS 设置中: INSTALLED_APPS [...corsheaders,... ]3.添加中间件 MIDDLEWARE [...cor…

Ubuntu Bash工具

Ubuntu Bash工具 &#x1f4bb;⚡ Ubuntu Bash 工具&#x1f528; 指令列表1. &#x1f50b; 查看电池信息 (-b)2. &#x1f4bb; 查看 CPU 和内存使用情况 (-m)3. &#x1f504; 旋转屏幕 (-r)4. &#x1f513; 解锁屏幕 (-s)5. &#x1f310; 设置代理 (-p <proxy_url>…

【GoLang】两个字符串如何比较大小?以及字典顺序的比较规则

在 Go 语言中&#xff0c;字符串的比较是基于字典顺序进行的。 字典顺序的比较规则&#xff1a; 比较两个字符串从左到右逐个字符的Unicode码点值&#xff0c; 若比较结果不相等则将此结果作为字符串大小的结果&#xff0c; 若比较结果相等则比较下一位&#xff0c; 若其中一个…

《机器学习》——贝叶斯算法

贝叶斯简介 贝叶斯公式&#xff0c;又称贝叶斯定理、贝叶斯法则&#xff0c;最初是用来描述两个事件的条件概率间的关系的公式&#xff0c;后来被人们发现具有很深刻的实际意义和应用价值。该公式的实际内涵是&#xff0c;支持某项属性的事件发生得愈多&#xff0c;则该属性成…

matlab离线安装硬件支持包

MATLAB 硬件支持包离线安装 本文章提供matlab硬件支持包离线安装教程&#xff0c;因为我的matlab安装的某种原因&#xff08;破解&#xff09;&#xff0c;不支持硬件支持包的安装&#xff0c;相信也有很多相同情况的朋友&#xff0c;所以记录一下我是如何离线安装的&#xff…

Infineon PSoC 4 CapSense ModusToolbox IDE - 系统生态篇

本文档说明了 ModusToolbox 软体环境的 4 个层面&#xff0c;该环境为 CapSense 设备和生态系统提供支援。本文是 Infineon PSoC 4 CapSense ModusToolbox IDE-系统介绍的延伸篇 (Infineon PSoC 4 CapSense ModusToolbox IDE -系统介绍篇 - 大大通(简体站))。 什么是ModusToolb…

使用PVE快速创建虚拟机集群并搭建docker环境

安装Linux系统 这里以安装龙蜥操作系统AnolisOS8.9为例加以说明。 通过PVE后台上传操作系统ISO镜像。 然后在PVE上【创建虚拟机】&#xff0c;选定上传的龙蜥操作系统镜像进行系统安装。 注意&#xff1a;在安装过程中&#xff0c;要设定语言、时区、超管用户root的密码、普…

ElasticSearch内存占用率过高怎么办?

文章目录 1&#xff0c;先用top看看各个进程的内存占用情况2&#xff0c;不能简单的杀死进程&#xff0c;然后再重启。3&#xff0c;查看一下ElasticSearch进程的具体启动情况4&#xff0c;修改Elasticsearch 的Java堆内存 1&#xff0c;先用top看看各个进程的内存占用情况 先…

OpenHarmony AVScreenCaptureRecorder录屏开发指导

一、简介 OpenHarmony 5.0新增了AVScreenCaptureRecorder ArkTs API。用户可以调用录屏AVScreenCaptureRecorder API录制屏幕&#xff0c;采集音频源数据&#xff0c;获取封装后的音视频文件&#xff0c;然后通过文件的形式流转到其他模块进行播放或处理&#xff0c;用于以文件…

【Spring】构造方法注入 属性加final

在Spring框架中&#xff0c;构造方法注入是一种常见的依赖注入方式。通过构造方法注入&#xff0c;Spring容器会在创建Bean时自动调用相应的构造方法&#xff0c;并将所需的依赖作为参数传入。关于构造方法注入时属性是否加final关键字&#xff0c;主要有以下几点区别&#xff…

一.MySQL程序简介

整体介绍 1.服务端mysqld(可执行文件) mysqld --verbose --help 2.客户端mysql(可执行文件) 3.其它工具包程序

G1垃圾回收器的FullGC

如何确定GarbageFirst回收器发生的是FullGC ? 必须出现FullGC字样才算是FUllGC&#xff0c;例如下图&#xff1a;因为内存分配失败&#xff08;Allocation Failure&#xff09;导致 如果不出现FullGC的字样说明它不是FUllGC&#xff0c;并不像Serial GC、ParallelGC的在老年代…

Sql 创建用户

Sql server 创建用户 Sql server 创建用户SQL MI 创建用户修改其他用户密码 Sql server 创建用户 在对应的数据库执行&#xff0c;该用户得到该库的所有权限 test.database.chinacloudapi.cn DB–01 DB–02 创建服务器登录用户 CREATE LOGIN test WITH PASSWORD zDgXI7rsafkak…

腾讯云AI代码助手编程挑战赛-武器大师

作品简介 对话过程能够介绍二战 各种武器 冷战 武器 现代的 各种武器装备&#xff0c;陆海空三军都知道。 技术架构 使用全后端分离的架构&#xff0c;前端使用Vue脚手架&#xff0c;腾讯云修改样式css 开发环境、开发流程 系统&#xff1a;win11 开发工具&#xff1a;VS…

Maven核心插件之maven-resources-plugin

前言 Maven 插件是 Maven 构建系统的重要组成部分&#xff0c;它们为 Maven 提供了丰富的功能和扩展能力&#xff0c;使得 Maven 不仅是一个构建工具&#xff0c;更是一个强大的项目管理平台。在 Maven 项目中&#xff0c;插件的使用通常通过配置 pom.xml 文件来完成。每个插件…

Golang的文件加密技术研究与应用

Golang的文件加密技术研究与应用 一、加密技术概述 文件加密的重要性 文件加密是指通过对文件进行加密操作&#xff0c;将文件内容转化为一段难以理解的数据。这样可以保护文件的隐私和安全&#xff0c;防止文件被未授权的用户访问和窃取。在日常工作和生活中&#xff0c;我们经…