00:00
好,下面呢,我们来看一下滑动时间窗口算法它的相关的源码,这源码呢,呃,我们分为两部分啊,一部分是对数据的统计,一部分是对统计数据它的使用。嗯,我们找到源码,我们找到这这个方法我们刚才看过了是吧?啊分析过了,那么下边。啊,你不是,呃,这个这个这个请求过来了啊,我给你这不这儿啊经过。它里边所有的是吧,经过他所有的,呃,走这一圈,然后呢,我这儿啊,你如果通过了,那么在这我就把数据给你添加上去。我们现在跟这个方法。呃,这里边儿啊,跟这个方法这里边儿。这个。是。
01:01
干嘛的呢?呃,这个实际上。是是是是增加我们这个。增加我们这个default note啊呃,里边的数据。就是。增加。当前default root和和谁有关系入口啊?增加当前入口的。Default node中的。统计数据。这个呢?这个增加的是classde里边的数据,而ster node我们大家知道它实际上是什么,你不管你是哪个compest。里边的我只是对资源。你像这个CLASS2里边统计的就是资源二的所有的请求数据。
02:06
对吧,而你看。这个一。它里边放的是什么?仅仅是CONT1里边。这个入口下的攻击,攻击的那个数据,所以这是不一样的啊,所以这个是。增加。Plaster node。中的。他是个全局的。统计数据。呃,整体对这个资源所有的访问,呃,访问数据是吧?呃在它里边都能访问到。我们跟进来,这两个跟进来都一样啊。都一样,那那哪不不一样,为什么都跟跟着代码跟他一样,这两个对象不一样吗。调调不一样啊,好。
03:00
紧接着我们看这里边有个有两个啊,这个ADD pass就增加呀,我们现在跟的是第一块内容啊,是什么对数据的统计,所以你现在请求来了,我要把这个数据给你增加上去,这怎么增加呢?增加到哪儿呢?就解决这个问题呢。那么这里边儿有两个计数器。啊,这是我们两个叫滑动计数器。啊,一个是以秒为单位,因为E是以分为单位的。嗯,为。滑动。计数器。滑动接收器增加。呃,本次。访问啊。数据。数据数据吧,那现在我们要先看一下它是个什么东西啊。打开。
04:00
这是个什么?这是个array magic。呃,注意啊,我们要想跟这个源码,现在有这么几个。Li shall not。要要搞明白,搞清楚。呃,首先第一个就是这这是一个什么东西。啊,这是一个。用数组。呃,存放我们。统计数据的。这样一个计量器,Metric计量器是吧。嗯。一个。定义。嗯,两一个使用数组。保存。数据的。计量器。那么这个计量器啊,它是以以秒为单位的,这个计量器是以分为单位的是吧,然后呢,我们看这个计量器这。
05:02
有sample count,这这是什么啊,这是什么,嗯。我们大家给大家写一下啊。这个啊。他。是是我们样本。CH。数量。是几是二?要么成果数量啊。默认值为二。这个inter是什么东西呢?Interval。这是个时间间隔呀。
06:00
是我们的时间窗。长度。默认值是多少?这个。1000毫秒。是不是1000毫秒默认值1000毫秒啊。1000。1000毫秒。梦只是1000毫秒。那这两个值,现在我们先先先知道它的,它的默认值是什么了啊下面呢,嗯。你看他这他这写的这句话啊,它是保存了我们的统计数据,什么统计数据呢?最近的这个时间间隔,它是以秒为单位的啊,最近的时间间隔中的统计数据啊,这个间隔被。啊,被分割成了呃很多时间呃区间。
07:04
就我们的,呃,样本窗口。呃,多少?BY这么多。被分成了这么多个。那那默认就是两个,实际上这个东西就相当于我们的。这里边儿这个。四相当于这个四啊。那现在我们需要看一下他这是个什么东西。Or啊,呃,一个基本的统计类是在里边基本的统计类,呃,使用了一个lery internal。我们也没看懂什么意思,其实啊,大家注意它,它不是一个用数组要存放统计数据的类吗?刚才不是说了吗?啊。
08:01
这是一个使用数组保存数据的。计量。计量器,计量器来是吧,那数组是谁?数组就是他。数组就是它。就就就是我们计量数据啊,我们计量那个数据对吧?呃。数据。就保存在。嗯,这个贝塔中。这个data啊,它是什么类型,Li RA数组类型的是吧?Li RA,那那这个这还有个magic bucket,那这个是不是这个数组元素的类型啊。可不是。可不是啊,但它它是什么呢?我们一会儿说,但你记着这儿有一个。这个magic bucket这个类型。
09:01
那现在我们看一下啊,其实大家注意啊,我们我们这里边啊,可以再看一下它里边方法。这里边有很多方法啊,像pass啊,啊什么mean啊,RT是吧啊,像这个max success success里边多方。包括这这。就是他可以获取到我们的统计数据,也可以修改我们的统计数据。就这个。Or?然后我们现在看一下这个leapry这个数组到底是个什么东西,Leap。我发现啊。呃,我们发现。你看啊,这是一个基本的数据结构啊,这是统计计量internal internal不是统计计量中的基本的数据结构是吧,他说这个Li瑞啊。
10:04
使用了啊,滑动窗口算法去去去去统计数据。每个每个桶。啊,他。跨越了这样一个时间范围。也就是说这个东西。那就是他呀,是什么我们的。痛。是我们的或者说样本窗口。长度。这是我们样本窗口长度,那这个里边就相当于这个25T。啊,一小格一小格一小格的啊。啊,并且啊,总的时间。呃,跨度是多少是他。也就是说这个东西是什么。这个东西。我们的。
11:01
时间窗长度。那在这里边就相当于我们就100T,相当于就100T啊。所以总的bucket数量是总的bucket数量是指的什么?是一个。时间窗中总的8K的数量,而用它除以它。那那这这个呃。这个比如就我们刚才那个100T,这个是25T可以除,是不是就是四,这个东西是不是就是四啊,它是这样算出来的啊,就这样算出来,所以这个三。就是sample sample。样本吧,样本的数列。一个。嗯,时间窗。包含的时间。
12:00
啊。数量包含的时间创数量对吧。嗯,然后啊,这俩啊是一个意思,只不过单位不一样,这毫秒这是秒啊,你不用说了。这样说了,他不是受阻吗?这受阻在哪呢?速度。这数组。在这个数组,数组又跑到这儿了啊。那么这个数组。嗯,这个数组。这这个这个这个数组,它里边有个泛型叫window。这是什么?你注意啊,我们现在数组在哪出现了啊,在这儿。为什么说这是leap array这个速度?有多少元素,青春元素?这就是那个元素啊。那现在每个元素是什么类型?
13:04
每个元素是window rap就是一个时间,这是我们的样本窗口啊,这个是样本窗口,所以呃。呃,生。这是一个。数组。呃,元素为。Window。Rap。啊。呃,样本插孔。啊,Window窗口啊,那这里边注意这个T是什么,就是这个T啊,这个T是谁,就我们刚才说的让大家注意的这个这个。Magic bucket。注意。这里的。行。T。
14:00
嗯,实际为。是不是magic bucket?类型。是吧,就这个T啊,就这个类型的,那现在我们先不管这个T啊,我们现在先看一下谁这个window,看一下window rap啊。刚才说这样窗口啊。样本窗口啊,实例吧,啊,就是样本窗口实例,那这个泛型T。是不是magic?也就是说我们这一个window rap啊,就相当于我们这里边儿这一格。这一格。明白吧,一格就一个window rap就一个样本窗口,就它啊,然后我们看这里边这什么,这这这个。
15:03
这不是时间长度,一个单一个单窗口的时间长度啊,一个单窗口的时间长度单位是毫秒,那这就是我们。呃,叫什么来着,呃,一样的窗口。长度。这个呢,每一个样本窗口啊,都有一个起始时间,你像他像他吧,这个样本窗口的起始时间就是它。是吧,呃,这个样本窗口的起始时间就是它。所以它每个都有一个起始时间。金十间充对吧。嗯,然后这个呢,一个样本窗口里边有他的统计数据。
16:00
当前。一样。窗口中的。统计数据,这你你你说你分成一个一个窗口是干嘛的,用于统计数据的,你统计的数据放到哪,放到value里边,而这个类型是什么。其类型。是不是这个magic。对吧,是这样一个类型的啊,这样一个类型,那那那那现在我们就知道了啊,我们就知道了啊,有个数组,数组里边元素是这个样本窗口window rap,而每个window rap里边它它有这样的一些属性。是吧,啊,同时有它的统计数据。Value啊,这个value是magic bucket这个类型,那我们现在就需要看一下magic bucket。
17:03
我们看一下magic。它里边放统计数据啊。呃。统计数据的。呃,封封装类是吧,它都封装了什么数据,这有最小的RT来想象时间,这还有个什么计数器,一统计数据就放在这儿了。去呗。嗯。统计的。数据存放。在。这里。这是个什么东西?这是个什么东西,这是个呃,加法器是吧,它指挥家啊,他自己封装的这样一个东西,但是你这个数据不就统计个数。啊,你来了一个加一个,来一个加一个不就行了吗?为什么要放在一个数组啊。
18:00
放数组是干嘛的?注意啊,它里边统计的数据维度很多。不光一个维度。这里要统计的数据。维度的。这些。维度。呃,维度啊。这些维度。呃。宁强。维度类型。呃,在。Magic。Event。嗯。这是个枚举啊,枚举中。就这个magic。你看我我拿这个枚举啊类型数据作为下标是吧,我让他做下标往里边放数据,放你统计的数据,那这个它里边放了什么东西。
19:05
你看。这是他统计的维度。数据。统计的维度。维度有什么维度是吧,你通过我统计一下通过的请求有多少。是吧,然后被限流的请求有多少,发生异常的请求啊有多少,然后成功的请求有多少,然后这个这个响应时间是什么样的啊,然后这也是一个通过的请求啊,也是一个特殊的通过的请求。诶在他就这这些维度我都统计。而每一个123456这六项。将来。在这个数组里边。在这个数组里边,这个数组实际上这个数组的长度是几就是六。就是你当天这个窗口,我统计当前。
20:05
当前这个窗口,我就统计当前这个窗口里边,哎,通过了几个请求,对吧?呃,发生异常的几个请求啊,你要想想时间是多少,什么时候这些数据我都存放到哪,让他这个数组里边。成为这个数字面,所以它是什么多维度统一的数据。呃,我们这些重要的类啊,大家需要先了解一下,然后我们才能。来读这个代码逻辑啊。
我来说两句