功能数据结构支持流程控制

时间:2019-02-27 07:04:54

标签: java scala functional-programming

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

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

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

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

1 个答案:

答案 0 :(得分:1)

简单的答案是

,您无需计时器即可完成操作,只需要一个时钟。当请求到达时,您会按时查看时钟并根据历史数据决定是否根据您的算法拒绝请求。

,如果不为每个IP记录多达N个访问记录,就无法做到这一点。您需要知道每个请求的时间,以了解最近M分钟内发生了多少次。有多种压缩方法,但是如果不记录每次访问,就无法实现算法。

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

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