一、Sentinel(哨兵)简介
1、Sentinel的功能及特点
1.Sentinel的功能
2.Sentinel的特点
2、Sentinel的组成
核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 8 及以上的运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。核心库不依赖控制台。
控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。提供了机器自发现、簇点链路自发现、监控、规则配置等功能。
3、Sentinel的内部结构及工作流程
1.内部核心类
1.Entry
每一次资源调用都会创建一个 Entry,包含了资源名、curNode(当前统计节点)、originNode(来源统计节点)等信息。
2.Context
Context是对资源操作的上下文,每个资源操作必须属于一个Context。如果代码中没有指定Context,则会创建一个name为sentinel_default_context的默认Context。一个Context生命周期中可以包含多个
3.Node
用于完成数据统计的接口
1、StatisticNode:统计节点,是Node接口的实现类,用于完成数据统计.
2、EntranceNode:入口节点,一个Context会有一个入口节点,用于统计当前Context的总体流量数据.
3、DefaultNode:默认节点,用于统计一个资源在当前Context中的流量数据.
4、ClusterNode:集群节点,用于统计一个资源在所有Context中的总体流量数据.
4.Slot
Slot中主要定义sentinel的功能,sentinel中默认提供了以下Slot
1、NodeSelectorSlot
负责收集资源的路径,并将这些资源的调用路径,以树状结构存储起来,用于根据调用路径来限流降。
2、ClusterBuilderSlot
用于存储资源的统计信息以及调用者信息,例如该资源的 RT, QPS, thread count,Block count,Exception count 等等,这些信息将用作为多维度限流,降级的依据。简单来说,就是用于构建ClusterNode。
3、StatisticSlot
用于记录、统计不同纬度的 runtime 指标监控信息。
4、ParamFlowSlot
对应控制台的:热点流控
5、FlowSlot
用于根据预设的限流规则以及前面 slot 统计的状态,来进行流量控制。对应控制台的:流控规则
6、AuthoritySlot
根据配置的黑白名单和调用来源信息,来做黑白名单控制。对应控制台的:授权规则
7、DegradeSlot
通过统计信息以及预设的规则,来做熔断降级。对应控制台的:降级规则
8、SystemSlot
通过系统的状态,例如 load1 等,来控制总的入口流量。对应控制台:系统规则
5.ProcessSlotChain
Sentinel 的核心骨架,将不同的 Slot 按照顺序串在一起(责任链模式),从而将不同的功能(限流、降级、系统保护)组合在一起。
2.Sentinel设计和工作流程
Sentinel的核心骨架是 ProcessorSlotChain。 系统会为每个资源创建一套链路处理,将不同的 Slot(处理节点) 用责任链模式,将不同的功能组合在一起(限流、降级、系统保护)。
二、Sentinel(哨兵)使用
1、超时
2、熔断
3、限流
4、降级