我一直在为 Stack Exchange 编写 Google Chrome 扩展程序。这是一个简单的扩展,可让您跟踪您的声誉并在 Stack Exchange 网站上收到评论通知。
目前我遇到了一些我自己无法处理的问题。我的扩展使用 Google App Engine 作为后端向 Stack Exchange API 发出外部请求。扩展程序对单个站点上的新评论的每个单个客户端请求都可能导致对 api 端点的大量请求以准备响应,即使对于非 skeetish 用户也是如此。普通用户至少在 Stack Exchange 网络的 3 个站点上拥有帐户,有些拥有 > 10 个!
Stack Exchange API 有请求限制:
单个 IP 地址每天只能发出一定数量的 API 请求(10,000)。
如果我在 5 秒内从单个 IP 地址发出超过 30 个请求,API 将切断我的请求。
很明显,所有请求都应限制为每 5 秒 30 次,目前我已经基于带有 memcached 的分布式锁实现了请求限制逻辑。我使用 memcached 作为一个简单的锁管理器来协调 GAE 实例的活动并限制 UrlFetch 请求。
但我认为将如此强大的基础设施限制为每 5 秒发出不超过 30 个请求是一个很大的失败。这样的 api 请求率不允许我继续开发新的有趣和有用的功能,并且有一天它会完全停止正常工作。
现在我的应用程序有 90 个用户并且还在增长,我需要提出如何最大化请求率的解决方案。
众所周知,App Engine 通过相同的不同 IP 池发出外部 UrlFetch 请求。我的目标是编写请求限制功能,以确保符合 api 使用条款并利用 GAE 分布式功能。
所以我的问题是如何在遵守 api 使用条款和利用 GAE 分布式功能的同时提供最大的实际 API 吞吐量。
建议使用另一个平台/主机/代理在我看来是没用的。