目录
控制台启动
启动:java ‐jar sentinel‐dashboard‐1.8.0.jar
访问:http://localhost:8080/#/login,默认用户名密码: sentinel/sentinel
默认端口是8080,可以修改端口
服务提供模块
端口:10000、10001
1、引入依赖
2、yml
关于transport.port1、端口配置会在被监控的微服务对应主机上启动 Http Server
2、该 Http Server 会与 Sentinel 控制台交互
3、比如sentinel控制台添加了一个限流规则,会把规则数据push给这个Http Server接收,Http Server再将这个规则注册到Sentinel中
简单地讲:transport.port指定被监控的微服务应用于sentinel控制台交互的端口默认端口是8719,如果被占用了,会依次+1扫描,直到找到一个没有被占用的
流控规则
Sentinel采用懒加载,只有调用才能看到监控数据
QPS:每秒钟请求数量
线程:进行中的请求数量
流控模式
直接:限制自己,对自己添加规则
关联:A达到阈值,限制B,限制谁就给谁添加规则
链路:多个请求可以访问同一个目标,针对性限流,对目标添加规则
流控效果
**Warm up(预热):**流量很大,系统从空闲到繁忙切换时间长一些
coldFactor:冷加载因子,默认是3,QPS从QPS/clodFactor开始
比如QPS=9,预热时长为3,QPS从3开始
前3秒,QPS>3会报错
后3秒,QPS>3&&<=9是正常
**排队等待:**间隔性突发流量,匀速排队,阈值类型必须是QPS
不拒绝请求,依次执行,超过等待时间就超时
熔断规则
级联调用,不要线程堆积,快速返回结果
慢调用比例
慢调用: 某次请求的响应时间 > 最大RT
慢调用比例: 慢调用次数 / 总调用次数
进入熔断: 实际请求数目 > 最小请求书 且 慢调用比例 > 比例阈值
熔断完毕后,如果接下来的第一个请求的响应时间 < RT,则熔断结束,否则再次熔断
异常比例
异常数
@SentinelResource
如果Controller层的方法 或 限流处理类的方法是private,@SentinelResource就不会起作用
局部限流处理
按资源名称限流+自定义限流返回+服务降级处理
自定义全局类
必须都是静态方法
全局限流处理类
全局异常处理类
热点规则
参数必须是基本类型或者String
授权规则
白名单与黑名单
empower/test1,empower/test2会失败
系统规则
对所有的API接口进行保护,总数不超过系统最大QPS,使用入口QPS
规则持久化
1、引入依赖
2、yml
演示了流控规则其他的规则rule-type:degrade,system,param-flow
Sentinel整合OpenFeign
目前:
服务提供模块(10000、10001)注册了Nacos、Sentinel
服务使用模块(81)注册了Nacos、OpenFeign
现在服务使用模块可以默认轮询执行提供模块的方法
对于服务提供模块,上面已经有了自己的全局异常类和全局限流类
对于服务使用模块,引入Sentinel,设置异常类
问题:
一开始能够正常轮询调用方法
如果一个正常,一个超时,会总是调用正常的模块(OpenFeign默认超时时间是1秒)
两个都挂掉,81会出现超时(因为会缓存到本地)
过30s左右,会出现无法找到服务(因为会定时从nacos拉取服务)
两个都是异常信息,需要对81进行熔断降级
服务使用模块出现异常
一定是Service接口的方法出现问题,Service加fallback参数,自定义异常类实现接口
1、引入依赖2、yml
3、Service接口