Sentinel原理

  • 一、Sentinel 基本概念
    • 资源
    • 规则
  • 二、Sentinel 功能和设计理念
    • 流量控制
    • 流量控制设计理念
  • 三、 熔断降级
    • 什么是熔断降级
    • 熔断降级设计理念
      • Hystrix
      • Sentinel 对这个问题采取了两种手段
        • 通过并发线程数进行限制
        • 针对慢调用和异常对资源进行降级
    • 系统自适应保护
  • 四、Sentinel 是如何工作的
  • 五、Sentinel基于并发线程数流控

一、Sentinel 基本概念

资源

资源是 Sentinel 的关键概念。 它可以是 Java 应用程序中的任何内容,例如,由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是一段代码。

只要通过 Sentinel API 定义的代码,就是资源,能够被 Sentinel 保护起来。大部分情况下,可以使用方法签名,URL,甚至服务名称作为资源名来标示资源。

规则

围绕资源的实时状态设定的规则,可以包括流量控制规则熔断降级规则以及系统保护规则。所有规则可以动态实时调整。

二、Sentinel 功能和设计理念

流量控制

流量控制 在网络传输中是一个常用的概念,它用于调整网络包的发送数据。然而,从系统稳定性角度考虑,在处理请求的速度上,也有非常多的讲究。任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的。我们需要根据系统的处理能力对流量进行控制。
Sentinel 作为一个调配器,可以根据需要把随机的请求调整成合适的形状。如下图所示:

流量控制设计理念

流量控制有以下几个角度:

  • 资源的调用关系,例如资源的调用链路,资源和资源之间的关系;
  • 运行指标,例如 QPS、线程池、系统负载等;
  • 控制的效果,例如直接限流、冷启动、排队等。

Sentinel 的设计理念是让您自由选择控制的角度,并进行灵活组合,从而达到想要的效果。

三、 熔断降级

什么是熔断降级

除了流量控制以外,及时对调用链路中的不稳定因素进行熔断也是 Sentinel 的使命之一。由于调用关系的复杂性,如果调用链路中的某个资源出现了不稳定,可能会导致请求发生堆积,进而导致级联错误。

Sentinel 和 Hystrix 的原则是一致的: 当检测到调用链路中某个资源出现不稳定的表现,例如请求响应时间长或异常比例升高的时候,则对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联故障。

熔断降级设计理念

在限制的手段上,Sentinel 和 Hystrix 采取了完全不一样的方法。

Hystrix

Hystrix 通过 线程池隔离 的方式,来对依赖(在 Sentinel 的概念中对应 资源)进行了隔离。

  • 好处是资源和资源之间做到了最彻底的隔离。
  • 缺点是除了增加了线程切换的成本(过多的线程池导致线程数目过多),还需要预先给各个资源做线程池大小的分配,并且对于一些使用了 ThreadLocal 的场景来说会有问题(如 Spring 事务)。

Sentinel 对这个问题采取了两种手段

通过并发线程数进行限制

资源池隔离的方法不同,Sentinel 通过限制资源并发线程的数量,来减少不稳定资源对其它资源的影响。这样不但没有线程切换的损耗,也不需要您预先分配线程池的大小。当某个资源出现不稳定的情况下,例如响应时间变长,对资源的直接影响就是会造成线程数的逐步堆积。当线程数在特定资源上堆积到一定的数量之后,对该资源的新请求就会被拒绝。堆积的线程完成任务后才开始继续接收请求。

针对慢调用和异常对资源进行降级

除了对并发线程数进行控制以外,Sentinel 还可以根据响应时间和异常等不稳定因素来快速对不稳定的调用进行熔断。当依赖的资源出现响应时间过长后,所有对该资源的访问都会被直接拒绝,直到过了指定的时间窗口之后才重新渐进式地恢复。

系统自适应保护

Sentinel 同时提供系统维度的自适应保护能力。 防止雪崩,是系统防护中重要的一环。当系统负载较高的时候,如果还持续让请求进入,可能会导致系统崩溃,无法响应。在集群环境下,网络负载均衡会把本应这台机器承载的流量转发到其它的机器上去。如果这个时候其它的机器也处在一个边缘状态的时候,这个增加的流量就会导致这台机器也崩溃,最后导致整个集群不可用。
针对这个情况,Sentinel 提供了对应的保护机制,让系统的入口流量和系统的负载达到一个平衡,保证系统在能力范围之内处理最多的请求。

四、Sentinel 是如何工作的

Sentinel 的主要工作机制如下:

  • 对主流框架提供适配或者显示的 API,来定义需要保护的资源,并提供设施对资源进行实时统计和调用链路分析。
  • 根据预设的规则,结合对资源的实时统计信息,对流量进行控制。同时,Sentinel 提供开放的接口,方便您定义及改变规则。
  • Sentinel 提供实时的监控系统,方便您快速了解目前系统的状态。

五、Sentinel基于并发线程数流控

采用基于线程数的限流模式后,我们不需要再显式地去进行线程池隔离。Sentinel 会控制访问该资源的线程数,超出的请求直接拒绝,直到堆积的线程处理完成。相当于是以资源为维度, 隔离出了每一种资源对应的不同线程数。

