用于跟踪api信用的数据库体系结构?

pgpifvop  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(290)

我有一个user表,有一个api键列和total credits/used credits列。
用户获得一个api密钥,使用该密钥,他们可以使用我的api,但前提是 used credits<=total credits .
因为这是一个api,所以我可能很容易每秒处理几十个请求。这样就排除了在某种api中间件中,每次调用时直接从db读取/写入数据的可能性。
那么,正确的方法是什么?
我应该试着储存吗 api-key:remaining credits 作为redis中的键值对,并在每个api调用中使用它?
如果我有多个服务器节点,其中一个从redis读取到还有一个信用卡,并开始执行api调用,但在中间另一个节点将剩余的信用卡设置为零,会发生什么(i、 e,奇怪的并发边缘情况)
一般来说,我需要解决方案具有高可伸缩性并支持高并发性(每个示例的请求数大于100个/秒,比如说api调用数大于100m个/月)。
有什么想法吗?

nr7wwzry

nr7wwzry1#

使用redis存储api密钥。你不需要在这里设置金额。只需输入ttl和api键。
使用apachekafka或类似的工具来接收客户事务:借记或贷记
使用最终的stock表作为“客户的银行帐户”,此表将接收来自messagebroker的所有借方和贷方交易的总和。计算、发送请求的信用证或向客户发送资金不足的信息。
差不多吧。p、 您还可以通过键在秒内限制事务。但它是可选的。

相关问题