当前位置: 首页 > news >正文

谷粒商城二十四Sentinel限流熔断降级

在这里插入图片描述
在这里插入图片描述
我们在秒杀服务加的以上所有手段都是为了,除了快之外,我们还需要保证稳定

我们即使再快也会有一个极限值,现在假设单机下每秒处理一万个单,这已经是超高的处理能力了,秒杀服务上了五台服务器,有三台掉线,但是秒杀请求网关直接放过了10w请求,全部放进来,那剩下的两台服务器就处理不过来,每台服务器的顶峰值是1w,所有的请求都得排队,排着排着就造成了请求的时间累积,时间一长,资源耗尽,服务器就要崩溃了。

所以快保证了以后,我们就需要保证稳定。

如何保证稳定,那就是在我们分布式系统中的限流&熔断&降级,我们无论哪个分布式系统,不管是不是高并发,都要考虑,因为有了这些的保护手段,我们的整个集群就可以达到稳定。

我们以前是用springCloud的hystrix,不更新了,而且支持的功能也是有限的,
在我们的系统里面,我们使用springCloud alibaba的Sentinel,来完成整个系统的限流&熔断&降级
会把我们整个系统保护的非常稳定,即使百台服务器的大集群,有了Sentinel的保护,上线或者崩溃几台服务器,都会非常的稳定。

限流&熔断&降级

  • 什么是熔断
    A 服务调用 B 服务的某个功能,由于网络不稳定问题,或者 B 服务卡机,导致功能时间超长。如果这样子的次数太多。我们就可以直接将 B 断路了(A 不再请求 B 接口),凡是调用 B 的直接返回降级数据,不必等待 B 的超长执行。 这样 B 的故障问题,就不会级联影响到 A。

    如果没有任何保护,feign远程调用,feign有一个默认超时时间,例如是3s,3s时间如果不返回数据,就认为被调用的服务出问题了,feign接口就会报超时错误,但我们等不了这么久,因为这样就会引起整个调用链的累积效应
    a调用b,b调用c,c方法现在要等3s,b需要等c,a需要等b,大家都需要等,就会全线卡死,资源不能得到释放,吞吐量就会下降,大量的请求又在排队,这就形成了一个死循环,能力越不行,请求累积的越多,越多的请求又需要越多的资源进行分配处理,我们的机器就会整个卡死,宕机。
    所以我们需要加入熔断机制,a调用b,如果发现b不能正常返回,那以后我们直接把b进行断路,接下来a调用b不需要关注b是否成功,直接快速返回失败。
    熔断可以保证我们整个服务不受级联影响,一个服务挂了不会让整个调用链长时间的卡死。

  • 什么是降级
    整个网站处于流量高峰期,服务器压力剧增,根据当前业务情况及流量,对一些服务和页面进行有策略的降级[停止服务,所有的调用直接返回降级数据]。以此缓解服务器资源的的压力,以保证核心业务的正常运行,同时也保持了客户和大部分客户的得到正确的相应。

假设流量处于高峰期,现在有超多的业务正在运行,一些核心的业务,购物车、订单等,还有一些非核心的业务,比如注册之类的,现在网站正在秒杀的高峰期间,大家资源不够用了。
我们可以手动的让一些非核心业务,比如注册,把服务器的注册业务停掉,该服务器上如果有其他业务,就可以把资源让给其他核心业务,这就是降级。
同时可以返回一个降级页面,提示此功能暂时不可用

  • 异同

    • 相同点

      1. 为了保证集群大部分服务的可用性和可靠性,防止崩溃,牺牲小我
      2. 用户最终都是体验到某个功能不可用
    • 不同点:

      1. 熔断是被调用方故障,触发的系统主动规则
      2. 降级是基于全局考虑,手动停止一些正常服务,释放资源
  • 什么是限流
    对打入服务的请求流量进行控制,使服务能够承担不超过自己能力的流量压力。
    比如整个集群的处理能力就是每秒1w,那我们从网关处放回的请求就是1w,其他一些运气不好的,直接报告错误,自己重试也好,怎么做也好。
    限流就是把整个入口的流量来做一个限制,保证我们的服务不会被超过它的能力的流量全部压垮。只要超过它能力的流量直接丢弃,也不用去处理了。

