官方文档
主要功能
两个部分
- 核心库(Java 客户端)
- 请求埋点
- 限流触发
- 控制台(Dashboard)基于 Spring Boot 开发。
- 实时监控
- 规则配置
# sentinel 核心规则
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-core</artifactId>
<version>1.8.3</version>
</dependency>
# 客户端需要引入 Transport 模块来与 Sentinel 控制台进行通信
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-transport-simple-http</artifactId>
<version>1.8.3</version>
</dependency>
工作原理
- NodeSelectorSlot 负责收集资源的路径,并将这些资源的调用路径,以树状结构存储起来,用于根据调用路径来限流降级
- ClusterBuilderSlot 用于存储资源的统计信息以及调用者信息,例如该资源的 RT, QPS, thread count 等等,这些信息将用作为多维度限流,降级的依据
StatisticSlot 则用于记录、统计不同纬度的 runtime 指标监控信息
采用高性能的滑动窗口数据结构 LeapArray 来统计实时的秒级指标数据
FlowSlot 用于根据预设的限流规则以及前面 slot 统计的状态,来进行流量控制
- AuthoritySlot 根据配置的黑白名单和调用来源信息,来做黑白名单控制
- DegradeSlot 通过统计信息以及预设的规则,来做熔断降级
- SystemSlot 通过系统的状态,例如 load1 等,来控制总的入口流量
Sentinel 将 ProcessorSlot 作为 SPI 接口进行扩展
热点参数
Sentinel 利用 LRU 策略统计最近最常访问的热点参数,结合令牌桶算法来进行参数级别的流控。热点参数限流支持集群模式。
实时监控
簇点监控
- 获取簇点列表 http://localhost:8719/clusterNode
- 获取簇点详情 http://localhost:8719/cnode?id=xxxx
- 簇点调用者统计信息 http://localhost:8719/origin?id=xxxx
链路监控 http://localhost:8719/tree
历史资源
资源的秒级日志 日志文件${appName}-metrics.log
- 拦截的秒级日志 sentinel-block.log
- 实时查处 http://localhost:8719/metric?identity=XXX&startTime=XXXX&endTime=XXXX&maxLines=XXXX
动态规则配置
拉模式
客户端主动向某个规则管理中心定期轮询拉取规则,这个规则中心可以是 RDBMS、文件,甚至是 VCS 等。这样做的方式是简单,缺点是无法及时获取变更。
实现拉模式的数据源最简单的方式是继承 AutoRefreshDataSource 抽象类,然后实现 readSource() 方法,在该方法里从指定数据源读取字符串格式的配置数据。比如 基于文件的数据源
推模式
规则中心统一推送,客户端通过注册监听器的方式时刻监听变化,比如使用 Nacos、Zookeeper 等配置中心。这种方式有更好的实时性和一致性保证。
实现推模式的数据源最简单的方式是继承 AbstractDataSource 抽象类,在其构造方法中添加监听器,并实现 readSource() 从指定数据源读取字符串格式的配置数据。比如 基于 Nacos 的数据源。