Sentinel:分布式系统的流量防卫兵
Sentinel是什么?
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。
Sentinel以流量为切λ点,从流昰控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
Sentinal 解决什么问题?
在大规模微服务架构的场景下,避免服务出现雪崩,要减少停机时间,要尽可能的提高服务可用性。限流和降级是一个非常重要的手段,具体实施方法可以归纳为八字箴言,分别是限流,降级,熔断和隔离。
大家可能会问:Sentinel 和之前常用的熔断降级库 Netflix Hystrix 有什么异同呢?Sentinel官网有一个对比的文章,这里摘抄一个总结的表格,具体的对比可以点此 链接 查看。对比内容SentinelHystrix隔离策略信号量隔离线程池隔离/信号量隔离
熔断降级策略基于响应时间或失败比率基于失败比率
实时指标实现滑动窗口滑动窗口(基于 RxJava)
规则配置支持多种数据源支持多种数据源
扩展性多个扩展点插件的形式
基于注解的支持支持支持
限流基于 QPS,支持基于调用关系的限流不支持
流量整形支持慢启动、匀速器模式不支持
系统负载保护支持不支持
控制台开箱即用,可配置规则、查看秒级监控、机器发现等不完善
常见框架的适配Servlet、Spring Cloud、Dubbo、gRPC 等Servlet、Spring Cloud Netflix
从对比的表格可以看到,Sentinel比Hystrix在功能性上还要强大一些,本文让我们一起来了解下Sentinel的源码,揭开Sentinel的神秘面纱。
Sentinal 流控
1.qps请求
如果选中qps,单机阈值设置为1,表示1秒钟只能请求一个
2.线程数
如果选中线程数,单机阈值设置为1,表示1秒钟只能有一个线程请求
3.关联
如果选中qps/线程数,a接口关联b接口,与a关联的b接口到达阈值时,就限流a接口。
(a是下订单接口,b是支付接口,支付接口到达阈值时,就现在下单的请求,缓冲下数据。)
4.预热
当流量进来时,设置等待时间,当达到等待时间了,就全部放行
5.排队等待
根据指定的的阈值,超过排队等待。
Sentinal 降级
1.RT平均响应时间
设置rt毫秒数,设置时间窗口,如果在设置的rt毫秒数内还没处理完,就设置降级的时间,不让访问
2.异常比例
设置异常比例(0.2=10%),设置时间窗口(间隔几秒),如果设置异常比例为0.2,设置时间是1,如果请求过来出现了20%以上的错误,才走降级,如果没超过,直接返回异常信息
3.异常数
设置异常比例,设置时间窗口如果设置异常比例为5,时间要大于1分钟(设置为70),如果1分钟出现5次以上的异常时,就会走熔断降级(就会返回指定的异常信息)。