Sentinel

限流&熔断&降级功能都可以用Sentinel做。

Sentinel与Hystrix的区别

在这里插入图片描述

1. 隔离策略

假设我们现在有100个请求全部进来要执行, 系统能力不足只能执行50个

  • 线程池隔离
    如果是Hystrix,例如是hello请求,为这个请求做一个线程池,分配50个线程,线程池分配一个线程来执行,如果线程不够了就打回去。
    但是如果有超多请求,每个请求就会对应一个不同的线程池,线程池也会超多,线程池之间的切换也非常浪费时间,这是对性能的一个极大影响。可能线程池用着用着资源都不够了,导致服务宕机都有可能。

  • 信号量隔离
    java8中也有Semaphore,和我们redis的Semaphore是一样的,只要请求一进来,如果限制是50,调用该请求的每一个请求都有对应自己的一个信号量,进来一个请求信号量-1,执行完一个请求信号量+1,如果发现该请求进来50个,下一次进来的就直接给打回。
    不用为每一个请求单独创建线程池,造成资源的耗费。

线程池隔离也有它的优点,每一个请求都是用自己的线程池,自己的线程池里炸了,和别人没有任何关系。
信号量则是一旦有些人炸了,我们整个服务都会出现一些问题。

2. 熔断降级策略

  • 基于响应时间
    例如每个请求只要超过1s就不去执行

  • 异常比率
    一个请求请求一百次,百分之九十都出现了异常,以后我就不请求了。

  • 异常数
    一百个请求中有五个出现异常,也不请求了。

我们有很多的策略来限制要不要熔断、降级后边的调用链(服务)。

3. 动态规则配置

以上的策略都可以通过数据源来做动态配置,就是把配置持久化到数据库中,服务即使重新启动,还能用之前的配置。

4. 系统自适应保护

系统的能力它知道以后,低峰期把流量都放进来,高峰期限制一些。

简介

Sentinel 可以简单的分为 Sentinel 核心库和 Dashboard(web可视化界面,有了可视化界面,调节监控就非常方便了)。核心库不依赖 Dashboard,但是结合 Dashboard 可以取得最好的效果。

我们说的资源,可以是任何东西,服务,服务里的方法,甚至是一段代码。使用 Sentinel 来进行资源保护,主要分为几个步骤:

  1. 定义资源(哪些资源要进行保护)
  2. 定义规则(定义保护规则,比如每秒请求超过多少次就不让访问了,cpu负载超过多少就给它降级了)
  3. 检验规则是否生效

定义资源

以下是最常用的定义资源的三种方式

方式一:主流框架的默认适配

为了减少开发的复杂程度,我们对大部分的主流框架,例如 Web Servlet、Dubbo、Spring Cloud、gRPC、Spring WebFlux、Reactor 等都做了适配。您只需要引入对应的依赖即可方便地整合 Sentinel。

主流的web框架,所有的请求是默认全部进来适配,所有的请求都是要受保护的资源。

方式二:抛出异常的方式定义资源

SphU 包含了 try-catch 风格的 API。用这种方式,当资源发生了限流之后会抛出 BlockException。这个时候可以捕捉异常,进行限流之后的逻辑处理。示例代码如下:

// 1.5.0 版本开始可以利用 try-with-resources 特性(使用有限制)
// 资源名可使用任意有业务语义的字符串,比如方法名、接口名或其它可唯一标识的字符串。
try (Entry entry = SphU.entry("resourceName")) {// 被保护的业务逻辑// do something here...
} catch (BlockException ex) {// 资源访问阻止,被限流或被降级// 在此处进行相应的处理操作
}

