API Gateway 的限流有多准确?

0

【以下的问题经过翻译处理】 我们的团队开始使用基于阶段的API Gateway限流,并注意到了一些不规范的行为。为了防止我们的系统被大量的API请求淹没,我们设定了每秒20个请求的限流。在启用此限制后,我们想要确保限流能够起作用,所以我构建了一个简单的JMeter套件来不断访问URL和发出请求:

  1. 启动100个测试线程
  2. 同步线程以确保所有100个线程在发出请求之前都在运行
  3. 所有100个线程都向网关发出简单的POST请求。
  4. 在每个线程上检查200或429响应

基于网关的文档,我预期会看到20个请求获得“200 OK”响应,然后看到80个请求返回429。但是我得到的是非常多的数量的请求被阻止,这些请求远远超出了设置的限制。通常情况下,大约有80个请求得到通过,只有20个被阻止,但有时候所有100个请求都得到通过。网关运行的桶令牌模型还意味着我不必担心命中任何1秒的时间窗口,其中可能会看到40个请求悄悄通过,因为计时器跳转到了一个新的秒间隔。

我们的限流限制对于网关来说是否太微不足道了?使用几千个默认值,我可以看到20可能太小了好几个数量级。或者,我们是不是仅仅误解了网关是如何处理限流的?

总之,使用限制API Gateway阶段的20限流并不像我们预期的那样准确限制API请求。

profile picture
专家
已提问 3 年前112 查看次数
1 回答
0

【以下的回答经过翻译处理】 像这个stackoverflow主线上最后一条消息中所提到的,这可能是由于AWS API网关采用了良好的架构,并且它没有单个后端终点服务于您的请求导致的。像这篇文章的作者所提到的,当请求添加了延迟时,限流更加一致。 https://stackoverflow.com/questions/63141984/aws-api-gateway-throttling-not-working-as-expected/63156353#63156353 您提到的问题也存在于使用分布式良好架构设置进行限流的任何服务中。除非给定限流“密钥”的所有请求在同一时刻落在同一主机上,否则系统将无法提供完全一致的限流。 您提出的情况,假设请求分布在多个后端主机上,将导致这些理论桶在限流组的主机分发其已知信息后变为负数,这可能需要几秒钟。同时,当桶为负数时,所有使用该密钥的请求都将返回429响应。

profile picture
专家
已回答 3 年前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则