一、熔断降级介绍与配置

概述:除了上一章节讲解的sentinel的流量控制之外,sentinel还提供了熔断降级功能。与处理高并发的系统自我保护机制不同的是,熔断降级主要防止当前接口不可用时,导致依赖该接口的服务也不可用,间接导致系统的雪崩效应。

通常接口调用都在客户端做弱依赖服务调用,来保证自身系统的功能稳定。(强依赖服务调:服务A依赖服务B,当B成功A成功,当B失败A失败,称为强依赖;若依赖,当A调用B成功,A成功,当A调用B失败,A做降级处理,保证A接口功能正常,称为弱依赖)

熔断降级包含三种处理方式:

  1. 慢调用比例
  2. 异常比例
  3. 异常数

1、慢调用比例

表示:单位时间内默认1秒内,当最小请求数达到5次以及超过200ms的请求数大于5/2=2时,则触发接口熔断,在熔断后的10秒内都将对该接口进行降级处理。

2、异常比例

表示:单位时间内(默认1秒)当最小请求次数达到5次以及失败的请求数量达到最小请求数量的一半时,则会触发熔断,熔断时间为10秒。

3、异常数

表示 单位时间内(1分钟)当请求数达到5次且异常数超过2次时进入熔断状态,熔断时间长度为65秒,熔断时间必须设置大于60秒。60秒之后关闭熔断状态。

二、热点参数限流介绍与配置

热点参数限流为,当一个接口中其中一个查询参数使用较高的情况下,可以针对该参数对该接口进行限流,比如查询人员列表时,人名的查询条件筛选的调用比较高,则可以对包含人名筛选的请求进行限流控制。不包含人名筛选的其他查询人员列表请求不做限流处理。

测试环境:在《SpringCloud Alibaba Sentinel 项目基础环境搭建》基础上修改controller 为:(添加consumer/product/get3接口,以及其熔断降级方法)

package com.xiaohui.springcloud.controller;import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.xiaohui.springcloud.entities.CommonResult;
import com.xiaohui.springcloud.entities.Payment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
public class OrderController {@SentinelResource@GetMapping("/consumer/product/get2")public CommonResult<Payment> getPaymentById(Long id){CommonResult<Payment> commonResult = null;try{Thread.sleep(2000);}catch (Exception e){}if(id>1L){int i = 10/0;}else {commonResult = new CommonResult<>(401,"正常方法调用",null);}return  commonResult;}@SentinelResource(value = "consumer/product/get3",blockHandler = "getPaymentBlockHandler")@GetMapping("/consumer/product/get3")public CommonResult<Payment> getPaymentById2(@RequestParam(required = false) Long id,@RequestParam(required = false) Long id2){CommonResult<Payment> commonResult = null;try{Thread.sleep(1000);}catch (Exception e){}commonResult = new CommonResult<>(401,"正常方法调用",null);return  commonResult;}public CommonResult<Payment> getPaymentBlockHandler(Long id,Long id2, BlockException be){return new CommonResult<>(400,"熔断降级方法",null);}
}

在列表中给服务添加热点限流,设置需要给接口中第几个参数进行设置限流。以及设置的单位时间和请求的次数。在热点配置列表中可以对之前添加的热点进行高级设置,可以设置当前参数的例外值的特殊限流阈值。要求改参数为java8中基本数据类型。

这样,当使用该参数高并发查询时,将会对该请求进行限流。不包含改参数的服务将不会限流。当给该参数传递特殊值时,将根据高级配置中的阈值进行控流。

三、系统自适应限流介绍与配置

处理设置单一服务上的控流之外,sentinel还支撑应用级别上的限流设置。

系统规则支持以下的模式:

  • Load 自适应(仅对 Linux/Unix-like 机器生效):系统的 load1 作为启发指标,进行自适应系统保护。当系统 load1 超过设定的启发值,且系统当前的并发线程数超过估算的系统容量时才会触发系统保护(BBR 阶段)。系统容量由系统的 maxQps * minRt 估算得出。设定参考值一般是 CPU cores * 2.5
  • CPU usage(1.5.0+ 版本):当系统 CPU 使用率超过阈值即触发系统保护(取值范围 0.0-1.0),比较灵敏。
  • 平均 RT:当单台机器上所有入口流量的平均 RT 达到阈值即触发系统保护,单位是毫秒。
  • 并发线程数:当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护。
  • 入口 QPS:当单台机器上所有入口流量的 QPS 达到阈值即触发系统保护。

