【SpringCloud | 第3篇】Sentinel 服务保护(限流、熔断降级)

文章目录

Sentinel------工作原理

官网:https://sentinelguard.io/zh-cn/index.html

wiki:https://github.com/alibaba/Sentinel/wiki

Spring Cloud Alibaba Sentinel 以流量为切入点,从流量控制流量路由熔断降级 、系统自适应过载保护热点流量防护 等多个维度保护服务的稳定性。

架构原理:

  • 定义资源
    (1) 主流框架自适配(Web Servlet.Dubbo、Spring Cloud、gRPC、Spring WebFlux、Reactor);所有 Web 接口均为资源
    (2)编程式:SpbU API
    (3)声明式:@SentinelResource
  • 定义规则
    (1)流量控制(FlowRule)
    (2)熔断降级(DegradeRule)
    (3)系统保护(SystemRule)
    (4)来源访问控制(AuthorityRule)
    (5)热点参数(ParamFlowRule)

工作原理:

Sentinel------异常处理

使用文档:https://github.com/alibaba/Sentinel/wiki/如何使用

Sentinel------流控规则(FlowRule)

限制多余的请求,保护系统资源不被耗尽,提升系统的稳定性。

1. 阈值类型

  • QPS:每秒请求数
  • 并发线程数:也表示每秒请求书,需要配合线程池,进行线程的上下文切换。

集群:

  • 单机均摊:设置均摊阈值为5,每个服务器每秒都可以接收5个请求。
  • 总体阈值:设置均摊阈值为5,所有服务器总和起来每秒可以接收5个请求。

2. 流控模式

调用关系包括调用方、被调用方;一个方法可能会调用其他方法,形成一个调用链路的层次关系 ;有了调用链路统计信息,可以衍生出多种流量控制手段。

  • 直接:直接对某个资源A进行流量限制。
  • 链路:对资源B进行流量限制,但实际是对/seckill进行流量限制(创建订单/createOrder有两种方式,一种是创建普通订单/create,一种是创建秒杀订单/seckill;要求对创建秒杀订单进行流量控制,创建普通订单正常)
  • 关联:对数据库中的某个资源同时又读请求和写请求,在有对资源进行写入的情况下,回对读的请求进行流量限制。

3. 流控效果


  • 快速失败:超过了阈值的请求会快速返回错误信息。
  • Warm Up:一开始只能接收 period/1 的请求数,后面每隔 1s 增加一个请求数,逐步增加至 QPS。
  • 匀速排队:每秒限制2个请求,多余的请求在后面排队;排队的请求达到 timeout 时被丢弃。

注意:只有快速失败支持流控模式(直接、关联、链路)的设置。

wiki文档:https://github.com/alibaba/Sentinel/wiki/流量控制

Sentinel------熔断降级(DegradeRule)

切断不稳定调用,快速返回不积压,避免雪崩效应。

1. 断路器工作原理


2. 熔断规则------慢比例调用

RT:响应时间

发送的所有请求中,80%都是慢请求(80%的请求都响应时间超过了最大RT),就会进行30s熔断,在这30s内不会再发送请求。

3. 熔断规则------异常比例

发送的所有请求中80%都是异常的请求,就会进行30s熔断,在这30s内不会再发送请求。

有熔断和无熔断的区别:

无熔断的情况下,需要每次向服务发送请求,请求失败后,才返回兜底。

有熔断时,不需要向服务发送请求,直接返回兜底,节约服务执行时间。

4. 熔断规则------异常数

出现了10个异常请求,会进行熔断。

Sentinel------热点规则

wiki------热点参数限流:https://github.com/alibaba/Sentinel/wiki/热点参数限流

参数索引:限制资源的方法中的参数位置。

参数例外项:设置某个指定参数作为例外,可以不进行限制。

热点规则是流量控制中的一种,流量控制会对整个资源进行控制,热点规则可以对资源中的某个参数进行额外控制。

注意:blockHandler 和 fallback 的区别?

fallback 可以处理业务异常,blockHandler 只能处理 BlockException 异常。

相关推荐
一 乐5 小时前
婚纱摄影网站|基于ssm + vue婚纱摄影网站系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端
Boilermaker19925 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
Cherry的跨界思维6 小时前
28、AI测试环境搭建与全栈工具实战:从本地到云平台的完整指南
java·人工智能·vue3·ai测试·ai全栈·测试全栈·ai测试全栈
alonewolf_996 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
一嘴一个橘子6 小时前
spring-aop 的 基础使用(啥是增强类、切点、切面)- 2
java
码事漫谈6 小时前
Protocol Buffers 编码原理深度解析
后端
sheji34166 小时前
【开题答辩全过程】以 中医药文化科普系统为例,包含答辩的问题和答案
java
码事漫谈6 小时前
gRPC源码剖析:高性能RPC的实现原理与工程实践
后端
恋爱绝缘体17 小时前
2020重学C++重构你的C++知识体系
java·开发语言·c++·算法·junit
xiaolyuh1237 小时前
Spring 框架 核心架构设计 深度详解
spring·设计模式·spring 设计模式