- 流控算法-滑动窗口
概念:
在线性的时间轴上我们可以截取数个等长的小窗口,用户在不同时间的请求会落在对应的小窗口里,在轴上还存在一个滑动窗口,它可以容纳指定个数的子窗口,通过滑动窗口我们能够容易地统计出一个时间段内的请求信息。
在服务器限流中的实现:
用户的请求即是一个时间戳,它总会落在时间轴上的一个小窗口内,我们可以将这一次请求的状态记录到窗口中,当滑动窗口内所有小窗口的请求数大于设置的阈值时就可以进行阻塞限流。滑动窗口会在时间轴上进行滑动,不断弹出旧窗口装入新窗口,可以观察到当我们截取小窗口的精度越细时,滑动窗口滑动的会更加平滑,对请求信息的统计更加精确。
粗精度截取:
细精度截取:
在粗精度截取下用户在5秒-7秒内请求了3次以上超出了设置的阈值,而在细精度截取下则防止了这种情况发生,可见当精度划分越细就能更加精确的进行限流,但维护更多窗口的同时对资源的消耗也会更多,所以窗口要如何进行划分要依照实际业务场景来衡量。