导读 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等公共资源,往往使用全局的限流更能准确的保护资源,更能应对倾斜型流量。而对于单机限流往往性能更好,但是由于只能统计本节点的访问情况,往往只能反应自身的节点的流量状态。