例如,当应用所依赖的下游应用由于某种原因导致服务不稳定、响应延迟增加,对于调用者来说,意味着吞吐量下降和更多的线程数占用,极端情况下甚至导致线程池耗尽。为应对太多线程占用的情况,业内有使用隔离的方案,比如通过不同业务逻辑使用不同线程池来隔离业务自身之间的资源争抢(线程池隔离)。这种隔离方案虽然隔离性比较好,但是代价就是线程数目太多,线程上下文切换的 overhead 比较大,特别是对低延时的调用有比较大的影响。Sentinel 并发线程数限流不负责创建和管理线程池,而是简单统计当前请求上下文的线程数目,如果超出阈值,新的请求会被立即拒绝,效果类似于信号量隔离。

Sentinel原理相关推荐

  1. Hystrix和Sentinel以及Sentinel原理剖析

    目录 目录 Hystrix Hystrix介绍 Hystrix的作用 流程: 服务降级 服务熔断 Sentinel 流控规则 流量控制规则 (FlowRule) 阈值类型讲解 降级规则(熔断没有半开) ...

  2. Sentinel 原理-全解析

    系列文章 Sentinel 原理-调用链 Sentinel 原理-滑动窗口 Sentinel 原理-实体类 Sentinel 实战-限流篇 Sentinel 实战-控制台篇 Sentinel 实战-规 ...

  3. 限流降级神器-哨兵(sentinel)原理分析

    Sentinel 是阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度来帮助用户保护服务的稳定性. 大家可能会问:Se ...

  4. sentinel 阿里 原理_限流降级神器:哨兵(sentinel)原理分析

    文章较长,但是干货满满,建议收藏或关注后细读 Sentinel 是阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度来 ...

  5. Redis:哨兵模式(Sentinel)原理

    1. 前言 Redis主从复制模式不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复.Redis哨兵模式就解决了Redis主从复制模式 ...

  6. Sentinel 原理:滑动窗口

    上篇文章中,我们了解了sentinel是如何构造资源调用链的,以及每种Slot的具体作用,其中最重要的一个Slot非StatisticSlot莫属,因为他做的事是其他所有的Slot的基础.包括各种限流 ...

  7. Sentinel 原理:调用链

    我们已经知道了sentinel实现限流降级的原理,其核心就是一堆Slot组成的调用链. 这里大概的介绍下每种Slot的功能职责: NodeSelectorSlot 负责收集资源的路径,并将这些资源的调 ...

  8. Redis中的可用性保证之Sentinel 原理

    如何实现主从的自动切换?我们的思路: 创建一台监控服务器来监控所有Redis 服务节点的状态,比如,master 节点超过一定时间没有给监控服务器发送心跳报文,就把master 标记为下线,然后把某一 ...

  9. 拨开云雾见天日:剖析单机事务原理

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 江湖传说:不了解数据库事务的程序员不是一个好的DBA.阅遍网上无数关于数据库事务的文章,都感觉云里 ...

最新文章

  1. 你陪我长大 我陪你变老
  2. Nature子刊超越诺贝尔经典理论:神经科学研究路漫漫...
  3. 夏季十一款降温饮料的制作方法
  4. 一样入职的应届生工资不一样_刘涛入职阿里:为什么阿里要招聘明星?明星入职和普通人一样吗...
  5. php sql判断l列的存在,thinkphp 模块不存在:404
  6. 假如你有20万用来创业,你最想进入什么行业?
  7. Logisim新手入门实验
  8. Android TP驱动分析
  9. WPF实现选项卡效果(3)——自定义动态添加的AvalonDock选项卡内容
  10. MAC使用技巧之苹果电脑新手最容易犯的20个错误
  11. 学习学习学习学习学习学习
  12. CCS:Type region `APP_CODE_MEM' overflowed by 641240 b
  13. 谷歌浏览器(Google Chrome)清除密码等缓存记录
  14. 【MySQL】主从复制
  15. BaseRecyclerViewAdapterHelper用法抄袭
  16. MATLAB中的共轭转置与转置
  17. 飞利浦与联合利华签署2021年度战略合作备忘录;3M推出全新即时除菌擦拭布 | 美通企业日报...
  18. markdown用法总结
  19. 可自我组装、修复的机器人或梦想成真!变形金刚“汽车人”离我们越来越近?...
  20. ls命令只显示目录或文件

热门文章

  1. Javascript中,检测对象中是否存在某个属性
  2. 802.11ax分析2---OFDMA-based Hybrid Channel Access for IEEE 802.11ax WLAN
  3. Android开发问题
  4. C#调用WebAPI的HTTP服务
  5. 再谈微分算子法与拉普拉斯变换
  6. 第1讲:树莓派购买指南【子豪兄的零基础树莓派教程】
  7. java process的waitfor()阻塞问题
  8. CTF套娃一样的上传
  9. 在 Mac 上使用 Siri的方法
  10. CSS入门基础-目录