database - 跟踪 API 信用的架构?
问题描述
我有一个用户表,其中有一个 api 键列和总积分/已用积分列。
用户获得一个 API 密钥,使用该密钥,他们可以使用我的 API,但前提是used credits<=total credits
.
因为,这是一个 API,我可能很容易每秒处理几十个请求。这样就排除了在某种 API 中间件中的每次调用时直接从数据库读取/写入。
那么,正确的做法是什么?
- 我应该尝试
api-key:remaining credits
在 redis 中存储为键值对并在每个 API 调用中使用它吗? - 如果我有多个服务器节点,其中一个从 redis 读取剩余一个信用并开始执行 API 调用,但在中间另一个节点将剩余信用设置为零,会发生什么?(即,奇怪的并发边缘情况)
一般来说,我需要该解决方案具有高度可扩展性并支持高并发(每个实例>100 个请求/秒,并且说>100M API 调用/月)。
有任何想法吗?
解决方案
- 使用 Redis 存储 API 密钥。您无需在此处设置金额。只需键入 TTL 和 API 密钥。
- 使用 Apache Kafka 或类似的东西来接收客户交易:借记或贷记
- 使用最终的股票表作为“客户的银行账户”,该表将接收来自消息经纪人的所有借记和贷记交易的总和。计算并向客户发送有关资金不足的请求信用或消息。
类似的东西。PS您还可以通过按键在几秒钟内限制交易。但它是可选的。
推荐阅读
- javascript - React 组件的内联样式不起作用
- java - 添加 Spring Boot Data JPA 依赖项会导致 Spring Boot 项目在启动时崩溃
- sql-server - 如何在检查约束中使用递归 CTE?
- java - 如何读取格式化的图形数据文件 Java
- reactjs - 如何解决“加载后发送操作,循环问题”
- javascript - 尝试将焦点切换到另一个输入字段,但浏览器会自动聚焦表单中的“第一个”输入字段(仅限 Safari)
- batch-file - 如何在没有换行的情况下打印单个空格字符?
- react-native - TouchableOpacity 中的三元运算
- c - 如何在每个单词之前打印字符串中每个单词的长度
- python - 修复 Seaborn AttributeError:“NoneType”对象没有属性“points_to_pixels”