当前位置: 首页 > 后端技术 > PHP

8分钟视频看懂限流算法

时间:2023-03-29 16:04:42 PHP

视频介绍了限流算法,分析了漏桶算法和token算法的应用场景,算法原理和算法实现方法【视频点此】8分钟看懂限流算法的介绍大家好,我刚刚。本讲我们来了解一下限速算法(RateLimitingThrottling)。一、应用场景首先,我们来看一个典型的应用场景。比如在商品抢购的场景下,可能有上百万的用户请求我们的抢购接口。如果此时不采取保护措施,服务器会承受很大的处理压力,请求量大,服务器负载高,当请求超过服务器的负载限制时,系统就会崩溃,导致所有人都失败了。使用权。为了保证抢购服务的可用性,常用的方法是限制秒杀请求的流量,拦截大部分请求,只允许部分请求真正进入后台服务器,防止造成系统崩溃由大量请求造成的系统压力过大,从而保障服务的正常可用性。这里常用的限流算法有漏桶算法和令牌桶算法。2.漏桶算法我们先来看看漏桶算法(LeakyBucket)。首先,想象一个木桶。新的请求就像水滴,不断的滴进来,水滴进来的速度是不确定的,有时候会更快。有时它会更慢。同时,水桶下方有一个孔,可以以固定的速度漏水。水来得快,漏得快,桶就满了,满了水就会溢出来。相应的只是拒绝请求。漏桶算法的主要特点是可以平滑网络上的突发流量,将请求整形为稳定的流量。算法伪代码如下:C//桶总容量r//漏水速度at//上次请求时间w//当前桶中水量when(b):bt=now();wb=(bt-at)*r//已经流出的水w=max(w-wb,0)//桶中的水量减去已经流出的水量等于当前水量,最倒掉的水等于0ifw1.0):w--//有足够的token来处理请求,减少一个token的数量returntrueelse:returnfalse4.两种算法的比较最后,我们比较一下漏桶算法和令牌桶算法。其实从实现上来说,这两种算法是效果相同但方向相反的算法。漏桶算法是指请求的流入速度是不确定的,时快时慢,有突发情况;但是请求的流出速度是固定的,流入的时候会有突发情况,但是流出速度是固定的。令牌桶算法是一个固定的令牌流入速度。Token代表一个请求可以被处理的机会;当系统有一段时间空闲时,桶中有足够的令牌,可以处理突发的请求流量。是流入速度固定,流出速度不固定。总结一下特点:由于流出速度是固定的,所以可以采用漏桶算法进行整改。无论你的流入率多高,我都会以固定的速度处理。令牌桶算法的特点是支持突发事件。这两种算法在实际使用时,要根据具体场景灵活选择。限流算法介绍到此结束。我只是明智地使用它。如果解释对您有帮助,请帮忙转发。5.令牌传递算法实现PHP实现//Speedbucketsize/period$rate=$maxRequests/$period;$t_key=$keyTime($id);//上次token获取时间$a_key=$keyAllow($id);//存在的token个数//判断是否有最后一条token获取记录if($cache->exists($t_key)){$c_time=time();//计算最后一次令牌获取$time_passed=$c_time-$cache->get($t_key);$cache->set($t_key,$c_time,$ttl);//获取桶中令牌的个数$allow=$cache->get($a_key);$allow+=$time_passed*$rate;//添加从上次消费代币到现在增长的代币数量//代币数量不能超过最大数量if($allow>$maxRequests){$allow=$maxRequests;}//使用的令牌数量不能超过最大限制if($allow<$use){$cache->set($a_key,$allow,$ttl);返回0;}else{//消费令牌$cache->set($a_key,$allow-$use,$ttl);返回(int)ceil($允许);}}else{//记录当前时间作为上次处理时间,以供下次使用$cache->set($t_key,time(),$ttl);//没有token时根据最大token个数处理$cache->set($a_key,$maxRequests-$use,$ttl);return$maxRequests;}参考Tokenbucketwikihttps://en.wikipedia.org/wiki/Leaky_bucketPHPRateLimitingLibraryWithTokenBucketAlgorithmRateLimiterhttps://www.cnblogs.com/haoxinyue/p/6792309.htmlhttps://github.com/yangwenmai/ratelimithttps://blog.52itstyle.com/ar...