SpringCloud 使用sentinel

一、添加依赖
com.alibaba.cloudspring-cloud-starter-alibaba-sentinel
二、配置文件配置地址
spring:cloud:sentinel:transport:dashboard: localhost:8080
三、流控模式介绍
直接:统计当前资源的请求,触发阈值时对当前资源直接限流,也是默认的模式
关联:统计与当前资源相关的另一个资源触发阈值时,对当前资源限流
使用场景:比如用户支付时需要修改订单状态,同时用户要查询订单 。查询和修改操作会争抢数据库锁,产生竞争 。业务需求是有限支付和更新订单的业务,因此当修改订单业务触发阈值时,需要对查询订单业务限流 。
链路:统计从指定链路访问到本资源的请求触发阈值时,对指定链路限流
例如有两条请求链路:
? /test1→ /
? /test2→/
如果只希望统计从/test2进入到/的请求,则可以这样配置:
注意:
1、默认会将方法做整合,导致链路模式的流控失效,需要修改.yml,添加配置:
:
cloud:
:
web--unify: false # 关闭整合

SpringCloud 使用sentinel

文章插图
2、默认只标记中的方法为资源,如果要标记其它方法(如方法),需要利用@注解,示例:
@("goods")
void () {
.err.("查询商品");
四、流控效果
快速失败:QPS超过阈值时,拒绝新的请求 。
warm up: QPS超过阈值时,拒绝新的请求;但QPS阈值是逐渐提升的,可以避免冷启动时高并发导致服务宕机 。
排队等待:请求会进入队列,按照阈值允许的时间间隔依次执行请求;如果请求预期等待时长大于超时时间,直接拒绝 。
五、热点参数限流
热点参数限流是分别统计参数值相同的请求,判断是否超过QPS阈值 。并且可以对部分参数设置例外配置:
注意:热点参数限流对默认的资源无效,必须手动添加@注解
六、整合
支持的雪崩解决方案:1、线程隔离(仓壁模式)2、降级熔断
(1)在.yml中配置:feign..=true
feign:
:
: true # 开启Feign的功能
(2)给编写并注册为Bean
public class UserClientFallbackFactory implements FallbackFactory {@Overridepublic UserClient create(Throwable throwable) {// 创建UserClient接口实现类,实现其中的方法,编写失败降级的处理逻辑return new UserClient() {@Overridepublic User findById(Long id) {// 记录异常信息log.error("查询用户失败", throwable);// 根据业务需求返回默认的数据,这里是空用户return new User();}};}}@Beanpublic UserClientFallbackFactory userClientFallback(){return new UserClientFallbackFactory();}
(3)将配置到
@FeignClient(value = "http://www.kingceram.com/post/userservice", fallbackFactory =UserClientFallbackFactory.class)public interface UserClient {@GetMapping("/user/{id}")User findById(@PathVariable("id") Long id);}
七、熔断降级策略
1、慢调用比例:超过指定时长的调用为慢调用,统计单位时长内慢调用的比例,超过阈值则熔断
2、异常比例:统计单位时长内异常调用的比例,超过阈值则熔断
3、异常数:统计单位时长内异常调用的次数,超过阈值则熔断
八、授权规则
授权规则可以对调用方的来源做控制,有白名单和黑名单两种方式 。
是通过这个接口的来获取请求的来源的 。
public interface RequestOriginParser {/*** 从请求request对象中获取origin,获取方式自定义*/String parseOrigin(HttpServletRequest request);}