【发布时间】:2019-12-30 15:19:39
【问题描述】:
我的应用程序具有基于信用的使用系统。但是,在我当前的结构中,如果用户在足够小的窗口中发出 2 个请求,他可以通过这两个请求,这会导致系统故障和用户的信用值负值,因为当第二个请求应该时,他的信用会减少两次'不被允许。
我想确保单个用户在给定时间只能运行一个请求,我尝试使用 express-rate-limit 但这不适合我的用例,因为这些请求是由谷歌云功能发出的已设置,而不是用户本人。
但是,我有特定的用户 ID 来标识这些请求,因此我可以拥有特定于用户 ID 的队列来逐一处理单个用户的请求。
这是否是解决信用使用问题的适当且可扩展的设计,还是有更好的替代方案?
【问题讨论】:
-
考虑重新设计您的系统,以便没有时间限制但有资源限制,例如数据库约束或事件源。
-
听起来你想要一个全局的test and set,因为请求可以并行执行。我猜测具有 ACID 属性的同步数据库。也许是单节点 Cloud SQL,或者如果您有容量,那么 Cloud Spanner?使用您的用户 ID 作为键,使用积分作为值。
标签: node.js express firebase-realtime-database google-cloud-functions rate-limiting