分布式系统并发请求限流平台Sentinel功能特性调研-原理分析总结(下篇)

摘 要

随着近些年系统稳定性要求越来越高,而系统限流则是其中提高系统稳定性的手段之一,而在众多限流平台中Sentinel凭着丰富功能特性和多次阿里双十一的线上实践,成为最热门限流平台之一,本文就Sentinel相关特性进行分析并测试并对底层原理进行分析,为后续相关系统建设积累经验。

关 键 词:

限流;熔断;自适应保护;Sentinel;流量控制

4.流量控制原理分析

见图40,在Sentienl中主要通过责任链模式,把不同slot按照顺序关联在一起,来形成不同的功能(限流、降级、系统保护),而这些slot可以分为统计数据部分和判断部分构成

分布式系统并发请求限流平台Sentinel功能特性调研-原理分析总结(下篇)_第1张图片

​ 图40 Sentinel流量控制原理图

4.1 统计数据核心算法分析

见图41,统计数据构建部分主要由NodeSelectorSlot、ClusterBuilderSlot、StatisticSlot组成,而其中最核心的是采用了时间窗口算法来统计关键信息,下面就时间窗口算法,先进行简单介绍,如下图把1000ms分成了5个窗口,每个窗口的长度就是1000ms/5=200ms,把这5个时间窗口存放在数组中,那么数组长度就为5

分布式系统并发请求限流平台Sentinel功能特性调研-原理分析总结(下篇)_第2张图片

​ 图41 时间窗口统计算法示例,sampleCount代表窗口数量

见图42,假设当前时间是910ms,正好有请求进来,需要获取当前窗口,并进行相关指标的计算,那么获取当前窗户的算法应为****当前时间/窗口长度%数组长度=910/200%5=4,那么当前窗口应为801-1000的窗口,因为数组索引是从0开始的

分布式系统并发请求限流平台Sentinel功能特性调研-原理分析总结(下篇)_第3张图片

​ 图42 时间为910ms,查找归属窗口示例,公式为:当前时间/窗口长度%数组长度

见图43,如果当前时间是1010,那么就会进行窗口滑动创建一个新窗口,并删除最早的窗口,始终保持总时间窗口时间为1000ms,长度为5

分布式系统并发请求限流平台Sentinel功能特性调研-原理分析总结(下篇)_第4张图片

图43 时间窗口滑动示意

见图44,具体时间窗口的实现可以查看Sentinel的LeapArray类,以下是部分核心代码截图,表示构造窗口大小和窗口长度

分布式系统并发请求限流平台Sentinel功能特性调研-原理分析总结(下篇)_第5张图片

​ 图44 Sentinel的LeapArray类核心代码

见图45,计算指定时间在时间窗口的索引

分布式系统并发请求限流平台Sentinel功能特性调研-原理分析总结(下篇)_第6张图片

​ 图45 Sentinel中计算时间窗口索引代码

4.2 限流判断分析

有了数据统计,限流判断就很容易了,在Sentinel限流判断有AuthoritySlot(来源访问)、SystemSlot(系统自适应保护)、FlowSlot(流量控制)、DegradeSlot(熔断降级)、ParamFlowSlot(参数限流)组成,这些名称也分别对应着限流控制台的菜单,下面以最常用的FlowSlot进行分析,见图46,entry方法是每个slot的入口方法,在FlowSlot中可以看到进入之后首先调用checkFlow方法,此方法为核心判断方法如果qps大于设置的阈值则进行限流

分布式系统并发请求限流平台Sentinel功能特性调研-原理分析总结(下篇)_第7张图片 图46 限流入口方法entry

见图47,checkFlow方法由FlowRuleChecker类提供,最终会调用到TrafficShapingController接口的canPass方法来进行判断,TrafficShapingController接口有三种实现,其中默认的实现类DefaultController就是基于qps限流判断,以下是qps核心判断方法,首先获取当前时间窗口qps+请求qps如果大于设置qps,则返回false,而在chekFlow方法会判断返回结果,如果为false,则抛出限流异常

分布式系统并发请求限流平台Sentinel功能特性调研-原理分析总结(下篇)_第8张图片 图47(a) 流量控制核心方法分布式系统并发请求限流平台Sentinel功能特性调研-原理分析总结(下篇)_第9张图片 图47(b) 流量控制核心方法

见图48,slot还支持spi扩展,用户通过对指定slot进行扩展来满足个性化需求

分布式系统并发请求限流平台Sentinel功能特性调研-原理分析总结(下篇)_第10张图片 图48 Sentinel slot扩展示意图

5.总结与展望

5.1 总结

通过本次对Sentinel基础功能和原理方面调研分析测试,总结如下优缺点

5.1.1 优点

  1. Sentinel在众多限流平台之间具有明显优势,如功能特性丰富程度、社区活跃状态都优于其他限流平台

  2. 基本功能丰富成熟度高,本次就Sentinel最常用的核心功能进行了单节点和多节点的测试时,结果都符合预期

  3. 架构简单轻量易上手,Sentinel自身不依赖第三方中间件,同时官方有很详细的文档的集成文档,企业在集成Sentinel时相对容易上手

5.1.2 缺点

  1. 限流规则存储会丢失,Sentinel默认限流规则存储是采用基于内存的方式,如果应用系统发生重启,限流规则就会丢失

  2. 应用系统信息上报体验较差,系统应用信息上报控制台,需要请求一次接口后再进行上报,如果不请求,那么在控制台无法查看应用系统信息,从而导致无法配置限流规则

5.2 展望

建议Sentinel在限流规则存储方面有默认持久化实现,同时在应用信息上报层面有所优化,如在系统启动时,初始化系统上报线程,进行信息上报

链接

分布式系统并发请求限流平台Sentinel功能特性调研-集成测试(中篇

作者公众号

分布式系统并发请求限流平台Sentinel功能特性调研-原理分析总结(下篇)_第11张图片

你可能感兴趣的:(sentinel,限流,java,限流,sentinel,源码分析,熔断)