首页 > 解决方案 > 支持流量控制的功能数据结构

问题描述

我想找到一个可以执行“流量控制”的功能数据结构。

示例:对于访问我网站的任何 IP,如果该 IP 自 M 分钟前已访问 >= N 次,则该 IP 被限制访问 Z 分钟。

有没有不需要计时器(定期删除访问记录)或大数据存储(记住所有IP的所有访问)的解决方案?

可以使用 JAVA 或 Scala 来构建数据结构。

标签: javascalafunctional-programming

解决方案


简单的答案是“是”“否”“是”

的,你可以在没有计时器的情况下做到这一点,你只需要一个时钟。当请求到达时,您查看时钟并根据历史数据根据您的算法决定是否拒绝请求。

,您不能在不为每个 IP 记录最多 N 条访问记录的情况下执行此操作。您需要知道每个请求的时间才能知道最近 M 分钟内发生了多少。有多种压缩方法,但如果不记录每次访问,您就无法实现您的算法。

的,您可以使用 Java 或 Scala 根据您的算法创建适当的数据结构。

但是,如果您修改测试,则可以减少数据存储。例如,您可以将时间划分为长度为 M 的窗口并计算每个窗口中的请求数。如果当前和先前窗口中的请求数超过 N,则您拒绝该请求。这不会给出完全相同的结果,但它实现了对来自过度活跃客户端的请求进行速率限制的总体目标,同时为每个 IP 地址只存储两个值。


推荐阅读