方式四:注解方式定义资源

Sentinel 支持通过 @SentinelResource 注解定义资源并配置 blockHandler 和 fallback 函数来进行限流之后的处理。示例:

// 原本的业务方法.
@SentinelResource(blockHandler = "blockHandlerForGetUser")
public User getUserById(String id) {throw new RuntimeException("getUserById command failed");
}// blockHandler 函数,原方法调用被限流/降级/系统保护的时候调用
public User blockHandlerForGetUser(String id, BlockException ex) {return new User("admin");
}

每次和学校谈话结束,苏迎澜就第一时间分享给小逸,“过来,我和你汇报下工作”。她省略了具体谈判的过程,以一个孩子能理解的语言把事情总结出来。

https://baijiahao.baidu.com/s?id=1760481532554271247

一个妈妈的反校园暴力“战斗”

相关文章:

谷粒商城二十四Sentinel限流熔断降级

我们在秒杀服务加的以上所有手段都是为了快,除了快之外,我们还需要保证稳定。 我们即使再快也会有一个极限值,现在假设单机下每秒处理一万个单,这已经是超高的处理能力了,秒杀服务上了五台服务器,有三台掉…...

STM32-HAL-SPI-W25Q128FV简单读写测试(2)

文章目录 一、Flash的基本读写操作1.1 向芯片中的某个地址(addr:0x02)连续写入不定长的数据并读取代码示例读写流程分析函数分析 1.2 向芯片中的某个地址(addr:0x00)写入一个数值代码示例:读写流程分析 具体的配置接上…...

网易一面:如何设计线程池?请手写一个简单线程池?

说在前面 在40岁老架构师 尼恩的读者社区(50)中,最近有小伙伴拿到了一线互联网企业如极兔、有赞、希音、百度、网易的面试资格,遇到了几个很重要的面试题: 如何设计线程池? 与之类似的、其他小伙伴遇到过的问题还有: …...

网络安全之密码学

目录 密码学 定义 密码的分类 对称加密 非对称加密 对称算法与非对称算法的优缺点 最佳解决办法 --- 用非对称加密算法加密对称加密算法的密钥 非对称加密如何解决对称加密的困境 密钥传输风险 密码管理难 常见算法 对称算法 非对称算法 完整性与身份认证最佳解决…...

第14章 项目采购管理

