QSP:当调用url对应的资源时,QSP达到单机阈值时,就会限流。
线程数:当调用url对应的资源时,线程数达到单机阈值时,就会限流。
直接(默认):直接限流
关联:当关联的资源达到阈值时,就限流自己。既当一个资源访问量达到阈值时,对其他资源进行限流。霸权主义。
链路:当有多个服务对资源进行访问时,可以指定限流的链路。
快速失败,warm up,排队等待
第一:定义blockhHander类,定义静态方法,参数BlockException类型。
package com.jt.provider.service;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class ResourceBlockHandler {
/**
* 限流后的异常处理方法,应用于@SentinelResource注解中,
* 此方法在编写时有如下几个要求:
* 1)方法修饰符为public
* 2)必须为static方法
* 3)返回值类型与@SentinelResource注解描述的方法相同
* 4)参数类型为BlockException
* 5)方法名自己定义
* @param ex
* @return
*/
public static String doHandle(BlockException ex){
log.error("block exception {}", ex.getMessage());
return "访问太频繁了,稍等片刻再访问";
}
}
第二:修改@Sentinelresource注解中属性的定义
@SentinelResource(value="doGetResource",
blockHandlerClass = ResourceBlockHandler.class,
blockHandler = "doHandle")
public String doGetResource(){
return "do get resource";
}
第三步:在controller方法中,调用@Sentinelresource注解描述的方法,
/**
* 演示链路限流
* @return
*/
@GetMapping("/sentinel03")
public String doSentinel03(){
return resourceService.doGetResource();
//return "sentinel 03 test";
}
结论:当出现链路限流时,由原本返回显示500,通过自定义,显示自定义内容:访问太频繁了,稍等片刻再访问。
何为降级熔断?(让外部应用停止对服务的访问,生活中跳闸,路障设置-此路不通)
为什么要进行熔断呢?(平均响应速度越来越慢或经常出现异常,这样可能会导致调用链堆积,最终系统崩溃)
Sentinel中限流,降级的异常父类是谁?(BlockException)
Sentinel 出现降级熔断时,系统底层抛出的异常是谁?(DegradeException)
Sentinel中异常处理接口是谁?(BlockExceptionHandler)
Sentinel中异常处理接口下默认的实现类为? (DefaultBlockExceptionHandler)
假如Sentinel中默认的异常处理规则不满足我们的需求怎么办?(自己定义)
我们如何自己定义Sentinel中异常处理呢?(直接或间接实现BlockExceptionHandler )
Sentinel熔断降级策略有哪些?(慢调用比例、异常比例、异常数)
概述:热点参数限流会统计传入的参数热点数据,并根据配置的限流阈值与模式,对包含热点参数的资源进行调用来进行限流,热点参数限流可以看做是特殊的流量控制仅包含对热点参数的资源进行调用生效。其中,Sentinel会利用lru策略统计最近经常方位的热点参数,结合令牌桶算法进行参数级别的流控。
1,热点限流的模式只用QPS模式,参数索引为@Sentinelresource注解的方法参数下标。
0代表第一个参数,1代表第二个参数。单机阈值以及统计窗口时长表示在此窗口时间超过阈值就限流。
刷新页面,出现异常表示限流成功。
概述
系统在生产环境运行过程中,我们经常需要监控服务器的状态,看服务器CPU、内存、IO等的使用率;主要目的就是保证服务器正常的运行,不能被某些应用搞崩溃了;而且在保证稳定的前提下,保持系统的最大吞吐量。
快速入门
Sentinel的系统保护规则是从应用级别的入口流量进行控制,从单台机器的总体 Load(负载)、RT(响应时间)、入口 QPS 、线程数和CPU使用率五个维度监控应用数据,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。如图所示:
系统规则是一种全局设计规则,其中,
Load(仅对 Linux/Unix-like 机器生效):当系统 load1 超过阈值,且系统当前的并发线程数超过系统容量时才会触发系统保护。系统容量由系统的 maxQps * minRt 计算得出。设定参考值一般是 CPU cores * 2.5。
CPU使用率:当系统 CPU 使用率超过阈值即触发系统保护(取值范围 0.0-1.0)。
RT:当单台机器上所有入口流量的平均 RT 达到阈值即触发系统保护,单位是毫秒。
线程数:当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护。
入口 QPS:当单台机器上所有入口流量的 QPS 达到阈值即触发系统保护。
说明,系统保护规则是应用整体维度的,而不是资源维度的,并且仅对入口流量生效。入口流量指的是进入应用的流量(EntryType.IN),比如 Web 服务。
概述:
我们根据调用方来限制资源是否可以通过,这是会可以用Sentinel的黑白名单控制的功能。黑白名单根据资源的请求来源限制资源是否通过。若配置白名单,位于白名单内的资源可以通过,若配置黑名单,则除了黑名单意外的资源可以通过。
配置规则:
资源名:限流规则的对象。
流控应用:对应的黑白名单设置的值。可以为多个,中间用英文字符“,”表示。
授权类型:黑名单(不允许访问),白名单。
总结:
限流规则:QPS.线程数
限流模式:直接,关联,链路
热点模式:对参数,IP等进行限流
降级策略:慢调用,异常比例,异常数
限流算法:计数,令牌桶,漏桶,滑动窗口
流控方式:直接限流,热点限流,系统规则,授权规则,降级或熔断。
异常父类:BlockException。
底层降级异常:DegredExecption
底层热点异常:ParamFlowException
异常实现的接口:BlockExceptionHandler
异常处理接口默认实现类:DefaultBlockExceptionHandler
自定义异常处理时:直接或间接实现BlockExceptionHandler
请求转到tomcat后,服务器web是如何处理请求的