1
q 线程隔离上sentinel和hystix区别
a hystix用线程池实现县城隔离,任何时刻大于线程池最大线程数的线程自然会被隔离,优点是支持异步、隔离性强(暂时不理解为啥隔离性强),缺点是一个service一个线程池,线程池相对更消耗资源,service多的话线程池也多扛不住啊;
sentinel基于信号量(计数器),来个请求信号量减一,优点是相比线程池轻量级,性能好,service多也无妨,缺点是不能异步。
2
q sentinel限流算法
a 看图:
3
q 源码概述
a
入口:
1)strater–sentinel.jar的spring.factoies文件里有个SentinelWebAutoConfiguration,他实现了springmvc的WebMvcConfiger的addInterceptors()方法注册springmvc拦截器,拦截所有controller接口添加前后限流、熔断降级等处理。
2)@sentinelresource注解,这个是通过aop实现的前后限流、熔断降级等处理。
大概流程:
通过一个slotchain封装了如下图的各种slot,每个slot完成如下图描述的任务,基于方法栈的责任链模式,如果判断qps、线程数等超过阈值就抛异常到最外层方法让外层方法处理(通常就是直接return返回响应)
更多推荐
sentinel面试题
发布评论