1、服务雪崩
调用链路上有一个公共的服务不可用导致其他服务不可用,这种级联的不可用会导致整个应用服务不可用。
2、解决办法
使用sentinel:1、限流(服务端) 2、降级(消费端)
3、其他
@SentinelResouce:
value:被保护的资源
blockhandler: 指定被流控后执行的方法 需要和原方法再同一个类中,同时 指定的方法必须是public 而且返回值与原方法一致
包含原方法参数,可以多出一个BlockException 的参数。
如果不想再同一个类中,
1、指定 blockHandleclass
2、而且再blockHandleclass 中方法必须为static
sentinel 支持的流控方式,限流和降级
一、限流
控制指标:QPS和线程数
流控模式(影响谁):直接、关联和链路
流控效果(影响的结果):快速失败、Warmup、排队等待
1、指标:
QPS: 限制的是每秒并发量
线程数:影响的是服务调用的线程数量
2、流控模式:
直接:
关联:A----调用----》B,在A上配置了流控规则,关联了B,则当B触发了流控规则A会被限制。
场景: 订单查询和插入。 在查询的服务上配置流控规则,关联订单插入,当订单插入触发了流控,则订单查询被影响。
链路: A----调用----》B,在A上配置了流控规则,链路了B,则当A触发了流控规则B会被限制。
场景:当A被B和C同时调用,A的访问量上来后,限制B(不太重要)访问A,而让C继续能够访问。则对A配置流控规则,链路配置B,则A触发流控时,B会被限制。
3、流控效果:
快速失败:
warmup:预热,假设设置QPS是10,则在一开始QPS为3(冷加载因子),在指定时间内,达到QPS10.
排队等待:设置等待时间,在等待时间后,如果没有响应则失败。