【GHS】Sentinel的滑 动 窗口算 法

编程开发   © 文章版权由 admin 解释,禁止匿名转载

#楼主# 2020-12-30


在前面搞清楚了Sentinel的使用后,大致理了一下Sentinel的责任链,搞清楚了这个,基本就已经梳理清楚sentinel-core模块的大部分内容,顺着这条链路可以继续梳理很多东西。

知其然、知其所以然。而阅读源码就是最好的知其所以然的方式。这一次找了一些空闲时间,捋了一下它的滑动窗口算法,在这里做一个记录。后面会继续去梳理它的令牌算法和漏桶算法。

关于滑动窗口的原理,Sentinel为什么要使用滑动窗口,Sentinel是怎样使用的滑动,直接使用下面这两张图。一图胜千言,一张好的图足以说明问题,在这里我引用两张图。


Sentinel滑动窗口原理
Sentinel滑动窗口

图片说明:第一张图为Sentinel github上的图片,因为有时加载不出来,所以拷贝出来了。图二为一张微信公众号的图片,具体公众号见水印。这里引用只是为了学习使用,但是还是注明一下来源。

首先从StatisticSlot类开始,它是Sentinel统计的核心功能槽,先看它的entry[^对这个方法做了一下精简,只保留了几行能够说明问题的代码。]方法:

@SpiOrder(-7000)
public class StatisticSlot extends AbstractLinkedProcessorSlot {

@Override
public void entry(Context context, ResourceWrapper resourceWrapper, DefaultNode node, int count,
boolean prioritized, Object... args) throws Throwable {
try {
// 先执行后续限流、降级等功能
fireEntry(context, resourceWrapper, node, count, prioritized, args);

// 上面执行通过,更新通过请求数据
node.addPassRequest(count);

} catch (PriorityWaitExcepti

成为第一个回答人

评论

登录后才可发表内容
  • 主题

    15

  • 帖子

    15

  • 关注者

    0

Copyright © 2019 凯特网.   Powered by HYBBS 2.3.4  

Runtime:1.8494s Mem:2058Kb