我们的产品是一个rest api,我们需要扩展它并使其成为冗余。我们的计划是使用nginx作为负载均衡器和代理,将api请求转发到三个不同的服务器,所有服务器都将连接到同一个mongodb副本集。
我们的api有基于用户api密钥的速率限制。用户将有多个客户端,所有客户端都将使用相同的api密钥对其请求进行签名。
我有两个问题:
需要对数据库执行多个cron作业。怎么能
我们确保只有一个服务器运行cron,但是如果
服务器坏了,另一个运行它们?
我们如何在所有服务器上强制执行速率限制。如何做
我们允许一个api密钥每天在所有三个上获得1000个请求
服务器组合?
最佳答案
需要对数据库执行多个cron作业。我们如何确保只有一个服务器运行cron,但是如果
服务器坏了,另一个运行它们?
考虑使用队列。所有cron作业都可以从队列中提取。
我们如何在所有服务器上强制执行速率限制?我们如何允许一个api密钥每天在所有三个服务器上获得1000个请求
合并?
考虑持久化一个计数器,该计数器在服务器每次收到来自租户(具有api密钥的用户)的请求时都会得到更新。当服务器收到请求时,请检查计数器(计数器