Sentinel中的冷启动限流算法
关注 “Java艺术” 我们一起成长! -- 转载请声明来源和作者信息 -- 冷启动算法基于令牌桶算法实现。 令牌桶算法的原理是:按一定的速率往令牌桶中放入令牌,当接收到请求时,从令牌桶申请令牌,只有拿到令牌的请求才能通过。当令牌桶放满时,多余的令牌就会被丢弃;当令牌桶为空时,请求拿不到令牌就拒绝请求。 例如,想要使用令牌桶算法限制接口的最大QPS为200,那么就要每5毫秒就要生产一个令牌放入令牌桶,且生产令牌放入的速度不变。 冷启动算法 用于控制令牌桶的令牌生产速率,即控制每个令牌生产的时间间隔。 假设冷启动时长为10秒,初始状态为冷启动状态,限流阈值为200QPS,正常情况下生产令牌的速率应该为5毫秒/个,而在冷启动阶段,速率会从最小值上升至 5毫秒/个,最小速率与冷启动系数有关,与冷启动周期时长有关 。 Sentinel与Guava的实现不同,Sentinel可能是出于对性能的考虑,并不控制每个请求的通过时间间隔,只控制每秒钟能通过的请求数。 通过下面这张图来理解冷启动算法。 坐标轴: 横坐标storedPermits代表存储桶中的令牌数量; 纵坐标代表获取一个令牌需要的时间,即请求通过的时间间隔; stableInterval:稳定产生令牌的时间间隔,假设限流阈值QPS为200,stableInterval的值为5毫秒。 coldInterval