Sentinel : 服务容错(降级熔断、流量整形)

news2024/11/27 11:41:50

什么是服务雪崩?

服务雪崩效应是一种因“服务提供者的不可用”(原因)导致“服务调用者不可用”(结果),并将不可用逐渐放大的现象。

我来用一个模拟场景带你感受一下服务雪崩的厉害之处。假设我有一个微服务系统,服务提供者不可用,比如,服务提供者A服务的访问压力过大,或者是网络原因,硬件原因等等多种因素,造成了服务提供者的不可访问。此时,相应的服务调用者B服务,就无法成功调用其提供的接口,并且造成线程阻塞,挤压线程。随着调用次数的增多,挤压的线程越来越多,那么这个服务调用者的抗并发量,就越来越少,直至最后崩掉。依次类推,B服务还为C服务提供了接口,那么B服务崩掉了,C服务的线程也开始挤压,直至C服务崩掉。依次类推,最后的效果就是所有的微服务都崩掉了。这就是服务雪崩效应。

Sentinel 服务容错的思路

Sentinel 是 Spring Cloud Alibaba 的一款服务容错组件,我们也经常把它叫做“防流量哨兵”。它是阿里巴巴双十一大促核心场景的保护神,内置了丰富的服务容错应用场景。它以流量作为切入点,通过各种内外防控手段达到维持服务稳定性的目的。

阿里系的 Sentinel 解决服务稳定性的思路是什么呢?就拿服务雪崩这种稳定性崩坏的场景来说,这种极端场景的发生有两个主要因素,一个是外部的高并发流量导致的请求数量增多,超过了集群的吞吐量,另一个是内部各种未知异常导致的接口响应异常超时。

我们可以采用“内外兼修”的思路来摆平服务雪崩的两个主要因素。所谓“内”,是指内部的异常治理,所谓“外”,则是外部用户流量的疏导。内外兼修的根本目的,是从内部和外部双管齐下对集群访问量进行减压,下面我们深入分析一下 Sentinel 是如何通过内外兼修的手段做服务容错的。

内部异常治理

在 Sentinel 中,我们可以采用降级和熔断的方式处理内部的异常。所谓降级,是指当服务调用发生了响应超时、服务异常等情况时,我们在服务内部可以执行一段“降级逻辑”。

在这里插入图片描述
在降级逻辑中,你可以选择静默处理,即忽略掉异常继续执行后续逻辑;或者你可以返回一个让业务可以继续执行下去的默认结果;又或者,在降级逻辑中尝试重试、或者恢复异常服务。从这里我们可以看出,降级是针对“单次服务调用异常”而执行的处理逻辑。

而所谓熔断,对已经挂掉的服务,直接不再进行调用,而是直接返回结果,这就是熔断。以此避免已经挂掉的服务对调用者造成的影响。

在这里插入图片描述
我们可以看出,当服务进入到了“熔断状态”以后,当前服务对下游目标服务的调用行为也就停止了,这样一来就大大降低了下游服务的访问压力。

关于降级熔断,我的经验是主链路服务(也就是核心业务链路的重要服务)一定要设置降级预案,防止服务雪崩在核心业务上的传播。除此之外,对于非核心链路的服务,应该设置手动降级开关,在大促等高并发场景下做主动降级,将额外的计算资源通过弹性方案匀给主链路服务。

关于降级的判定条件,需要结合全链路压测的结果来判定。通常我们在双 11 这类大促场景下,会组建一个稳定性团队专门负责全链路压测,并根据多轮次的压测结果来调整各个服务集群的水位,并对降级和限流判定条件进行微调,以期达到最佳的主链路吞吐量。

外部流量控制

提到外部流量控制,你一定会想到“限流”。没错,限流是流量整形 / 流控方案的一种。在 Sentinel 中我们可以根据集群的处理能力,为每个服务设置一个限流规则,从 QPS 维度或者并发线程数的维度控制外部的访问流量。一旦访问量超过阈值,后续的请求就会被“fast fail”,这是最为常用的一种限流手段。但 Sentinel 所支持的方案可不止这一种。

从流量整形的效果来看,除了“快速失败”以外,我们还可以在 Sentinel 中选择预热模型和排队模型。顾名思义,预热模型就是在一段规定的预热时间窗口内,由低到高逐渐拉高流量阈值,直到达到预设的最高阈值为止。

而对于排队模型来说,如果访问量超过了设定的阈值,服务请求不会被立即失败,而是被放入一个队列内等待处理,如果服务请求在预设的超时时间内仍然未被处理,那么就会被移出队列。

