6种限流方式

打印 上一主题 下一主题

主题 892|帖子 892|积分 2676


服务限流,是指通过控制请求的速率或次数来达到保护服务的目的,在微服务中,我们通常会将它和熔断、降级搭配在一起使用,来避免瞬时的大量请求对系统造成负荷,来达到保护服务平稳运行的目的。下面就来看一看常见的6种限流方式,以及它们的实现与使用。
固定窗口算法

固定窗口算法通过在单位时间内维护一个计数器,能够限制在每个固定的时间段内请求通过的次数,以达到限流的效果。
算法实现起来也比较简单,可以通过构造方法中的参数指定时间窗口大小以及允许通过的请求数量,当请求进入时先比较当前时间是否超过窗口上边界,未越界且未超过计数器上限则可以放行请求。
[code]@Slf4jpublic class FixedWindowRateLimiter {    // 时间窗口大小,单位毫秒    private long windowSize;    // 允许通过请求数    private int maxRequestCount;    // 当前窗口通过的请求计数    private AtomicInteger count=new AtomicInteger(0);    // 窗口右边界    private long windowBorder;    public FixedWindowRateLimiter(long windowSize,int maxRequestCount){        this.windowSize = windowSize;        this.maxRequestCount = maxRequestCount;        windowBorder = System.currentTimeMillis()+windowSize;    }    public synchronized boolean tryAcquire(){        long currentTime = System.currentTimeMillis();        if (windowBorder 

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

没腿的鸟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表