0

sentinel(二)

2024.10.11 | cuithink | 728次围观

4. sentinel和hystrix的区别

两者的原则是一致的, 都是当一个资源出现问题时, 让其快速失败, 不要波及到其它服务,但是在限制的手段上, 确采取了完全不一样的方法:

Hystrix 采用的是线程池隔离的方式, 优点是做到了资源之间的隔离, 缺点是增加了线程切换的成本。

Sentinel 采用的是通过并发线程的数量和响应时间来对资源做限制。

功能

Sentinel

Hystrix

隔离策略

信号量隔离

线程池隔离(默认并且是官方推荐)/信号量隔离

熔断策略

慢调用比例、异常比率、异常数

基于失败比率(网络超时也是失败)

实时统计实现

滑动窗口(LeapArray)

滑动窗口(基于RxJava)

基于注解的支持

支持

支持

限流

基于QPS,支持基于调用关系的限流 (关联流控,链路流控)

有限的支持

流量整形

支持预热模式、排队等待

不支持

系统自适应保护

支持

不支持

控制台

可配置规则、查看秒级监控、机器发现等

不完善

5. Sentinel对应流控模式有哪几种

sentinel共有三种流控模式,分别是:

  • 直接:指定来源对于该资源的访问达到限流条件时,开启限流。

  • 关联:当与该资源设置了关联的资源达到限流条件(来源+阈值类型+单机阈值)时,开启限流 [适合做应用让步]

  • 链路:当从某个上游资源接口访问过来的流量达到限流条件时,开启限流。

6. 流控效果

  • 快速失败(默认):

    • 直接失败,抛出异常,不做任何额外的处理,是最简单的效果。

    • 算法:滑动窗口。

    • 使用场景:这种方式适用于对系统处理能力确切已知的情况下,比如通过压测确定了系统的准确水位时。

  • Warm Up

    • 它从开始阈值到最大QPS阈值会有一个缓冲阶段,一开始的阈值是最大QPS阈值的 1/3,然后慢慢增长,直到最大阈值,适用于将突然增大的流量转换为缓步增长的场景。 冷加载因子: codeFactor 默认是3,即请求 QPS 从 threshold / 3 开始,经预热时长逐渐升至设定的 QPS 阈值。

    • 算法:令牌桶算法。

    • 使用场景:在某些情况下,系统可能会突然遭受到大量的请求压力,例如广告投放、秒杀活动等场景。通过预热机制,可以提前逐渐增加系统的流量限制,以减轻系统在高峰期的压力。

  • 排队等待

    • 让请求以均匀的速度通过,单机阈值为每秒通过数量,其余的排队等待; 它还会让设置一个超时时间,当请求超过超时间时间还未处理,则会被丢弃。

    • 算法:漏斗算法

    • 使用场景:这种方式主要用于处理间隔性突发的流量,例如消息队列。想象一下这样的场景,在某一秒有大量的请求到来,而接下来的几秒则处于空闲状态,我们希望系统能够在接下来的空闲期间逐渐处理这些请求,而不是在第一秒直接拒绝多余的请求。

    • 注意点:匀速排队模式暂时不支持 QPS > 1000 的场景

8. 系统规则保护

系统保护规则是应用整体维度的,而不是资源维度的,并且仅对入口流量 (进入应用的流量) 生效。

  • Load(仅对 Linux/Unix-like 机器生效):当系统 load1 超过阈值,且系统当前的并发线程数超过系统容量时才会触发系统保护。系统容量由系统的 maxQps * minRt 计算得出。设定参考值一般是 CPU cores * 2.5。

  • RT:当单台机器上所有入口流量的平均 RT 达到阈值即触发系统保护,单位是毫秒。

  • 线程数:当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护。

  • 入口 QPS:当单台机器上所有入口流量的 QPS 达到阈值即触发系统保护。

  • CPU使用率:当单台机器上所有入口流量的 CPU使用率达到阈值即触发系统保护。


粤ICP备16076548号
发表评论