使用具有速率限制的API

使用具有速率限制的API,api,throttling,ratelimit,Api,Throttling,Ratelimit,我有一个API,它限制每秒10次来自IP的调用-让我们调用这个API-1 我有一个使用API-1的Web应用程序。让我们称之为WebApp-1 如果我的Web应用的流量较大,并且需要每秒调用的次数超过允许的次数,那么如何设计对API-1的WebApp-1调用?关于如何实现速率受限的API的一些想法: 提高客户端密钥的API限制。可能不是你的情况,但在某些情况下可能是一种选择 创建/购买更多API客户端帐户(访问密钥),以提高总体费率限制。在关键点之间平均分配流量 在查询端缓存结果(在您的案例中

我有一个API,它限制每秒10次来自IP的调用-让我们调用这个API-1

我有一个使用API-1的Web应用程序。让我们称之为WebApp-1


如果我的Web应用的流量较大,并且需要每秒调用的次数超过允许的次数,那么如何设计对API-1的WebApp-1调用?

关于如何实现速率受限的API的一些想法:

  • 提高客户端密钥的API限制。可能不是你的情况,但在某些情况下可能是一种选择
  • 创建/购买更多API客户端帐户(访问密钥),以提高总体费率限制。在关键点之间平均分配流量
  • 在查询端缓存结果(在您的案例中为WebApp)。这取决于应用程序,但如果WebApp是基于浏览器的应用程序,则缓存可能无效,因为客户端之间没有共享缓存
  • 引入缓存代理。WebApp向代理发出请求,代理将请求转发到速率受限的API。这将有助于维护共享缓存。实现代理的一些选项:Nginx、Varnish、awsapi网关等
  • 引入查询队列(同步)。同样,如果WebApp是浏览器应用程序,则可能需要在WebApp和API之间放置后端服务作为代理。代理将保持对API的稳定请求流。如果传入请求中出现突发事件,则会延迟处理以遵守API的速率限制(WebApp可能需要等待更长的时间才能从代理获取答案)。不是真正可伸缩的
  • 引入一个查询队列(异步)。WebApp向代理发送请求。代理确认收据并返回收据ID。然后,当API的响应就绪时,代理向WebApp发出回调请求,或者WebApp正在轮询代理以了解给定收据ID是否有任何数据
  • 另一个(显然是阴暗的)解决方案是从不同的机器和IP发出请求。可能不是API所有者希望看到的东西