amazon-web-services - AWS API Gateway 缓存 - 多个服务命中并伴有大量调用

标签 amazon-web-services caching aws-api-gateway

我正在开发一款移动应用程序,该应用程序可以一次向数十万台设备广播推送消息。当每个用户通过推送消息打开他们的应用程序时,该应用程序将访问我们的 API 来获取数据。此推送的每个用户的 API 资源都是相同的。

现在我们假设所有 500,000 个用户同时打开他们的应用程序。 API Gateway 将收到 500,000 个相同的调用。

因为所有 500,000 个近乎并发的请求都要求相同的数据,所以我想缓存它。但请记住,计算请求的值大约需要 2 秒。

我想要发生什么

我希望 API Gateway 看到数据不在缓存中,让第一个调用通过我的后端服务,而其他请求则保留在队列中,从第一个调用填充缓存,然后响应另一个请求使用缓存数据的 499,999 个请求。

正在发生什么(似乎正在发生)

API Gateway 发现没有缓存值,正在将 500,000 个请求中的每一个请求发送到后端服务!因此,我将使用一些复杂的数据库查询方式重新计算该值,次数超出资源允许的次数。发生这种情况是因为最后一个调用在第一个调用填充缓存之前进入 API Gateway。

有什么办法可以让我得到这种行为吗?

我知道,根据我的示例,也许我可以在广播批量推送作业之前通过调用 API 调用来启动缓存,但实际用例比我的稍微复杂一些简化的例子。但请放心,解决这个简化的用例将解决我正在尝试做的事情。

最佳答案

如果您预计会出现这种突发并发,那么自己启动缓存无疑是最好的选择。您是否也考虑过在阶段/方法中添加节流以保护您的后端免受流量大幅激增的影响?可以指示客户端重试限制,他们最终会得到响应。

我会将您的反馈和建议的解决方案带给团队,并将其放入我们的待办事项中。

关于amazon-web-services - AWS API Gateway 缓存 - 多个服务命中并伴有大量调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37631586/

相关文章:

amazon-web-services - 如何使用 ACM 为 EC2 设置 SSL?

spring - <cache :annotation-driven/> 的非 XML 版本

c - 结构体中的整型数组

node.js - AWS API Gateway "Unsupported method\"未定义\""作为响应

amazon-web-services - 了解 AWS cloudformation 上的 Apigateway 和嵌套堆栈时出错

amazon-web-services - 如何在启动时为root用户设置环境变量?

amazon-web-services - 在 AWS ElasticSearch 实例上安装 Kibana 自定义插件

ruby - 使用 EB deploy 管理多个 AWS 账户

php - 网络速度 : it's worth it to put every included file in only one?

amazon-web-services - 如何使用 AWS SAM 启用 CORS