00:00
Hello,同学们,接下来呢,给大家简单讲一讲这个令牌总算法,呃,我再给大家准备课程的时候,在网上也翻阅了一些资料,有很多的这个文章其实写的是不对的,呃,恩,杰克斯的这种限速的或者叫限流的方法啊,这是基于漏统算法实现的。呃,如果你把前面我给大家讲的这个呃,它这个实现的原理和配置你看明白了之后呢,接下来再讲这个令牌统算法,嗯,你再理解起来就会简单的多。并排桶算法最大的区别和漏筒算法在于速度限制的,这个呃这个这个呃指标上啊,这个漏桶算法它是以流出速率为限制的,也就是你消费的速度是严格限制。啊,把这个所有的接入的请求,这些流量,我作为我我作为这个这个数据,然后接下来给你去整形,然后做队列,然后以及一些溢出直接快速失败这些请球,那么令牌桶呢,和它的最大的区别就在于同样也是一个桶。
01:04
那么这个桶啊,它是以分发令牌的形式往里边去。当然在这这个官方,它是没有实现令牌送的啊。比如说我同样也是这个,呃,限制速率是五啊,或者是并发量是五,那么这呢,我会生成出来五个牌子,那么每一个用户来了之后。到我的这个系统上,他会去申请,有一个申请的操作。他申请的是这个牌子,这个令牌。当他拿到令牌之后。才能继续进行。下一步。那么刚开始的时候,我们也每秒啊,可以配置啊,我以每秒生成五个令牌在这儿。放在桶里,这个桶里装的就不是跟刚才就不一样了,刚才这个桶是作为缓冲区,那这个桶呢,装的就是牌子。
02:00
用户或者请求来了之后,去桶里申请一个牌子过来,比如说每次请求需要一个牌子,他拿着这个牌子再去进行下一步,那么再有一个人来。再去申请另外一个牌子拿走。对吧,那此时呢,我的桶里就只剩三个拍子了,那并发量一旦要大了,我桶里就没有拍子了,那么我会以系统会以固定速率去往桶里放牌子。啊,它有放牌子的这个动作,这是和呃,这个漏斗或者叫漏桶算法最大的区别,那么这个实现起来或者我们看起来好像区别不大。每个人拿走一个对吧,你每秒放五个。对吧,这是呃,五个每秒。跟刚才咱们这个配置好像很像,对吗?所以这也就是很多人误解,误认为这就是这个令牌总算法,其实不是。在令牌桶算法里,它有更灵活的这种,呃,这种这个这个配置或者使用,那既然这是五个牌子,那我就可以让他多拿走几个。
03:09
第一个人他可以拿走四个牌子,然后在下边儿呢,去处理请求的时候也可以更灵活,他针对于牌子这个令牌来区分对待不同的这个用户,比如说我们在做一些这个呃,速度限制的时候,比如带宽啊,举个例子,每一个牌子呢,在我的这个呃。这个这个这个真正处理的时候啊,它等于呃。100兆的带宽。你拿走一个牌子,然后在这儿去使用的时候,消费的时候,就代表我以100兆的速率速度帮你去处理这个,呃,当前你的这你的这个任务,他如果拿了两个牌子来,我就会给你200兆的速度。这叫令牌啊,前面这个。呃,这种漏漏桶算法,它只是呃输出的速度,呃做了限制,令牌桶呢,是放牌子的速度来做限制,我每秒只放五个,那么你在单位时间内一秒,如果同里空了,那么接下来的用户呢,就只能进入等待状态了。
04:16
等着啥时候有牌子对吧?一是让他等待,第二就是让他快速失败,既然这里没牌子,我去别人家看看啊,看别人家有没有牌子,这是最大的区别啊,所以一定要分清楚啊,咱们这个NG个词,在这个限速的模块里,Limit I EQ zone这里边儿是什么桶。啊,这是。啊,什么图啊,大家大家思考一下,这是。漏筒啊,它只是这个限制的这个口的大小,我们脑脑补一个画面,嗯,我们现在有一个桶,这个桶的下边有个洞,这个洞每秒只能留出这么多啊,这就是完整的这套算法和这个呃,我们现在这个实现就完美匹配了。然而。
05:00
真正的这个令牌桶,它是要往里放牌子的,以每一个token,每一个令牌为单位啊去消费啊,拿的越多,给的越多,拿的越少,给的越少。啊,你可也可以允许用户多拿几个,但是这个令牌桶在我们现在这个呃,限制用户请求的这个呃,需求上很明显它是不合适的,因为单位之间一个用户只想请求一次嘛,对吧,一个请求也只能完成一次。那么什么时候有必要用这个令牌总算法呢?就像刚才说的,比如说用户请求打进来了,不同的用户给你不同的速度啊,比如说我们在限速,或者叫这不叫限速了,限制带宽的时候,其实我们就可以用这个令牌统算法用户接进来啊,不针对于不同的用户,你比如说我们用百度网盘。同样下载一个文件,你如果是会员的话,你可能能拉满速度对吧,有30兆40兆这种下载速度,如果不是会员的话呢,就几百K,这很明显在这里边针对了不同的这个用户有的区分的对待,但是申请的资源呢,又是一个,那么在这呢,就可以以这个令牌的方式,我们去,呃,这个给他赋予这个,呃,接下来给他这个资源啊。
06:09
那么呃,接下来呢,给大家来讲的就是,嗯,咱们用NG怎么去通过令牌桶去限制网络带宽的使用啊。
我来说两句