一、Sentinel 基本概念
资源
资源是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容,例如,由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是一段代码。
只要通过 Sentinel API 定义的代码,就是资源,能够被 Sentinel 保护起来。大部分情况下,可以使用方法签名,URL,甚至服务名称作为资源名来标示资源。
规则
围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。
二、限流、降级和熔断区别和联系
限流,是从系统的流量入口考虑,从进入的流量上进行限制,达到保护系统的作用;
降级,是从系统内部的平级服务或者业务的维度考虑,流量大了,可以干掉一些,保护其他正常使用;
熔断,强调的是服务之间的调用能实现自我恢复的状态;
熔断是降级方式的一种;
降级又是限流的一种方式;
三者都是为了通过一定的方式去保护流量过大时,保护系统的手段。
三、Sentinel 工作主流程
在 Sentinel 里面,所有的资源都对应一个资源名称以及一个 Entry。Entry 可以通过对主流框架的适配自动创建,也可以通过注解的方式或调用 API 显式创建;每一个 Entry 创建的时候,同时也会创建一系列功能插槽(slot chain)。这些插槽有不同的职责,例如:
NodeSelectorSlot负责收集资源的路径,并将这些资源的调用路径,以树状结构存储起来,用于根据调用路径来限流降级;ClusterBuilderSlot则用于存储资源的统计信息以及调用者信息,例如该资源的 RT, QPS, thread count 等等,这些信息将用作为多维度限流,降级的依据;StatisticSlot则用于记录、统计不同纬度的 runtime 指标监控信息;FlowSlot则用于根据预设的限流规则以及前面 slot 统计的状态,来进行流量控制;AuthoritySlot则根据配置的黑白名单和调用来源信息,来做黑白名单控制;DegradeSlot则通过统计信息以及预设的规则,来做熔断降级;SystemSlot则通过系统的状态,例如 load1 等,来控制总的入口流量;


Node:用于完成数据统计的接口
四、Sentinel和hystrix区别联系
|
功能 |
Sentinel |
Hystrix |
|
隔离策略 |
信号量隔离(并发线程数限流) |
线程池隔离/信号量隔离 |
|
熔断降级策略 |
基于响应时间、异常比率、异常数 |
基于异常比率 |
|
实时统计实现 |
滑动窗口(LeapArray) |
滑动窗口(基于 RxJava) |
|
动态规则配置 |
支持多种数据源 |
支持多种数据源 |
|
扩展性 |
多个扩展点 |
插件的形式 |
|
基于注解的支持 |
支持 |
支持 |
|
限流 |
基于 QPS,支持基于调用关系的限流 |
有限的支持 |
|
流量整形 |
支持预热模式、匀速器模式、预热排队模式(流量规则处可配置) |
不支持 |
|
系统自适应保护 |
支持 |
不支持 |
|
控制台 |
提供开箱即用的控制台,可配置规则、查看秒级监控、机器发现等 |
简单的监控查看 |
本文介绍了Sentinel的核心概念,如资源与规则,区分限流、降级和熔断的关系,以及其工作流程。重点讲解了Sentinel如何通过Node、Slotchain和功能节点实现流量管理与系统保护,以及它与Hystrix的区别。
85万+

被折叠的 条评论
为什么被折叠?



