【发布时间】:2021-03-05 11:16:52
【问题描述】:
我正在构建一个 API 产品,用户可以在其中使用多个 API(我给他们一个 API 密钥)。
我想监控用户进行的 api 调用,以便能够了解他们进行了多少次调用(以及向他们收取的费用)。
这是我的桌子:user_apis
| API Name | User ID | Total API calls | Successful API calls | Failed API Calls |
|----------|---------|-----------------|----------------------|------------------|
| cat_data | 1 | 15 | 10 | 5 |
| dog_data | 1 | 3 | 3 | 0 |
| cat_data | 2 | 1 | 0 | 0 |
用户可以使用不同类型的 API,例如 User 1 使用 2 个 API cat_data 和 dog_data。
-
现在,当我处理与
cat_data和dog_dataAPI 对应的路由时,我需要在某种中间件中快速监控 API 调用。 -
如果用户 1 的 API 密钥命中
cat_data的端点 => 现在我正在以非常粗略的格式计算 redis 中的命中key=[user_api_key_total_calls], value=[number_of_calls+1],我已经构建了一种 API 网关中间件,通过它每个请求在redis中通过并被跟踪。
我需要使用 redis(或内存存储中的一些),因为这些 API 的使用率可能非常高(>100 req/sec),因此我无法在每个 API 端点命中时对数据库进行读写调用。
这给我们带来了一个问题:我如何确保我维护数据库中这些数据的完整性?
如果我不是每次都写入数据库(比如说,我选择在每 1000 次调用后写入)并且如果 redis 实例出现故障,那么该数据就会丢失!我该如何避免这种情况?
【问题讨论】:
-
你检查过 Redis Write-Behind 解决方案吗? github.com/RedisGears/rgsync
-
会检查一下,谢谢!虽然,我希望在我现有的 API 处理代码中可以遵循某种标准模式/库,以免使我的技术堆栈进一步复杂化。
标签: postgresql api redis api-gateway