gpt4 book ai didi

algorithm - 衡量/强制执行客户 Web 请求配额的技术

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:21:21 29 4
gpt4 key购买 nike

我有一个 Web 应用程序,其中包含多个用于 B2B 应用程序的同质 Web 前端(具体来说,我在 App Engine 上运行)。我需要设计一个短期配额系统,以便在客户的突发请求率超过他们的配额时拒绝流量。需要支持的客户数量在数万范围内。我想衡量这些配额的时间尺度将在“分钟”范围内;最多一个小时。

例如如果时间范围是 10 分钟并且客户 X 提出的请求远远超过他们的配额,那么我可以接受系统为他们的所有请求提供服务,直到他们用完每 10 分钟允许的请求数量分钟,然后在该 10 分钟窗口的剩余时间内拒绝他们的所有请求,然后在下一个 10 分钟窗口重新开始该过程。

我考虑过的半生不熟的解决方案:

  • 获得一个强大的 Redis 盒子。对于来自客户 X 的每个请求(或者可能是其中的某个固定百分比,例如十分之一,以减轻负载),对 X 计数变量进行 GET。如果超过他们的每 10 分钟配额,则拒绝该请求。否则,对 count-of-X 变量进行 INCR 并提供请求。每 10 分钟,将所有客户的计数设置为 0。

  • 与上面类似,除了使用内存缓存,因为该服务内置于应用引擎中,所以我不需要运行自己的盒子。如果内存缓存值丢失,哦,好吧 - 我们可能不会像在那个时间窗口内那样进行节流(只要时间窗口足够短,我们可能不会太在意)。

  • 每个网络服务器都存储全局每个客户的计数器,用于我看到的新请求和全局看到的请求。每隔一秒(左右),每个网络服务器都会将其新的“我看到的请求”值(针对每个客户)推送到一些类似 pub-sub 的集中式服务,该服务将该值重新分配给所有网络服务器(他们将其添加到他们的“看到的请求”中) - 全局值(value))。网络服务器使用他们的全局请求值(总是有点陈旧)来决定是服务还是拒绝请求。

最佳答案

Memcache 适用于这种方案,但使用原子增量和获取。

但是请注意,10 分钟窗口的限制对于保护您的系统免于过载并没有多大作用。至少,您应该在整个窗口期内的不同时间(随机或精心选择)重置客户数量,这样您就不会一下子被所有客户压得喘不过气来。如果您有足够多的客户,这将确保负载均匀分布。

关于algorithm - 衡量/强制执行客户 Web 请求配额的技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33522772/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com