官方文档


Sentinel官网
Sentinel Github

主要功能


Sentinel-Feature.png
两个部分

  • 核心库(Java 客户端)
    • 请求埋点
    • 限流触发
  • 控制台(Dashboard)基于 Spring Boot 开发。
    • 实时监控
    • 规则配置
      1. # sentinel 核心规则
      2. <dependency>
      3. <groupId>com.alibaba.csp</groupId>
      4. <artifactId>sentinel-core</artifactId>
      5. <version>1.8.3</version>
      6. </dependency>
      7. # 客户端需要引入 Transport 模块来与 Sentinel 控制台进行通信
      8. <dependency>
      9. <groupId>com.alibaba.csp</groupId>
      10. <artifactId>sentinel-transport-simple-http</artifactId>
      11. <version>1.8.3</version>
      12. </dependency>

      工作原理


sentinel-slot-chain-architecture.png

  • NodeSelectorSlot 负责收集资源的路径,并将这些资源的调用路径,以树状结构存储起来,用于根据调用路径来限流降级
  • ClusterBuilderSlot 用于存储资源的统计信息以及调用者信息,例如该资源的 RT, QPS, thread count 等等,这些信息将用作为多维度限流,降级的依据
  • StatisticSlot 则用于记录、统计不同纬度的 runtime 指标监控信息

    采用高性能的滑动窗口数据结构 LeapArray 来统计实时的秒级指标数据

  • FlowSlot 用于根据预设的限流规则以及前面 slot 统计的状态,来进行流量控制

  • AuthoritySlot 根据配置的黑白名单和调用来源信息,来做黑白名单控制
  • DegradeSlot 通过统计信息以及预设的规则,来做熔断降级
  • SystemSlot 通过系统的状态,例如 load1 等,来控制总的入口流量

Sentinel 将 ProcessorSlot 作为 SPI 接口进行扩展

热点参数


Sentinel 利用 LRU 策略统计最近最常访问的热点参数,结合令牌桶算法来进行参数级别的流控。热点参数限流支持集群模式。
Sentinel 参考文档 - 图3

实时监控


簇点监控


Sentinel 参考文档 - 图4

拉模式

客户端主动向某个规则管理中心定期轮询拉取规则,这个规则中心可以是 RDBMS、文件,甚至是 VCS 等。这样做的方式是简单,缺点是无法及时获取变更。
实现拉模式的数据源最简单的方式是继承 AutoRefreshDataSource 抽象类,然后实现 readSource() 方法,在该方法里从指定数据源读取字符串格式的配置数据。比如 基于文件的数据源

推模式

规则中心统一推送,客户端通过注册监听器的方式时刻监听变化,比如使用 Nacos、Zookeeper 等配置中心。这种方式有更好的实时性和一致性保证。
实现推模式的数据源最简单的方式是继承 AbstractDataSource 抽象类,在其构造方法中添加监听器,并实现 readSource() 从指定数据源读取字符串格式的配置数据。比如 基于 Nacos 的数据源

框架对比


image.png