rest - 扩展 REST API - 架构

标签 rest architecture redis restful-architecture api-design

我们的产品是一个休息 API,我们需要对其进行扩展并使其冗余。我们的计划是使用 nginx 作为负载平衡器和代理,它将 api 请求转发到三个不同的服务器,所有这些服务器都将连接到同一个 MongoDB 副本集。

我们的 API 基于用户的 API key 进行速率限制。用户将有多个客户端,并且所有客户端都将使用相同的 API key 签署他们的请求。

我有两个问题:

  1. 需要对数据库执行多个 cron 作业。怎么能 我们确保只有一台服务器运行 crons,但如果那 服务器宕机了,换一个运行它们?
  2. 我们如何在所有服务器上强制执行速率限制。怎么做 我们允许一个 api key 每天在所有三个上获得 1000 个请求 服务器组合 ?

最佳答案

Multiple cron jobs need to be executed against the database. How can we make sure only one of the servers runs the crons, but if that server is down, another one runs them instead?

考虑使用队列。所有 cron 作业都可以从队列中选取。

How can we enforce the rate limits combined on all servers? How do we allow one api key to get 1000 requests per day on all three servers combined?

考虑保留一个计数器,每次服务器收到来自租户(具有 api key 的用户)的请求时都会更新该计数器。当服务器收到请求时检查计数器(计数器 < 1000)以查看它们是否已消耗配额。

关于rest - 扩展 REST API - 架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41802800/

相关文章:

java - REST 如何使用 SOAP 作为协议(protocol)?

model-view-controller - MVC 的替代品是什么?

mysql - 为什么我们使用 Redis 以及在 PHP 中用 MySql 实现 Redis 的正确方法是什么?

重启机器后Redis服务器被删除

java - 如何在curl中调用具有两个请求正文参数的endPoint

javascript - 为 Rails 生成的 XML API 构建 JavaScript 包装器?

rest - 如何让 Invoke-RestMethod 使用默认的 Web 代理?

plugins - Unity3D 的网络部署是如何工作的?

c++ - 内存对齐 - Sparc(Sun) cc 编译器、Intel(Linux) g++ 编译器、Intel(Windows) MVSC 编译器

Python-rq with flask + uwsgi + Nginx : Do I need more uwsgi processes or redis workers?