Sentinel介绍
作用:alibab开源用来对现有系统进行保护,替换原来的Hystrix,Hystrix用来保护微服务系统,主要是解决服务雪崩也就是服务熔断,Sentinel不仅可以解决服务雪崩,也可进行流控等。
Sentinel以“流量”为突破口,致力于流量控制、短路、负载保护等多个领域,保障服务可靠性。
Sentinel 开源组件:
Sentinel:项目中实现流量控制 熔断 降级
Sentinel DashBoard(哨兵仪表盘组件)
Sentinel实现原理
Sentinel与Hystrix不同的是仅仅在服务中引入Sentinel的依赖是不行的,必须使用Sentinel Dashboard与Sentinel结合使用,使用Sentinel Dashboard来进行配置资源和规则对应关系,Sentinel所有的配置都在Sentinel Dashboard中进行,不需要在代码中配置。
Sentinel Dashboard的使用
1、首先下载DashBoard的使用
[GitHub下载地址](Tags · alibaba/Sentinel (github.com))
2、我们发现下载的是一个jar包,对于jar包大家都很熟悉。
3、直接运行jar包
默认端口为8080,如果8080被占用,我们需要在启动的时候修改端口号
1 | java -jar -Dserver.port=9191 文件名 |
4、访问dashbord管理界面
localhost:9191
用户名和密码都为sentinel
Sentinel组件保护微服务
1、开发微服务 创建一个独立的SpringBoot组件
2、开放一个接口,作为Sentinel资源
1 | package com.bestrookie.controller; |
3、在微服务中引入Sentinel组件
1 | <dependency> |
4、配置项目中配置文件链接到sentinel dashboard
1 | spring: |
5、启动服务
6、查看dashboard
注意:必须多次访问我们开发的接口,才会出现明显的界面,如果只访问一次,请求一闪而过,有可能界面上上就什么都不显示
Sentinel中对系统保护规则
五大规则
1、流控规则:流量控制(Flow Control)
定义:其原理是监控应用流量的QPS或者并发线程数等指标,当达到制定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性能。
2、降级规则:熔断降级(Degrade Service)
定义:其原理是监控应用中资源调用请求、达到指定阈值时自动触发熔断降级。
3、热点规则:热点参数(ParamFlow)
热点:什么是热点,就是经常访问的数据
定义:其原理是,很多时候我们希望统计某个热点数据中访问频次最高的Top N 数据,并对其访问进行限制。
4、系统规则:系统规则(SystemFlow)
定义:其原理是sentinel系统自适应限流,从整体维度对应用访问入口进行控制
5、授权规则:黑白名单控制规则
定义:很多时候,我们需要根据调用来源来判断该次请求是否允许方形,这时候可以使用Sentinel的来源访问控制(黑白名单控制)的功能。若配置黑名单则请求来源于黑名单时不通过,其余的请求通过。
流控规则
流控:流量控制
监控应用流量的QPS或并发线程指标,挡达指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。
QPS:每秒的请求数 当每秒请求数超过指定阈值之后对当前请求进行限流。
并发线程数:当服务器中创建线程数超过指定阈值之后对当前请求进行限流
高级选项
流控模式:
1、直接:当配置资源在运行过程超过当前规则配置额阈值之后对该资源请求做的处理是什么
例:比如我们设置的阈值为2,当超过这个阈值,也就是第3的时候,会出现我们设置的流控效果
2、关联模式:当配置资源在运行过程中超过当前规则配置的阈值之后对他所关联资源进行请求做什么样的处理
例:
关联的资源,同样是一个路径名称,这个关联是反向关联,同样设置的阈值为2,资源为 /demo
关联资源为/aa
,当对/aa
的访问超过这个阈值,资源/demo
出现我们设置的访问效果
3、链路模式:当配置资源在运行过程中超过当前规则配置的阈值之后对他链路中自愿请求做什么的处理
例:
入口资源同样是一个路径名称,这个关联是正向关联,同样设置的阈值,资源为 /demo
关联资源为/aa
,当对demo
的访问超过这个阈值的时候,所有对/aa
的访问出现我们设置的访问效果。
流控效果:注意 只适用于QPS限流
1、快速失败:直接拒绝请求 并抛出相应的异常
2、Warm Up 冷启动 预热:在一定的时间段内,达到我们设置的处理请求数
比如,我们设置的阈值为10,设置的预热时长为10秒,刚开始访问时,不一定达到阈值10就拒绝了,有可能访问两次就开始拒绝了,当十秒后,开始稳定的达到阈值10。
3、排队等待:设置一个时间,比如设置5秒,阈值为10,一次性来了100个访问,那么我们就一次处理10个,剩下的90排队等待,就处理5秒的时间,5秒之后拒绝剩余的请求。
降级规则(熔断规则)
熔断:用来避免微服务架构中雪崩现象
原理:当监控到调用链路中某一个服务,出现异常(20个以上异常)自动触发熔断,在触发之后对于该服务调用不可用
熔断:达到某个阈值条件之后自动触发熔断
Sentinel提供熔断策略
1、RT:根据响应时间熔断
当一秒内持续进入N个请求,对应时刻的平均响应时间均超过阈值,那么接下来的时间窗口之内,对整个方法的调用都会自动的熔断
2、异常比例:根据请求调用过程中出现异常百分比进行熔断
当单位统计时长(statIntervalMs
)内请求数目大于设置的最小请求数目,并且异常的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。异常比率的阈值范围是 [0.0, 1.0]
,代表 0% - 100%。
3、异常数:根据请求调用过程中异常数进行熔断
当单位统计时长内的异常数目超过阈值之后会自动进行熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。
热点参数限流
热点:经常访问的数据称之为热点
热点限流:也成为热点参数限流,日后访问资源中携带了指定参数进行限流
如何使用
注意:使用热点参数限流时,不能使用资源路径,必须使用资源别名
Sentinel提供资源别名注解 @SentinelResource(value="别名")
例:
路径名称为:/demo
别名为aaaa
。blockHandler
如果不添加这个属性,程序会抛出热点参数限流异常,这个属性主要是出现响应的限制时,返回自动的信息给前端页面显示,注意:参数应该对应,如果不对应,自定义的方法无法生效。
fallback
是我们的程序出现异常时,给前端返回自定义的信息。用法同blockHandler。
参数索引,指的是我们这个请求携带参数的索引。
例:/demo?id=12
我们要限制id,参数索引为0
当然我们也可以限制这个索引对应参数的值为多少时,添加一个限制规则
简单解释一下这个配置:热点参数为索引0的参数,这个热点限制为每秒访问10次,这个参数对应值为12的请求,限制为每秒访问一次。