微服务_3.微服务保护

news2024/11/23 19:28:40

文章目录

  • 一、微服务雪崩及解决方法
    • 1.1、超时处理
    • 1.2、仓壁模式
    • 1.3、断路器
    • 1.4、限流
  • 二、Sentinel
    • 2.1、流量控制
      • 2.1.1、普通限流
      • 2.1.2、热点参数限流
    • 2.2、线程隔离
    • 2.3、熔断降级
      • 2.3.1、断路器状态机
      • 2.3.2、断路器熔断策略
        • 2.3.2.1、慢调用
        • 2.3.2.2、异常比例,异常数

一、微服务雪崩及解决方法

  微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微服务。如果有服务提供者发生故障,当前应用的部分业务因为依赖于这些服务提供者,因此也会被阻塞。用户得不到响应,则微服务的这个线程不会释放,于是越来越多的用户请求到来,越来越多的线程会阻塞,微服务支持的线程和并发数有限,请求一直阻塞,会导致服务器资源耗尽,从而导致所有其它服务都不可用,那么当前服务也就不可用了。
在这里插入图片描述
 

解决雪崩问题的常见方式有四种:

1.1、超时处理

  设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待。
在这里插入图片描述

1.2、仓壁模式

仓壁模式来源于船舱的设计:
在这里插入图片描述
  船舱都会被隔板分离为多个独立空间,当船体破损时,只会导致部分空间进水,将故障控制在一定范围内,避免整个船体都被淹没。

  与此类似,我们可以限定每个业务能使用的线程数,避免耗尽整个服务器的资源,因此也叫线程隔离。如图,每个业务分配10个线程,服务c的故障导致业务2的资源耗尽,但不会影响业务1,从而不会影响服务A,也就不会引发雪崩。
在这里插入图片描述

1.3、断路器

  由断路器统计业务执行的异常比例,如果超出阈值则会熔断该业务,拦截访问该业务的一切请求。
在这里插入图片描述
  如上图所示,总共有三个请求,两个都失败了,此时认为任务请求失败率过高,需要断开服务A对服务D的请求,于是后续服务A到服务D的请求都会被熔断,如下图:
在这里插入图片描述

1.4、限流

  流量控制:限制业务访问的QPS,避免服务因流量的突增而故障。

在这里插入图片描述

 
 
总结:

  • 限流是对服务的保护,避免因瞬间高并发流量而导致服务故障,进而避免雪崩。是一种预防措施。
  • 超时处理、线程隔离、降级熔断是在部分服务故障时,将故障控制在一定范围,避免雪崩。是一种补救措施。

二、Sentinel

  在SpringCloud当中支持多种服务保护技术:Netfix Hystrix、Sentinel、Resilience4。早期比较流行的是Hystrix框架,但目前国内实用最广泛的还是阿里巴巴的Sentinel框架。Sentinel是阿里巴巴开源的一款微服务流量控制组件。Sentinel 具有以下特征:

  • 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
  • 完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
  • 广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
  • 完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。

2.1、流量控制

2.1.1、普通限流

  当请求进入微服务时,首先会访问DispatcherServlet,然后进入Controller、Service、Mapper,这样的一个调用链就叫做簇点链路。簇点链路中被监控的每一个接口就是一个资源

  默认情况下sentinel会监控SpringMVC的每一个端点(Endpoint,也就是controller中的方法),因此SpringMVC的每一个端点(Endpoint)就是调用链路中的一个资源。

  例如,我们刚才访问的order-service中的OrderController中的端点:/order/{orderId},访问Sentinel网址,可以看到下图:

在这里插入图片描述

流控、熔断等都是针对簇点链路中的资源来设置的,因此我们可以点击对应资源后面的按钮来设置规则:

  • 流控:流量控制
  • 降级:降级熔断
  • 热点:热点参数限流,是限流的一种
  • 授权:请求的权限控制

 
点击资源/order/{orderId}后面的流控按钮,就可以弹出表单。在表单中可以填写设置信息,还可以利用压测工具进行测试等。

在这里插入图片描述
  点击图中的高级选项,还可以设置流控模式流控效果。目前工作中还未接触到微服务保护的内容,这次只做基本记录,知道有这个东西即可。

2.1.2、热点参数限流

  之前的限流是统计访问某个资源的所有请求,判断是否超过QPS阈值。而热点参数限流是分别统计参数值相同的请求,判断是否超过QPS阈值。

 
  限流是一种预防措施,虽然限流可以尽量避免因高并发而引起的服务故障,但服务还会因为其它原因而故障。而要将这些故障控制在一定范围,避免雪崩,就要靠线程隔离(舱壁模式)和熔断降级手段了。

