每个体系都有服务的上线,所以当流量超越服务极限才能时,体系可能会呈现卡死、溃散的情况,所以就有了降级和限流。限流其实便是:当高并发或者瞬时高并发时,为了确保体系的稳定性、可用性,体系以献身部分恳求为价值或者延迟处理恳求为价值,确保体系整体服务可用
计划一:令牌桶方法(Token Bucket)
令牌桶算法是网络流量整形(Traffic Shaping)和速率约束(Rate Limiting)中最常使用的一种算法。先有一个木桶,体系依照固定速度,往桶里加入Token,假如桶已经满了就不再增加。当有恳求到来时,会各自拿走一个Token,取到Token 才能继续进行恳求处理,没有Token 就回绝服务。
这里假如一段时间没有恳求时,桶内就会积累一些Token,下次一旦有突发流量,只需Token足够,也能一次处理,所以令牌桶算法的特点是答应突发流量。
计划二:漏桶方法
水(恳求)先进入到漏桶里,漏桶以必定的速度出水(接口有呼应速率),当水流入速度过大会直接溢出(拜访频率超越接口呼应速率),然后就回绝恳求,能够看出漏桶算法能强行约束数据的传输速率。
可见这里有两个变量,一个是桶的巨细,支撑流量突发增多时能够存多少的水(burst),另一个是水桶漏洞的巨细(rate)。
因为漏桶的漏出速率是固定的参数,所以,即便网络中不存在资源冲突(没有发生拥塞),漏桶算法也不能使流突发(burst)到端口速率.因而,漏桶算法关于存在突发特性的流量来说缺乏功率。
令牌桶和漏桶对比
1.令牌桶是依照固定速率往桶中增加令牌,恳求是否被处理需要看桶中令牌是否足够,当令牌数减为零时则回绝新的恳求;
2.漏桶则是依照常量固定速率流出恳求,流入恳求速率恣意,当流入的恳求数累积到漏桶容量时,则新流入的恳求被回绝;
3.令牌桶约束的是均匀流入速率(答应突发恳求,只需有令牌就能够处理,支撑一次拿3个令牌,4个令牌),并答应必定程度突发流量;
4.漏桶约束的是常量流出速率(即流出速率是一个固定常量值,比方都是1的速率流出,而不能一次是1,下次又是2),然后平滑突发流入速率;
5.令牌桶答应必定程度的突发,而漏桶首要意图是平滑流入速率;
6.两个算法完成能够相同,但是方向是相反的,关于相同的参数得到的限流作用是相同的。
计划三:计数器方法
计数器限流算法也是比较常用的,首要用来约束总并发数,比方数据库连接池巨细、线程池巨细、程序拜访并发数等都是使用计数器算法。也是最简略粗暴的算法。
如若转载,请注明出处:开源字节 sourcebyte.cn/article/232…