SpringCloud Sentinel 熔断降级、热点参数限流、与系统自适应限流介绍与配置相关推荐

  1. SpringCloud Alibaba Sentinel 熔断降级 - 程序配制方式实现

    一.Sentinel 上篇文章我们讲解了Sentinel 流控规则的配制,本篇文章我们继续讲下Sentinel 的熔断降级,依然采用程序配制方式实现. 上篇文章地址:https://blog.csdn ...

  2. sentinel 熔断降级

    sentinel 熔断降级 官网:https://sentinelguard.io/zh-cn/docs/circuit-breaking.html 熔断降级 熔断降级:服务由于响应慢.异常等原因触发 ...

  3. Sentinel 熔断降级原理

    Sentinel 熔断降级原理 一.概述 对于熔断这个概念,我们并不陌生,比如股市熔断机制,当股指波幅达到规定的熔断点时,交易所为控制风险采取的暂停交易措施.亦或者是电流熔断,当通过的电流超出导线所能 ...

  4. Sentinel(十)之系统自适应限流

    转载自  系统自适应限流 Sentinel 系统自适应限流从整体维度对应用入口流量进行控制,结合应用的 Load.CPU 使用率.总体平均 RT.入口 QPS 和并发线程数等几个维度的监控指标,通过自 ...

  5. Sentinel熔断降级

    # 0.说明 - https://github.com/alibaba/Sentinel/wiki/%E7%86%94%E6%96%AD%E9%99%8D%E7%BA%A7 - 除了流量控制以外,对调 ...

  6. poi设置列宽自适应_Sentinel 系统自适应限流原理剖析与实战指导

    1.Sentinel 系统自适应概述 从官方了解到 Sentienl 系统自适应限流是一个全局的概念,对应用入口流量统一进行统一控制,结合应用的机器负载.CPU 使用率,总体平均响应时间.入口 QPS ...

  7. gateway sentinel 熔断 不起作用_Sentinel 的一些概念与核心类介绍

    了解 Sentinel 的一些概念 资源:资源是 Sentinel 的关键概念.资源,可以是一个方法.一段代码.由应用提供的接口,或者由应用调用其它应用的接口. 规则:围绕资源的实时状态设定的规则,包 ...

  8. Spring Cloud Alibaba:Sentinel 熔断降级

    1. 前言 Sentinel版本:1.8.0 1.8.0 对熔断特性做了大量升级,低于此版本的谨慎参考 2. 熔断策略 2.1 慢调用比例 最大 RT(即最大的响应时间):请求的响应时间大于RT则统计 ...

  9. java 限流熔断_SpringCloud-Alibaba-Sentinel服务降级,热点限流,服务熔断

    前言:除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一.一个服务常常会调用别的模块,可能是另外的一个远程服务.数据库,或者第三方 api 等.例如,支付的时候,可能需 ...

最新文章

  1. 计算机体系结构:嵌入式方法_计科考研里的【计算机系统结构、计算机软件与理论、计算机应用技术】都是什么意思?...
  2. Leetcode 125. 验证回文串 解题思路及C++实现
  3. Cisco PIX防火墙配置命令大全
  4. ajax代码 java,AJAX - java代码库 - 云代码
  5. python随机产生10个随机数_python(random模块)取10以内的随机数
  6. 你所需要的只是注意力
  7. 创建Django项目
  8. Redhat8: SCTP: type= 5 errno= <0x5e> Socket type not supported
  9. android settings过渡动画,华为过渡动画
  10. 透气清爽的高回弹跑鞋,跑步轻松畅快,咕咚逐日21K体验
  11. selenium页面跳转问题-QQ邮箱登录之后找不到元素
  12. 什么是搜索引擎分词技术?
  13. 一个和尚挑水吃,两个和尚抬水吃,三个和尚没水吃
  14. 马甲线怎么画?如何画出好看的腹肌?
  15. ZigBee智能开关和单火线取电技术
  16. 在计算机中文字的表示
  17. Kafka之消费全流程
  18. 虚拟机中Linux配置java-jdk和tomcat
  19. [网络安全自学篇] 2021年安全学习规划
  20. apriltag linux 编译,无法为python包“apriltag”、“apriltags”和“aruco”构建轮子

热门文章

  1. 用C51编写单片机延时函数
  2. MyBatis多表查询(一对一,一对多,多对多)
  3. 关于ORACLE数据传输加密的介绍
  4. JAVA中String类以形参传递到函数里面,修改后外面引用不能获取到更改后的值
  5. P2574 XOR的艺术
  6. 25马5跑道,求最快的五匹马的需要比赛的次数
  7. shell字符串操作集
  8. 阿里云再降价 数据库产品降20%
  9. PHP CodeBase: 求最近一个周一和上周一的日期
  10. 安装配置Collabnet_Subversion