【问题标题】:Why would AWS API Gateway let cached queries through to the backend?为什么 AWS API Gateway 会让缓存查询通过后端?
【发布时间】:2018-12-26 20:16:58
【问题描述】:

我在 AWS Api Gateway 中有一个 GET 方法。缓存已为阶段启用,并且适用于大多数请求。然而,无论我做什么,一些请求似乎都会溜到后端。也就是说,一些通过 API 的请求没有被缓存。

我已经定义了参数a, b & c 进行缓存;通过检查“请求”设置下各自的“缓存”框。还有其他参数没有缓存。

请求可以包含所有三个参数,也可以只有一个:

example.com/?a=foo&b=bar&c=baz&d=qux
example.com/?a=foo&d=qux

abc 可以采用 3 到 25 个不同的值。但是如果存在bca 只能有一个值。此外,b 不能在没有 c 的情况下出现,反之亦然。

例如,缓存的 TTL 为 60,我在 0 到 10 时间之间发送:

example.com/?a=foo&b=bar&c=baz&d=qux
example.com/?a=quux&d=qux
example.com/?a=foo&b=quux&c=baz&d=qux
example.com/?a=foo&b=corge&c=fred&d=qux
example.com/?a=baz&d=qux

然后在 30 到 40 之间我发送相同的请求,我可能会看到以下日志:

example.com/?a=foo&b=bar&c=baz&d=qux
example.com/?a=quux&d=qux
example.com/?a=baz&d=qux

所以这些请求被缓存了,而其他的则没有:

example.com/?a=foo&b=quux&c=baz&d=qux
example.com/?a=foo&b=corge&c=fred&d=qux

在上面的示例中,大多数都没有缓存,但实际情况并非如此;大多数查询都被缓存。在实际情况下,第二次运行时会有相当多的请求进入,大约 600/s。在第一次运行中,请求速率约为 1/s。我看到的查询是应用程序首先请求的查询之一。

AWS API Gateway 似乎不太可能无法处理类似的查询率(在 10000 个请求和 5000 个突发时启用限制),但似乎应用程序发送的前几个查询被忽略了。 API Gateway 会出现这种情况吗?

我还认为可能存在缓存大小问题,但增加缓存似乎没有帮助。

那么 API Gateway 有什么理由让看似缓存的请求溜到后端呢?

更新:创建请求的应用程序的本质是它启动了一个请求链。这意味着,大约有 500-600 个应用程序同时启动。当他们异步发出少量请求,然后发出大约 300-500 个请求链(同步)时。

考虑到这一点,0 s 的爆发率可能要高得多。上述约 600 个请求/秒是 60 秒内约 36 000 个查询的平均值。大多数请求将在这 60 年代开始时完成,但我没有确切费率的数字。估计第一秒可能有大约 1000-2000 个请求/秒,第一秒可能更多(比如 3000+)。

【问题讨论】:

  • 你查到这个的底了吗?
  • 我希望我可以肯定地说是,但不是真的。我设法减轻了影响并最大限度地减少了发送到后端的请求数量。但我不知道为什么会这样。我可以用我的发现和所做的来写一个答案。

标签: caching aws-api-gateway api-design


【解决方案1】:

简而言之,我仍然不知道为什么会发生这种情况,但我确实设法将漏掉的请求数量降至最低。

我通过让请求应用程序延迟启动(我在问题更新中解释了启动顺序的性质)随机时间来做到这一点。我让应用程序在 0 到 3 分钟之间随机选择一个启动时间,以避免 API 网关出现峰值。

这并没有消除请求漏掉的现象,但它把这个数字从大约 60 秒的 500-1500 降低到了 3 分钟的 0-10 之间。与边缘上的 1000+ 超过 60 秒相比,我的后端可以轻松处理。

在我看来,当 API 网关在短时间内被大量请求淹没时,它只会传递这些请求。我很惊讶(也有点怀疑)这些数字会如此之大以至于会给 AWS 带来问题,但这就是我所看到的。

也许这可以通过改变节流级别来解决,但我在玩它时发现没有任何区别(请注意,我不是专家!)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-30
    • 2019-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 2017-10-03
    • 1970-01-01
    相关资源
    最近更新 更多