接下去简单介绍下如何利用sentinel的dashboard进行流控和熔断。
一、流控(服务提供方设置)
1、在簇点链路找到对应资源名,点击流控,选择QPS或者线程数,单位是 秒 ,设置单机阈值
流控:QPS:每秒访问数;线程数:也就是时间段内只有对应的线程数处理,超过的线程请求会等待
2、流控模式:直接、关联、链路
①直接:只针对当前资源进行流控,默认模式。
②关联:关联资源的请求超出阈值,那么会对当前资源请求有影响,比如查询和插入两个动作进行流量控制,大促的时候,保证插入成功(下单),查询稍微慢一点
下图所示,当请求/order/add接口的时候,如果1秒请求超过2次,那么就会对/order/flowThread进行限流,请求该接口提示该接口被限流
③链路:选择链路,需要填写入口资源,对入口资源进行控制,比如某个渠道的请求进行限制访问。demo如下
@SentinelResource不止可以作用于controller接口,还能作用于serviceImpl里面的方法
需要在配置文件中配置
spring: cloud: sentinel: web-context-unify: false
sentinel流控配置如下
简单理解就是:/order/yyy和/order/xxx接口都是getOrder流控的接口,但前者如果每秒超过2次请求就会被流控,而后者就不会,即同一个链路,有些请求会被控制,有些请求不会
代码编码如下:
controller
@GetMapping("/xxx") public String xxx(){ String msg = orderService.getOrder(); return "xxx订单 " + msg; } @GetMapping("/yyy") public String yyy(){ String msg = orderService.getOrder(); return "yyy订单 " + msg; }
serviceImpl
@Override @SentinelResource(value = "getOrder",blockHandler = "orderBlockHandler") public String getOrder() { return "order service"; } public String orderBlockHandler(BlockException e){ return "被流控"; }
请求后如下:
3、流控效果:快速失败、warm up 、排队等待
快速失败:超出的请求直接就拒绝处理,提示被流控
warm up(激增流量):预热,即请求来时,是个慢慢增加请求处理数的过程。有个冷加载因子,默认是3,即默认是3个流量被处理,其余会拒绝,后来处理的请求慢慢的就是数量增多
排队等待(脉冲流量):超出阈值的请求,会等待设置的超时时间,一旦系统将现有请求处理完成,就会去处理等待的请求,有效的利用系统处理脉冲流量的时间间隙
二、熔断(服务消费端进行设置)
熔断策略:慢比例(默认)、异常比例、异常数
慢比例:如上图所示,当请求数超过5次,有5*0.4=2个的请求响应时间超过1000ms,就会触发熔断,熔断时长为3s,在这3s熔断期间不会有请求通过(关闭),而过完3s后,会进入一个半开状态,即会放一个请求过去,如果这一个请求还是超过1000ms的慢调用,那会再次进入熔断。
异常比例:如上图所示,当请求次数超过10,其中10*0.2=2个出现异常,那么就会触发熔断,熔断时长5s。超过熔断5s后访问第一次请求就出现异常,那就再次进入到熔断状态。
异常数:如上图所示,当请求次数超过10个的时候,出现4个异常,就会触发熔断,熔断时长5s。超过熔断5s后访问第一次请求就出现异常,那就再次进入到熔断状态。
这流控和熔断都是防止系统出现级联故障,导致系统崩溃的处理,让系统更加健壮
以上内容纯学习使用!
标签:请求,流控,springcloud,熔断,getOrder,控和,order,String From: https://www.cnblogs.com/qwg-/p/18429049