婴儿用品网站模板,尚海整装公司电话,怎样建设网络游戏网站,红色大气网站文章目录 降级和隔离1.Feign整合Sentinel来完成降级1.2总结 2.线程隔离两种实现方式的区别3.线程隔离中的舱壁模式3.2总结 4.熔断降级5.熔断策略#xff08;根据异常比例或者异常数#xff09; 回顾
我们的限流——目的#xff1a;在并发请求的情况下服务出现故障… 文章目录 降级和隔离1.Feign整合Sentinel来完成降级1.2总结 2.线程隔离两种实现方式的区别3.线程隔离中的舱壁模式3.2总结 4.熔断降级5.熔断策略根据异常比例或者异常数 回顾
我们的限流——目的在并发请求的情况下服务出现故障避免因为服务故障的出现而导致级联失败所以说限流也就是对服务故障的一种预防措施
降级和隔离
回顾雪崩
比如说服务之间的依赖当服务C出问题而导致服务A调用不了时如果大量请求涌入A服务调用C服务此时会导致服务A中的资源被大量占用——导致服务A宕机
解决——我们采用线程隔离舱壁模式将服务A中的业务进行隔离每一个业务分配线程池比如说我请求A需要用到C服务那么就只能占用服务A里其中C的线程池在这个线程池里使用里面的线程如果请求数x里面能够使用的线程数就会拒绝服务防止服务A因为服务C的故障而导致宕机但是还是资源损耗了一部分
熔断降级当失败服务到达一定百分比就开始拒绝 都是对服务的调用者进行保护——而服务的调用用到了Feign所以我们需要整合Feign与Sentinel来实现服务调用者的保护
1.Feign整合Sentinel来完成降级 FeignClient服务调用失败后我们可以利用FallbackClass或者FallbackFactory完成对远程服务的异常处理降级处理
流程
1.首先yaml编写配置打开Sentinel为true
2.然后编写一个FallbackFactory的实现类对远程调用出现异常进行降级处理
Slf4j
//实现FallbackFactory定义服务userclient调用失败后的降级措施
public class UserClientFallbackFactory implements FallbackFactoryUserClient {Overridepublic UserClient create(Throwable throwable) {return new UserClient() {Overridepublic User findById(Long id) {//定义降级措施log.error(查询用户异常,throwable);return new User();}};}
}3.将FallbackFactory实现类注入容器中 在config中加入 Beanpublic UserClientFallbackFactory userClientFallbackFactory(){return new UserClientFallbackFactory(); } Feign的请求路径由order服务调用 1.2总结 2.线程隔离两种实现方式的区别 线程池隔离
支持主动超时和异步调用因为我们的服务调用每个请求用的都是独立的线程因为隔离了嘛所以不同服务调用之间是异步的有利于增加效率
与此同时因为线程池大量开销——因为线程之间的上下文切换会导致消耗资源较大
场景低扇出服务调用大量其他服务
信号量隔离
轻量级用的是一个类似于Semaphore的计数器当计数器为0就拒绝请求没有额外的线程开销
但是他不支持主动超时与异步调用因为没有独立服务的独立线程嘛
场景高扇出网关进行转发Sentinel
3.线程隔离中的舱壁模式
QPS限流每s的请求数
线程数tomcat给该资源分配最大的线程值 直接选择资源的线程数就行我猜测是默认给你资源写了一个线程池然后指定里面线程数即可 1.瞬间发送十个请求
2.这里结果为null是因为之前降级策略 像这种是喊流量的控制对于请求的控制——流控模式对于客户端请求过来的的一个限流
流控效果强调的是请求上来了我们服务器回应的一个效果 3.2总结 4.熔断降级 这里我们需要注意几个点
1.熔断降级三种状态——closed可以进行访问、open失败进行熔断、Half-open尝试打开
2.closed——open当达到阈值才会变达到open之后会有一个熔断时间也就是拒绝时间当这个时间一个过就会尝试放行一次也就是Half-Open这里会再次判断根据新来的请求是不是失败的——判断是进Open还是closed 配置的完整含义
当前资源请求100s内来10次响应时间最大RT如果5s并且有一半以上请求都是这样就会进入5s的熔断
案例
5.熔断策略根据异常比例或者异常数 新增一个异常比例的降级策略