2.2、线程隔离

  线程隔离之前讲到过:调用者在调用服务提供者时,给每个调用的请求分配独立线程池,出现故障时,最多消耗这个线程池内资源,避免把调用者的所有资源耗尽。线程隔离是对客户端(调用方)的保护,需要在调用方 发起远程调用时做线程隔离。

2.3、熔断降级

  熔断降级是解决雪崩问题的重要手段。其思路是由断路器统计服务调用的异常比例或慢请求比例,如果超出阈值则会熔断该服务:即拦截访问该服务的一切请求。而当服务恢复时,断路器会放行访问该服务的请求。

2.3.1、断路器状态机

  断路器控制熔断和放行是通过状态机来完成的。状态机有三个状态,
在这里插入图片描述
状态机包括三个状态:

  • closed:关闭状态,断路器放行所有请求,并开始统计异常比例、慢请求比例。超过阈值则切换到open状态
  • open:打开状态,服务调用被熔断,访问被熔断服务的请求会被拒绝,快速失败,直接走降级逻辑。Open状态5秒后会进入half-open状态
  • half-open:半开状态,放行一次请求,根据执行结果来判断接下来的操作。
    • 请求成功:则切换到closed状态
    • 请求失败:则切换到open状态

2.3.2、断路器熔断策略

断路器熔断策略有三种:慢调用、异常比例、异常数。

2.3.2.1、慢调用

  业务的响应时长(RT)大于指定时长的请求认定为慢调用请求。在指定时间内,如果请求数量超过设定的最小数量,慢调用比例大于设定的阈值,则触发熔断。

例如:

在这里插入图片描述
解读:
  RT超过500ms的调用是慢调用,统计最近10000ms内的请求,如果请求量超过10次,并且慢调用比例不低于0.5,则触发熔断,熔断时长为5秒。然后进入half-open状态,放行一次请求做测试。

2.3.2.2、异常比例,异常数

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

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

相关文章

Redis --- 第三讲 --- 通用命令

一、get和set命令 Redis中最核心的两个命令 get 根据key来取value set 把key和value存储进去 redis是按照键值对的方式存储数据的。必须要先进入到redis客户端。 语法 set key value : key和value都是字符串。 对于上述这里的key value 不需要加上引号&#…

GIS发展趋势与国产GIS现状

