如何为每位用户评分限制?

时间:2019-12-30 15:19:39

标签: node.js express firebase-realtime-database google-cloud-functions rate-limiting

我有一个具有基于信用的使用系统的应用程序。但是,按照我当前的结构,如果用户在足够小的窗口中发出2个请求,则他可以同时获得这两个请求,这将导致系统出现故障,并且用户的信用额度为负值,因为当第二个请求应被拒绝时,其信用额度将减少两次。不允许。

我想确保单个用户在给定时间只能运行一个请求,因此我尝试使用express-rate-limit,但由于我的用例是由Google Cloud提出的,因此不适合我的用例我设置的功能,而不是用户本人。

但是,我有特定的用户ID来标识这些请求,因此我可以使用特定于用户ID的队列来逐个处理单个用户的请求。

这是解决信贷使用问题的合适且可扩展的设计,还是有更好的选择?

1 个答案:

答案 0 :(得分:1)

您将需要对使用的任何基础数据存储使用原子操作。由于您还没有说什么,因此无法就如何进行给出具体建议。大多数数据库提供了一种使用“事务”的方法,该方法仅在满足某些条件时才使更新成功。您将要使用这些事务之一来确定客户端是否应该能够继续进行更新。

实际上,没有一种简单的方法可以使Cloud Functions以良好的扩展方式限制每个用户的函数调用率。这实际上与允许太多并发请求的基础存储机制有关。如果您不必扩大用户数量,则可以使用Cloud Tasks为每个用户实现一个队列,但是我认为这并不是最好的解决方案。