4.Sentinel快速开始
第一种方式 使用API写
第一步 引入依赖
使用API写 缺点:规则不灵活,如需修改,需要在原代码上修改
第二种方式 使用注解来实现
第一步 引入依赖
第二步 写一个配置类 任务:生成一个sentinelResourceAspect()
第三步 写一个报错时执行的函数
SphU.entry 做一个限流
第四步 整合SpringBoot
①引入依赖
②没有注解
③增加配置
默认8719 dashboard 控制台8080
④下载安装Sentinel控制台
流控 降级 热点 授权
流控规则
机器列表
簇点链路 通过QPS 拒绝QPS 线程数 平均RT 分钟通过 分钟拒绝
写一个组件 处理block时的系统返回信息 所有的异常都在这里处理
实现 BlockExceptionHandler 重写 handle方法 传入request 和 response 和 BlockException 三个参数
BlockException包括流控异常 降级异常 对应 热点规则 系统规则 授权规则 集群流控
11222212
继续完善用一个类处理所有的异常 5种不同的异常
FlowException 接口限流
DegradeException 服务降级
ParamFlowException 热点参数限流
SystemBlockException 触发系统限流
简单测试限流 设置了2秒的睡眠 请求的过快就会被限流 但是稍微等一会 就又可以访问了
流控规则 高级选项 默认 直接快速失败
关联流控模式
11222233
测试关联流控
配置关联规则 当write达到阈值5时,对read进行限流
链路流控 两个Controller同时访问一个Service
注意 需要添加配置 将web-context-unity参数设置为false,才可以根据不同的URL进行链路限流,如果不配置将无法生效。
接下来讲流控效果
包括三个 快速失败(默认) Warm up (预热)排队等待
测试热启动 首先到3,最大的 QPS的三分之一,然后到10
接下来是排队等待
11230954
预热
第一步
排队等待
请求以均匀的速度通过,QPS是每秒通过的请求数,排队等待的做法就是,一秒除以QPS等于t秒,t小于等于1秒,每隔t秒处理一个请求。存在问题:系统内部转化成毫秒进行计算,最小时间单位是毫秒,所以使用排队等待,最大的QPS只有1000个。
第二步 压力测试
设置超时时间 500毫秒
使用jmeter进行压测
测试效果如下所示
下一个知识点 降级规则
调用别的模块,别的模块响应时间过长
以什么规则进行熔断降级呢?Sentinel提供三个方法。
第一个 慢调用比例
熔断时间两秒
熔断规则
下一个熔断规则 异常比例
异常是异常 ,慢调用是慢调用。基本条件,在一秒内,最小请求数大于5,异常的比例阈值达到0.4时,熔断2秒