【AI】【源代码阅读】sentinel实现原理

94 阅读2分钟

导读 by 『AI』

⏺ Alibaba Sentinel是一个流量控制和熔断降级框架,核心实现原理和组件功能如下:

核心实现原理

  • 责任链模式:通过ProcessorSlot责任链处理请求,每个slot负责特定功能
  • 滑动窗口算法:统计QPS、响应时间等指标
  • 令牌桶/漏桶算法:实现流量控制

核心组件功能

Entry/Context

  • Entry:资源访问的入口点,管理调用链路
  • Context:上下文信息,维护调用关系

ProcessorSlot链路

  • NodeSelectorSlot:构建调用链路树
  • ClusterBuilderSlot:构建资源的ClusterNode
  • StatisticSlot:统计实时指标数据
  • FlowSlot:流量控制检查
  • DegradeSlot:熔断降级检查
  • SystemSlot:系统保护检查

指标统计

  • MetricBucket:时间窗口内的指标桶
  • ArrayMetric:基于滑动窗口的指标统计
  • StatisticNode:节点统计信息

规则管理

  • FlowRule:流控规则
  • DegradeRule:降级规则
  • SystemRule:系统规则
  • 支持动态配置和热更新

通过这些组件协作,Sentinel实现了高性能的流量防护和系统稳定性保障。

【源代码阅读】

TODO

【附录】

顺便的我们可以总结不同的限流方式针对不同的场景

总结与选择

算法原理优点缺点适用场景
​固定窗口​固定时间窗口内计数简单高效临界问题,不够平滑简单场景,对精度要求不高
​滑动窗口​细分窗口,统计滚动区间精度高,解决临界问题耗内存,实现稍复杂API网关,精确限流
​漏桶​以恒定速率处理请求输出流量绝对平滑无法处理突发流量保护下游系统,流量整形
​令牌桶​定期放令牌,请求消耗令牌允许突发,限制平均速率实现相对复杂大部分网络限流,如秒杀、抢购

令牌桶和漏铜可以分别对应于限qps和限并发; 而分布式的限流和单机限流使用的场景又有所不同,分布式限流更多的应用于限制整体的流量,例如如果瓶颈在于db等公共资源,往往使用全局的限流更能准确的保护资源,更能应对倾斜型流量。而对于单机限流往往性能更好,但是由于只能统计本节点的访问情况,往往只能反应自身的节点的流量状态。