从官方了解到 Sentienl 系统自适应限流是一个全局的概念,对应用入口流量统一进行统一控制,结合应用的机器负载、CPU 使用率,总体平均响应时间、入口 QPS 和并发线程数等几个维度的监控指标从而决定是否调用进行限流操作。为了有一个直观的感受,我们可以从官方的运维平台看看其系统自适应限流的操作界面:
RT、线程数、入口QPS这三个指标是可以通过采集调用信息进行统计计算的,那系统LOAD、CPU使用率是如何获取的呢?大家可以带着这个问题进入本文的学习中来。
在详细分析系统自适应实现原理之前我们先来思考一下 Sentinel 引入该机制的目的。
官方文档针对这个问题有过仔细阐述,我们先来看看官方文档对其阐述。
引入系统自适应限流的主要的目的有如下两个:
-
保证系统不被拖垮
-
在系统稳定的前提下保证系统的吞吐量。
目前我们接触的限流的防护思路都是设定一个指标(阔值),例如系统的负载 load 超过某个阔值后就阻止或减少流量的继续进入,当系统负载降低到某一水平后则恢复流量的进入。通常都是被动的,其实际效果取决与阔值设置是否合理,但往往设置合理不是一件容易的事情。
那 Sentinel 提供的系统自适应是可以将设定的规则作为一个保护因子,而允许通过的流量由处理请求的能力来决定,即根据请求的响应时间、当前系统正在处理的请求速率来决定。
那 Sentinel 是如何实现的呢?接下来用源码的手段来揭晓其实现原理。