限流是挡在降级熔断之前的一道关卡,它是投入产出比最高的防护措施,为什么这样说呢?我们将限流和降级做一个比对:在熔断阶段,用户流量已经打到了服务器,尽管我们对下游服务的调用不会真实发起,但上游服务的计算资源实打实的被占用了;而限流则不同,如果用户流量在入口处就被限制,那么它并不会占用服务器的资源来处理这个请求。

Sentinel 工作原理

在这里插入图片描述

sentinel在内部创建了一个责任链,责任链是由一系列ProcessorSlot对象组成的,每个ProcessorSlot对象负责不同的功能,外部请求是否允许访问资源,需要通过责任链的校验,只有校验通过的,才可以访问资源,如果被校验失败,会抛出BlockException异常。
sentinel提供了8个ProcessorSlot的实现类,下面实现类功能介绍:

  • DegradeSlot:用于服务降级,如果发现服务超时次数或者报错次数超过限制,DegradeSlot将禁止再次访问服务,等待一段时间后,DegradeSlot试探性的放过一个请求,然后根据该请求的处理情况,决定是否再次降级。
  • AuthoritySlot:黑白名单校验,按照字符串匹配,如果在黑名单,则禁止访问。
  • ClusterBuilderSlot:构建ClusterNode对象,该对象用于统计访问资源的QPS、线程数、异常、响应时间等,每个资源对应一个ClusterNode对象。
  • SystemSlot:校验QPS、并发线程数、系统负载、CPU使用率、平均响应时间是否超过限制,使用滑动窗口算法统计上述这些数据。
  • StatisticSlot:用于从多个维度(入口流量、调用者、当前被访问资源)统计响应时间、并发线程数、处理失败个数、处理成功个数等。
  • FlowSlot:用于流控,可以根据QPS或者每秒并发线程数控制,当QPS或者并发线程数超过设定值,便会抛出FlowException异常。FlowSlot依赖于StatisticSlot的统计数据。
  • NodeSelectorSlot:负责收集资源路径,并将这些资源的调用路径,以树状结构存储起来,用于根据调用路径来限流降级、数据统计。
  • LogSlot:打印日志。

在这里插入图片描述

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

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

相关文章

小世界网络评估

小世界网络评估 文章目录 小世界网络评估[toc]1、网络小世界定义2、网络评估R代码 1、网络小世界定义 现实中许多网络巨型组件都发现了“小世界特性”。小世界特性是指 网络节点间最短路径通常较小网络聚集系数较高 网络最短路径L计算公式为 L 1 n ( n − 1 ) ∑ i ⩾ j d…

【JZ-7Y-16静态中间继电器 触点容量大、电阻小 抗干扰强 JOSEF约瑟】

系列型号: JZ-7Y-15静态中间继电器; JZ-7J-15静态中间继电器; JZ-7L-15静态中间继电器; JZ-7D-15静态中间继电器; JZ-7Y-16静态中间继电器; JZ-7J-16静态中间继电器; JZ-7L-16静态中间继…

自动化渗透测试自动化挖掘src(2)

文章目录 前言思路ICP备案子域名枚举收集可用服务漏洞攻击 前言 上一谈我们讨论了自动化渗透测试的实验,但是他过于依赖fofa,不得不承认,fofa在资产收集这方面做的确实很厉害,但是就是需要花钱,那有没有不需要花钱都手…

UI GameObject可以在Scene View中显示,但是在Game View不能显示

出现UI GameObject可以在Scene View中显示,但是在Game View不能显示这种问题,可能有很多种原因,例如Layer设定、Camera Clipping设定、font assets等问题。 对于TextMeshPro,还有Material Set的问题,见这篇文章。 而我…

PHP 8.2:它对 WordPress、插件和开发者意味着什么?

PHP 8.2.0于 2022 年 12 月 8 日首次亮相。作为一项重大更新,它带来了性能改进和更简单的语法。PHP 8.2 引入了更高的类型安全性作为一项功能,将null、false和true作为独立类型。可能挑战 WordPress 开发人员的最大变化之一是添加了只读类,它…

基于SSM/Layui框架的火影忍者风格学生宿舍管理系统

目录 1、项目简介 2、使用技术 3、功能介绍 实现的主要功能: 4、所有页面 基于SSM/Layui框架的火影忍者风格学生宿舍管理系统 1、项目简介 本项目是一套基于SSMLayui的高校宿舍管理系统,主要针对计算机相关专业的正在做毕业设计的学生和需要项目实…

搭建动态网站( Discuz论坛)

目录标题 搭建动态网站1.linux平台部署web服务2.配置web服务(1)安装web服务(2)根据配置定义加载网页资源文件的路径(3)根据配置创建资源文件(4)重启服务 3.部署mariadb数据库4.安装P…

