我正在开发一款移动应用程序,该应用程序可以一次向数十万台设备广播推送消息。当每个用户通过推送消息打开他们的应用程序时,该应用程序将访问我们的 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/