文章目录 采购管理包括如下几个过程14.2 编制采购计划 462编制采购计划的输出1)采购管理计划2)采购工作说明书3)采购文件 14.2.3 工作说明书(SOW) 14.3 实施采购 47414.3.2 实施采购的方法和技术 476(1&…...

Vite+Vue下的多页面入口配置

我发现多页面入口配置在网上的资料比较乱,今天正好结合我们的开源API分析工具项目(APIcat)更新情况总结一下。 更新vite.config.js 主要配置的更新是在vite.config.js里面要增加build里的rollupOptions,因为vite底层使用了rollu…...

ChatGPT背后的打工人:你不干,有的是AI干

AI“出圈” 如今,数字技术发展速度惊人,AI提高了社会生产效率,更真切地冲击到原有的生产秩序。 年初AI技术的爆发,让国内看到了进一步降本增效的希望。 国内多家互联网企业相继推出类ChatGPT产品,复旦大学邱锡鹏教授…...

【Access】Access:SQL 语句汇总

目录 一、SQL 的功能 二、考试重点 三、关系的定义 (1)新建关系 (2)删除关系 四、SQL 的「数据查询」功能 (1)基本结构 ① Select 语句的基本结构 ② Select 子句 ③ Where 子句 ④ 空值的处…...

【小样本分割 2022 ECCV】SSP

文章目录 【小样本分割 2022 ECCV】SSP摘要1. 介绍2. 相关工作3. 自支持小样本语义分割3.1 动机3.2 自支持原型-SSM3.3 自适应自支持背景原型-ASBP3.4 自支持匹配-SSL 3. 代码 【小样本分割 2022 ECCV】SSP 论文题目:Self-Support Few-Shot Semantic Segmentation 中…...

Friendlycore增加inodes数量

背景:为Nanopim1安装了core系统,tf卡大小64G,安装后正常扩展到了整个tf卡,但是在安装hass的docker显示磁盘空间不够,最终发现是inode被用完了。其inode只有960K,但是16G卡树莓派系统的inodes都是其两倍。 一…...

Latex 定理和证明类环境(amsthm)和(ntheorm)的区别

最近在写毕业论文,出现了一些定理和证明的环境的问题,问题出现在对两个包的理解程度不够的问题上: \RequirePackage{ntheorem} 1、\newtheorem*{proof}{\hspace{2em}证:} 这个是让证明失去计数原则,该命令不能用于 amsthm 2…...

Yolov8改进---注意力全家桶,小目标涨点

💡💡💡💡💡💡💡💡💡💡注意力全家桶💡💡💡💡💡💡💡💡💡💡💡 基于Yolov8的注意力机制研究,提升小目标、遮挡物、难样本等检测性能...

[Linux]网络连接、资源共享

​⭐作者介绍:大二本科网络工程专业在读,持续学习Java,输出优质文章 ⭐作者主页:逐梦苍穹 ⭐所属专栏:Linux基础操作。本文主要是分享一些Linux系统常用操作,内容主要来源是学校作业,分享出来的…...

来上海一个月的记录、思考和感悟

作者 | gongyouliu 编辑 | gongyouliu 从4月3号早上来上海,到今天差不多整整一个月了,也是自己正式从杭州离职创业(我更愿意称之为自由职业者,毕竟我没有招聘全职员工,有两个朋友业余时间在帮我)的第一个月…...

学校信息化管理系统通常包含哪些功能?

学校管理信息化是现代教育发展的必然趋势,随着信息技术的飞速发展,学校管理也逐渐地实现了信息化。信息化的学校管理已经成为教育现代化建设的重要内容,也是提高学校教育教学质量和保障学生安全的重要手段。 作为一款低代码开发平台&#xf…...

Java时间类(三) -- Calendar()(日历类)

java.util.Calendar类是一个抽象类,它提供了日期计算的相关功能、获取或设置各种日历字段的方法。 protected Calendar() 构造方法为protected修饰,无法直接创建该对象。1. Calendar()的常用方法: 方法名说明static Calendar getInstance()使用默认时区和区域获取日历vo…...

【五一创作】QML、Qt Quick /Qt中绘制圆形

目录标题 Qt Quick中绘制圆形扩展知识Canvas 模块介绍Shapes 模块介绍 Qt Widgets 中绘制圆形两种方式的比较 Qt Quick中绘制圆形 有多种方法可以在 Qt Quick 中绘制圆形。以下是一些主要方法: 使用 Canvas 元素 使用 Shapes 模块: a. 使用 PathArc 和…...

【软考数据库】第七章 关系数据库

目录 7.1 关系数据库概述 7.2 关系代数 7.3 元组演算与域演算 7.4 查询优化 7.5 关系数据库设计 7.6 模式分解 前言: 笔记来自《文老师软考数据库》教材精讲,精讲视频在b站,某宝都可以找到,个人感觉通俗易懂。 7.1 关系数据…...

《SpringBoot中间件设计与实战》第1章 什么是中间件

一、写在前面 在互联网应用初期,所有用于支撑系统建设的,框架结构、基础工具、业务逻辑、功能服务包括页面展示等,都是在一个系统中开发完成,最终也只是把系统和数据库部署在同一台服务器上。也就是大多数开发者入门所接触到的 “单体” 系统。 那为什么会有中间件这个玩…...

spring常用的事务传播行为

事务传播行为介绍 Spring中的7个事务传播行为: 事务行为 说明 PROPAGATION_REQUIRED 支持当前事务,假设当前没有事务。就新建一个事务 PROPAGATION_SUPPORTS 支持当前事务,假设当前没有事务,就以非事务方式运行 PROPAGATION_MANDATORY…...

debian 更新内核后,nvidia 驱动突然不见了,处理

nvidia 驱动通常由 dkms 来构建 安装新内核后, 对应 linux-headers-amd64 没有安装到,导致 dkms 不为新内核 构建驱动 解决办法: apt update apt install linux-headers-amd64 它会自动为已有的内核安装 linux 头文件 然后 用命令 dpkg-recon…...

大模型落地必看:蒸馏、微调、RAG全解析,案例+对比助你快速选对!

做AI落地、大模型应用的朋友,大概率都有过这样的困惑: 想让大模型适配自己的业务,到底该用蒸馏、微调还是RAG? 三者听起来都差不多,都是“优化大模型”,但实际用法、成本、效果天差地别——用错了&#xff…...

快充、便携、安全兼备,Anker能量盒到底香不香?

随着无线互联网时代的到来,移动设备的续航问题成为人们的新烦恼。无论是频繁出差、旅行,还是移动办公,充电宝几乎已经成为随身必备的装备。 然而,传统充电宝往往存在充电速度慢、体积笨重、功能单一,甚至安全认证不完善…...

HelloWorld.h:嵌入式LED硬件抽象库设计与实战

1. 项目概述led是一个极简但高度工程化的嵌入式LED控制抽象库,其核心载体为单头文件HelloWorld.h。尽管项目名称朴素、文档极度精简(Readme为空),但该命名本身即构成一种嵌入式开发领域的隐喻性宣言——它并非教学示例的代名词&am…...

Babel polyfill配置全解析:为什么你的Next.js项目在IE11还是报错?

Babel polyfill配置全解析:为什么你的Next.js项目在IE11还是报错? 在2023年的前端生态中,浏览器兼容性依然是个令人头疼的问题。最近接手一个企业级Next.js项目时,我遇到了一个典型场景:开发环境一切正常,但…...

道心网络安全学习笔记系列之好靶场的信息收集2

上节课找了一个图片的网址,继续挑战其它靶场,我们看下一题收集十个百度域名,这还不是顺手就来,但是贴吧不行,那还不简单,去访问百度网站,顺便输入一个搜索词,都不用看,前…...

3个步骤玩转虚拟手柄模拟:ViGEmBus驱动从入门到精通

3个步骤玩转虚拟手柄模拟:ViGEmBus驱动从入门到精通 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus Windows虚拟手柄驱动技术为游戏玩家和开发者…...

如何快速下载网易云音乐双语歌词:LrcHelper完整指南

如何快速下载网易云音乐双语歌词:LrcHelper完整指南 【免费下载链接】LrcHelper 从网易云音乐下载带翻译的歌词 Walkman 适配 项目地址: https://gitcode.com/gh_mirrors/lr/LrcHelper LrcHelper是一款专门为网易云音乐用户设计的免费歌词下载工具&#xff0…...

OpenClaw成本优化方案:nanobot轻量镜像替代高价API实测

OpenClaw成本优化方案:nanobot轻量镜像替代高价API实测 1. 为什么需要关注OpenClaw的成本问题 去年冬天,当我第一次用OpenClaw完成邮件自动回复的完整流程时,既兴奋又心疼。兴奋的是它真的能像人类一样读取邮件、分析内容、生成回复&#x…...

Degrees of Lewdity中文本地化版本完全指南:从安装到精通

Degrees of Lewdity中文本地化版本完全指南:从安装到精通 【免费下载链接】Degrees-of-Lewdity-Chinese-Localization Degrees of Lewdity 游戏的授权中文社区本地化版本 项目地址: https://gitcode.com/gh_mirrors/de/Degrees-of-Lewdity-Chinese-Localization …...