地理信息系统(GIS)作为获取、管理、分析和可视化地理空间数据的重要工具,在多个领域发挥着至关重要的作用。随着技术的不断进步,GIS正朝着更高效、更智能的方向发展。 GIS发展趋势 1. 3D GIS与虚拟现实(VR&#xff0…

滑动窗口--(上篇)

滑动窗口 长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度**。**如果不存在符合条件的子数组,返回 0 。 …

LLM Visualization

Brendan Bycroft的网站,提供了交互式的可视化工具,展示了大型语言模型(LLMs)的内部机制 通过这个 链接 https://bbycroft.net/llm 访问 借助这个交互可视化,能够加深对模型结构和行为的了解

国庆更新|芒果YOLOv8改进181:即插即用,最新注意力机制EMA:具有跨空间学习的高效多尺度注意力模块,ICCASSP论文

💡本篇内容:芒果YOLOv8改进135:最新注意力机制EMA:即插即用,具有跨空间学习的高效多尺度注意力模块,ICCASSP 论文 **EMA|具有跨空间学习的高效多尺度注意力模块 | 即插即用 该模块通常包括多个并行的注意力子模块,每个子模块关注于输入数据的不同尺度或分辨率。这些子模块…

【SpringCloud】优雅实现远程调⽤-OpenFeign

OpenFeign 1. RestTemplate存在问题2. OpenFeign介绍Spring Cloud Feign 3. 代码获取 1. RestTemplate存在问题 观察咱们远程调⽤的代码 RequestMapping("/{orderId}")public OrderInfo getOrderInfoById(PathVariable("orderId") Integer id) {OrderInfo…

Ascend C 自定义算子开发:高效的算子实现

Ascend C 自定义算子开发:高效的算子实现 在 Ascend C 平台上,开发自定义算子能够充分发挥硬件的性能优势,帮助开发者针对不同的应用场景进行优化。本文将以 AddCustom 算子为例,介绍 Ascend C 中自定义算子的开发流程及关键技术…

Java中for循环控制

for循环控制 基本语法说明执行流程注意事项练习 基本语法 for(循环变量初始化;循环条件;循环遍历迭代){循环操作(可以多条语句); }说明 1.for关键字,表示循环控制 2.for有四要素:(1)循环变量初始化 &…

Python+Matplotlib奇偶函数简单示例可视化

偶函数 定义:如果对于定义域内的任意 x,都有 f(-x) f(x),则称 f(x) 为偶函数。 特点:偶函数的图像关于 y 轴对称。 奇函数 定义:如果对于定义域内的任意 x,都有 f(-x) -f(x),则称 f(x) 为奇函…

【计算机网络】详解UDP协议格式特点缓冲区

一、UDP 协议端格式 16 位 UDP 长度, 表示整个数据报(UDP 首部UDP 数据)的最大长度;如果16位UDP检验和出错,报文会被直接丢弃。 1.1、检验和出错的几种常见情况 数据传输过程中的比特翻转:在数据传输过程中,由于物理介质或网络设…

COMSOL金属氢化物吸氢过程膨胀、应力

话不多说,先上效果图。事先说明:由于做吸氢膨胀和应力相关的文献很少,而且文献中很多细节、参数的地方也没怎么说,因此有些地方是笔者按自己理解编的,算是抛砖引玉,希望能给读者带来些许思路启发&#xff0…

【Simulink仿真】混合储能系统光储直流微网下垂控制

摘要 混合储能系统(HESS)结合光伏发电和储能技术,已成为提高直流微网系统稳定性和能效的有效手段。本文基于Simulink平台,仿真研究了光储直流微网中的下垂控制策略。仿真模型涵盖了电池储能和超级电容储能,采用下垂控…

11. 异步编程

计算机的核心部分,即执行构成我们程序的各个步骤的部分,称为处理器。我们迄今为止看到的程序都会让处理器忙个不停,直到它们完成工作。像操作数字的循环这样的程序的执行速度几乎完全取决于计算机处理器和内存的速度。但是,许多程…

【C++差分数组】2406. 将区间分为最少组数|1731

本文涉及知识点 C差分数组 LeetCode2406. 将区间分为最少组数 给你一个二维整数数组 intervals ,其中 intervals[i] [lefti, righti] 表示 闭 区间 [lefti, righti] 。 你需要将 intervals 划分为一个或者多个区间 组 ,每个区间 只 属于一个组&#…

HTB:Included[WriteUP]

目录 连接至HTB服务器并启动靶机 1.What service is running on the target machine over UDP? 2.What class of vulnerability is the webpage that is hosted on port 80 vulnerable to? 3.What is the default system folder that TFTP uses to store files? 4.Whic…

TCP --- 确认应答机制以及三次握手四次挥手

序言 在前一篇文章中,我们介绍了 UDP协议 (点击查看)👈,该协议给我们的感觉就两个字 — 简单,只是将我们的数据进行简单的添加报头然后发送。当然使用起来虽然简单,但是否能送到目的地,那就要看网络的状态了…

【算法系列-链表】链表相交 环形链表II

【算法系列-链表】链表相交&环形链表 文章目录 【算法系列-链表】链表相交&环形链表1. 链表相交1.1 思路分析🎯1.2 解题过程🎬1.3 代码示例🌰 2. 环形链表II2.1 思路分析🎯2.2 代码示例🌰 1. 链表相交 【题目…

C/C++:内存管理

文章目录 前言一、内存分区1. 内存划分情况2. 最大内存计算 二、malloc/calloc/realloc 与 free1. malloc2. calloc3. realloc4. free5. 差异对比6. 失败处理 三、内存分配题目1. 题目2. 内存区域划分 四、C内存管理方式1. new 与 delete2. new/delete操作内置类型3. new和dele…

数据科学基础复习(简)

可视化、数据可视化 在狭义上,数据可视化是与信息可视化,科学可视化和可视分析学平行的概念,而在广义上数据可视化可以包含这3类可视化技术。 数据科学的主要任务 数据科学研究目的与任务 大数据及其运动规律的揭示从数据到智慧的转化数据…

【web安全】——命令执行漏洞/代码执行漏洞

1.命令执行漏洞 1.1漏洞原理 应用有时需要调用一些执行系统命令的函数,如PHP中的system、exec、shell_exec、passthru、popen、proc_popen等,当用户能控制这些函数的参数,并且开发人员对这个参数没有严格的过滤时就可以将恶意系统命令拼接到…