sentinel与hystrix比较

步履不停

表格来自 Sentinel Github 官方文档
image.png

  • Hystrix 最核心的一项功能就是资源隔离,支持线程池隔离和信号量隔离;Sentinel支持信号量隔离。
  • Sentinel与Hystrix都支持基于失败比率的熔断降级,在调用超过指定的数量并且失败比率达到设定阀值时触发熔断,并在下个时间窗口自动恢复。Sentinel也支持按失败总数熔断降级,但按失败总数的熔断降级固定时间窗口为1分钟,当1分钟内调用失败总数达到设定的阀值就会触发熔断。此外,Sentinel还支持基于平均响应时间的熔断降级,平均响应时间越长,说明服务的性能在持续下降,在响应时间持续飙高时自动熔断,可以防止调用慢造成级联阻塞。
  • Sentinel 和旧版本 Hystrix 的实时指标数据统计实现都是基于滑动窗口,指标数据统计指的是统计每个资源的当前窗口时间内的请求总数、处理成功总数、失败总数、总耗时、平均耗时、最大耗时、最小耗时、被降级总数等。
  • Sentinel 提供数据源接口可实现动态加载规则配置,结合 loadRules API 可灵活的运行时修改规则配置,并且随时修改随时生效。Hystrix 的资源模型设计上采用了命令模式,在创建 Command 时就需要指定隔离策略是线程池隔离还是信号量隔离,一但指定了隔离策略,运行期间便不能修改隔离策略,而在 Sentinel 中资源定义和规则配置是分离的,因此在配置的灵活性上 Sentinel 更具有优势。
  • Sentinel 支持系统自适应限流,Hystrix 所不支持的。当系统负载较高的时候,如果仍持续让请求进入,可能会导致系统崩溃,无法响应。在集群环境下,负载均衡把本应这台机器承载的流量转发到其它的机器上去,如果这个时候其它的机器也处在一个边缘状态的时候,这个增加的流量就会导致这台机器崩溃,最后导致整个集群不可用。针对这个情况,Sentinel 提供了对应的保护机制,让系统的入口流量和系统的负载达到一个平衡,保证系统在能力范围之内处理最多的请求。
  • 在 QPS 过高的情况下,直接拒绝超出限制的请求是最常见的实现方式,但有些场景我们可能并不想直接拒绝请求,而是让请求排队等待处理,例如某一秒突增请求过多,但下一秒可能又没有请求或者请求很少的情况。Sentinel 的流量控制支持多种模式,例如直接拒绝模式、慢启动预热模式、匀速器模式。而慢启动预热模式和匀速器模式也是 Hystrix 所不支持的。介绍下Sentinel流量整形的三种模式:

    直接拒绝:即超出的请求直接拒绝
    慢启动模式:当流量激增的时候控制流量通过的速率,让通过的流量缓慢增加,在一定时间内逐渐增加到阀值上限,给冷系统一个预热时间,避免冷系统被压跨。
    匀速器模式:利用Leaky Bucket算法实现的匀速模式,严格控制了请求通过的时间间隔,同时堆积的请求将会排队,超过超时时长的请求会被拒绝
  • Sentinel 在框架的设计上使用了责任链模式和 SPI 机制提供扩展功能。使用SPI我们可以自定义降级功能ProcessorSlot。
  • Sentinel 还支持集群限流。除了轮询负载均衡算法外,其它的算法都会导致流量到集群的每个节点都不一样,有的多有的少。集群流控可以精确地控制整个集群的调用总量,结合单机限流兜底,可以更好地发挥流量控制的效果。Sentinel集群分嵌入模式(Embedded)与独立模式(Alone)。

    嵌入模式:集群限流服务端作为应用的内置服务同应用一起启动,与应用在同一个进程,可动态的挑选其中一个节点作为集群限流服务端
    独立模式:集群限流服务端作为一个独立的应用部署
  • 黑白名单限流和热点参数限流也是 Sentinel 的一大特色,黑白名单限流,可根据请求来源判断来源是否在黑名单中,如果在黑名单中则拒绝请求,否则放行,结合 Sentinel 的灵活动态配置,黑白名单可用于高峰期间对某些服务限流。

参考文章:
微服务技术选型:Sentinel vs Hystrix

阅读 2k

好走的都是下坡路

23 声望
4 粉丝
0 条评论

好走的都是下坡路

23 声望
4 粉丝
文章目录
宣传栏