rest - 扩展 REST API - 架构

标签 rest architecture redis restful-architecture api-design

我们的产品是一个 rest 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/

相关文章:

c# - 当我让我的 (ASMX) Web 服务接受/返回 JSON 而不是 XML 时,它是否不再被视为 SOAP?

c++ - 如何动态获取系统架构?

c# - 非 Javascript 应用程序中的 JSON

session - Flask Redis 服务器 session : Error in save_session

redis - 如何连接到 redistogo?怎么看数据?

java - 为休息服务实现 JUnit 测试

python - 发布请求 Django REST 框架

android - 在Android上生成HTTPGET REQUEST URI的更简单方法

java - “Thinking in Scala"如果我有 Java/C++ 背景?

node.js - 为什么对 Redis 使用异步客户端有意义?