一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第4天,点击查看活动详情
概述
限流算法一般使用在高并发分布式系统中,以具体的方案体现在微服务中使用的hystrix和sentinel.常见的限流算法有四种.分别是:计数器算法,滑动窗口算法,漏桶算法,令牌桶算法。
常用算法
计数器算法
说明:计数器算法就是在一个周期内设置一个流量阈值,当达到阈值,会拒绝访问,达到限流的作用。但是对于跨了两个时间周期的可能会超过流量阈值,导致计数不准确,压塌服务。
时间窗口算法
说明:滑动窗口算法主要是为了改进计数器时间临界点超阈值的情况。滑动窗口算法,会把一个周期切成多个时间片,然后每次隔一个时间片的时间就会进行一次统计,更细粒度化了,这样有效避免计数器算法不准确问题。
漏桶算法
说明:这个桶可以理解是一个固定大小的队列,当流量来了进入队列,队列满了就会丢弃。水流是固定的,也就是流量会以恒定的速度流入到我们的处理程序。恒定速度保护了我们的程序不会被大流量击垮,但是大量流量过来,很多都会被丢弃,qps是固定的。
令牌桶算法
说明:系统会以恒定的速度放入令牌,当令牌满了的时候会拒绝。当处理程序需要处理流量,那么会移除桶中令牌,知道桶中令牌使用光。可以一次性使用桶中令牌数量,有利于应对高并发流量,具体取决于令牌投放的qps
总结
现实落地都是使用上述算法进行流量控制,这个也是支持分布式系统C理论的关键,保护服务,保证服务的可用性。