java - 支持流量控制的功能数据结构
问题描述
我想找到一个可以执行“流量控制”的功能数据结构。
示例:对于访问我网站的任何 IP,如果该 IP 自 M 分钟前已访问 >= N 次,则该 IP 被限制访问 Z 分钟。
有没有不需要计时器(定期删除访问记录)或大数据存储(记住所有IP的所有访问)的解决方案?
可以使用 JAVA 或 Scala 来构建数据结构。
解决方案
简单的答案是“是”、“否”和“是”。
是的,你可以在没有计时器的情况下做到这一点,你只需要一个时钟。当请求到达时,您查看时钟并根据历史数据根据您的算法决定是否拒绝请求。
不,您不能在不为每个 IP 记录最多 N 条访问记录的情况下执行此操作。您需要知道每个请求的时间才能知道最近 M 分钟内发生了多少。有多种压缩方法,但如果不记录每次访问,您就无法实现您的算法。
是的,您可以使用 Java 或 Scala 根据您的算法创建适当的数据结构。
但是,如果您修改测试,则可以减少数据存储。例如,您可以将时间划分为长度为 M 的窗口并计算每个窗口中的请求数。如果当前和先前窗口中的请求数超过 N,则您拒绝该请求。这不会给出完全相同的结果,但它实现了对来自过度活跃客户端的请求进行速率限制的总体目标,同时为每个 IP 地址只存储两个值。
推荐阅读
- rasa-nlu - Rasa 聊天机器人默认实体值(如果未指定)
- java - 更合适的方法找到具有特定值的实例的索引
- c - 关于main函数中scanf问题的问题
- python - 如何从 Colab 中的子目录导入
- java - 如何在 Android 上使用 ARCore 获取 PointCloud 和 Pose?
- ruby-on-rails - Rails 5:来自枚举(散列)的 collection_check_boxes
- angular - 如何在 Angular + Laravel 中使用 Echo?
- php - 每页的 Woocommerce 产品无法正确显示
- php - get_meta 关于可变结帐流程(购物车、结帐、电子邮件)
- spring-boot - 在类路径资源 [org/springframework/boot/autoconfigure/gson/GsonAutoConfiguration.class] 中定义名称为“gsonBuilder”的 bean 创建错误