【力扣周赛】第345场周赛

【力扣周赛】第345场周赛 6430: 找出转圈游戏输家题目描述解题思路 6431: 相邻值的按位异或题目描述解题思路 6433: 矩阵中移动的最大次数题目描述解题思路 6432: 统计完全连通分量的数量题目描述解题思路 6430: 找出转…

【Hello Algorithm】归并排序及其面试题

作者:小萌新 专栏:算法 作者简介:大二学生 希望能和大家一起进步 本篇博客简介:介绍归并排序和几道面试题 归并排序及其面试题 归并排序归并排序是什么归并排序的实际运用归并排序的迭代写法归并排序的时间复杂度 归并排序算法题小…

STM32F103 晶振问题详解

博主自制开发板,用的 STM32F103RCT6,设计时 8M 晶振并联了个 1M 电阻,实测发现: 1、软件延时 1s ,实际延时 9s,拆掉 1M 电阻问题消失。 2、部分代码下载进去后单片机不工作。(实测晶振不起振 o…

MySQL的高级语句

一、SQL高级语句 1、 SELECT 显示表格中一个或数个栏位的所有资料 语法:SELECT "字段" FROM "表名"; select * from test1; select name from test1; select name,sex from test1;2、DISTINCT 不显示重复的内容 语法:SELECT D…

win11安装java8后,jps、jvisualvm等jdk工具无法使用的问题

文章目录 基础环境1 找不到jps、jvisualvm等命令问题1.1 原因1.2 解决方案 2 jdk工具无法正常使用问题2.1 原因2.2 %TMP%\hsperfdata_username文件夹2.3 解决方案 基础环境 jdk-8u261-windows-x64,一直下一步,安装到d盘下 1 找不到jps、jvisualvm等命令…

华为基于dhcp snooping表的各种攻击防御

所有的前提是必须开启了dhcp snooping功能 一、dhcp 饿死攻击: 接口下或vlan下开启 dhcp snooping check dhcp-chaddr enable 开启二层源mac和chaddr一致性检测 dhcp snooping max-user-number 1 接口上手动配置的绑定成员数量(可选择项) …

C++常用函数语法

C常用函数详解 memset()函数字符串的插入和删除字符串替换解析字符串查询解析substr函数 memset()函数 memset 函数是内存赋值函数,用来给某一块内存空间进行赋值的。 其原型是:void* memset(void *_Dst, int _Val, size_t _Size) _Dst是目标起始地址&…

MySQL的日志管理,备份及恢复

一.MySQL 日志管理 MySQL 的日志默认保存位置为 /usr/local/mysql/data MySQL 的日志配置文件为/etc/my.cnf ,里面有个[mysqld]项 修改配置文件: vim /etc/my.cnf [mysqld] 1、错误日志 错误日志,用来记录当MySQL启动、停止或运行时发生…

chatGPT免费站点分享

下面的应该都能用,试试吧... ChatGPT是一种人工智能聊天机器人,能够生成虚拟语言和交互回复。使用ChatGPT,您可以与机器人进行真实的交互,让机器人根据您提出的问题或请求来生成回复。但是,在使用ChatGPT时&#xff0…

IOS上传到App Store教程

引言 大家都知道开发APP包含安卓和IOS,而安卓申请商家需要在各大厂家的开发者中心进行上传,比如华为、小米、魅族等等开发者中心。 而苹果只有一个官网,但是苹果要上传IPA(苹果的安装包)需要使用mac电脑进行上传,而我平时用的win…

vue3(setup语法糖)+typescript+echarts5大屏可视化项目(底部附源码地址)

最近在学习echarts5想结合着自己所学的vue3ts结合起来做个demo, 效果图如下: 登录页 首页: 每个模块支持放大全屏的功能 踩坑: echarts实例化不建议使用ref,echarts内部机制导致的在main.ts中将echarts挂载到app的实例上 let app createApp(App) app.config.globalPrope…

企业战略管理:精要

一、企业战略管理的概念与流派 国内外学者对企业战略和企业战略管理的各种理解— 安索夫:企业在确定战略前,应该先确定自己的经营性质安德鲁斯:企业战略管理是一个决策模式,决定企业的目标,提出实现目标的方针和计划&…

新能源 石油化工 HJL-98/B数字式电流继电器 瞬时动作,过负荷、短路保护 JOSEF约瑟

名称:数字式交流电流继电器,品牌:JOSEF约瑟,型号:HJL-98/B,动作电流:30500mA,工作电压:AC220V/AC380V,安装方式:柜内导轨,零序孔径&am…