限流算法
计数器(固定窗口)算法:
系统的每次请求被计数,通过比较当前请求数的总和与阈值的大小来判断是否进行限流
滑动窗口算法:
基于一个固定大小的时间窗口,允许在该时间窗口内的请求数不超过设定的阈值,这个时间窗口随着时间的推移不断的滑动,以适应不同时间段内的请求流量
漏桶算法:
漏桶算法是一种流量控制算法,可以平滑控制流量的进出原理:我们会有一个水桶去存储到来的水(请求,水桶的大小就是能够存储的请求),水桶底部会有一个出口,按照固定的速率向下滴水(请求),不管有多少请求,请求的速率有多大,都是按照固定的速率流出,对应到系统中就是按照固定的速率处理请求
但是漏桶算法无法处理突发的流量,比如桶的容量是100,处理速度是10个/s,之前一直没有请求过系统,此时突然来了120个请求,那么桶只能存储100个请求,剩余的20个请求就要被丢弃或者拒绝掉(当然也可以做一些排队等待的策略),那么这些请求就需要10秒钟才能处理完,无论有多少请求,****系统始终是以恒定的速率进行处理的
令牌桶算法:
令牌桶算法和漏桶算法差不太多原理:令牌桶算法就是有一个固定的桶,不断的往桶中存放令牌(以固定的速率),只要能够取到令牌,那么该请求就不会被限制。也就是说,不管现在的请求量有多少,都会有一个线程以固定的速率往桶中存放令牌,而有请求过来的时候,就会取桶中的令牌,如果取不到的话请求就会被阻塞或者拒绝。
令牌桶算法是能够处理突发的大流量的,哪怕一直没有请求过来,那么这个线程还是会以固定的速率往桶中存放令牌,就算某一时刻,比如说21:59:59秒的时候突然来了100个请求(之前没有请求进来过),那么这100个请求都可以从桶中拿到令牌,然后被系统处理,这样就可以应对突发的流量了。
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
