蓝盟IT小贴士,来喽!
为什么要限流呢
首先,我们来看看在系统架构的设计中,为什么要“限流”。
景点通常有最大的接待量。 不能无限制地让游客进入。 例如故宫每天只卖8万张票。 8万以上的游客买不到票。 如果超过8万人,景点的工作人员有可能会很忙。 拥挤的景点会影响游客的体验和心情,也有安全问题。 “只卖n张票是限流的手段”。
软件体系结构中的服务限制流也是如此,在系统资源不足的情况下,不足以满足大量的请求,为了保证服务正常工作,按照规则,“系统直接拒绝多余的请求,进行限制。
双11、12点过后,一些顾客的网站和APP显示订单失败的提示,有些则成为有限的潮流等,谁也没有注意到过。
滑动窗口算法
也有上面的例子。 每分钟6分钟,每10秒。 每10秒,我们的时间窗就会向右滑动一段。 每个格子都有独立的计数器。 可以每次计算时间窗口中的数量以解决计数器方法问题。 另外,滑动窗口的格子越多,限流统计就越准确。
这段代码还是有点复杂,需要读者花一定的时间好好啃一啃。 其整体想法是,每当所有行为到来时,都要维持时间窗口。 清除时间窗口外的所有记录,只保留窗口内的记录。
由于所有这些连续的Redis操作都针对同一密钥,因此使用pipeline可以显着提高Redis访问效率。 但是,这种方式也有缺点。 是为了记录时间窗口内的所有行为记录。 例如,如果60s以内的操作不能超过100w次的参数很大,会消耗大量的存储空间,因此不适合进行这种限流。
文/上海蓝盟 IT外包专家