【发布时间】: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
a、b 和 c 可以采用 3 到 25 个不同的值。但是如果存在b 和c,a 只能有一个值。此外,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