官网
https://sentinelguard.io/zh-cn/
Sentinel是什么
- 熔断器,对标Hystrix
- 以流量为切入点,使用限流,降级,熔断等手段保护服务稳定性
特点
- 生态兼容
- 支持多种服务类型,如spring cloud,dubbo,gRPC,Service Mesh
- 支持多种配置中心,如zk,Nacos,Apollo
- 完善的SPI扩展机制
- 功能丰富,无需部署多种中间件,如Hystrix
- 丰富的处理手段
- 动态的配置
- 实时监控
- 前端界面
概念和机制
资源
- 它可以是 Java 应用程序中的任何内容。
- 可以使用方法签名,URL,甚至服务名称作为资源名来标示资源。
- 只要通过 Sentinel API 定义的代码,就是资源,能够被 Sentinel 保护起来。
规则
- 围绕资源的实时状态设定的规则
- 所有规则可以动态实时调整
流量控制
- 资源的调用关系,例如资源的调用链路,资源和资源之间的关系;
- 运行指标,例如 QPS、线程池、系统负载等
- 控制的效果,例如直接限流、冷启动、排队等
熔断降级
- 熔断:在一个时间窗口中服务快速失败,过了时间窗口再自动打开
- 与Hystrix原则一致
- 当调用链路中某个资源出现不稳定,例如,表现为 timeout,异常比例升高的时候,
- 则对这个资源的调用进行限制,并让请求快速失败,避免影响到其它的资源,最终产生雪崩的效果
- 但处理方式不同
- Hystrix 通过线程池的方式隔离资源,但是增加了成本
- Sentinel
系统负载保护
- 目标:在系统能力范围内,处理最多的请求。防止请求堆积造成系统崩溃。
主要工作机制
- 对主流框架提供适配或者显示的 API,来定义需要保护的资源,并提供设施对资源进行实时统计和调用链路分析。
- 根据预设的规则,结合对资源的实时统计信息,对流量进行控制。同时,Sentinel 提供开放的接口,方便您定义及改变规则。
- Sentinel 提供实时的监控系统,方便您快速了解目前系统的状态。
功能
原理
在 Sentinel 里面,所有的资源都对应一个资源名称以及一个 Entry。Entry 可以通过对主流框架的适配自动创建,也可以通过注解的方式或调用 API 显式创建;每一个 Entry 创建的时候,同时也会创建一系列功能插槽(slot chain)。这些插槽有不同的职责,例如:
- NodeSelectorSlot 负责收集资源的路径,并将这些资源的调用路径,以树状结构存储起来,用于根据调用路径来限流降级;
- ClusterBuilderSlot 则用于存储资源的统计信息以及调用者信息,例如该资源的 RT, QPS, thread count 等等,这些信息将用作为多维度限流,降级的依据;
- StatisticSlot 则用于记录、统计不同纬度的 runtime 指标监控信息;
- FlowSlot 则用于根据预设的限流规则以及前面 slot 统计的状态,来进行流量控制;
- AuthoritySlot 则根据配置的黑白名单和调用来源信息,来做黑白名单控制;
- DegradeSlot 则通过统计信息以及预设的规则,来做熔断降级;
- SystemSlot 则通过系统的状态,例如 load1 等,来控制总的入口流量;
|