什么是 OpenMeter?
在现代的 SaaS 商业模式中,基于用量的计费(Usage-based Billing) 已成为主流。无论是 OpenAI 按 Token 计费,还是 AWS 按流量计费,核心挑战都在于如何实时、准确地记录海量的事件,并将其转化为可计费的指标。
OpenMeter 是一个开源的、高性能的计费指标度量平台(Billing Metering Platform)。它充当了“事件采集”与“账单生成”之间的桥梁。简单来说,它负责接收你的应用程序发送的各种使用事件(如:用户调用了 10 次 API),将其聚合为指标(如:本月总调用量 10 次),并提供 API 供计费系统(如 Stripe)调用以计算费用。
核心解决的痛点
- 高并发写入:计费事件量极大,传统的数据库无法支撑每秒数万次的写入。
- 实时聚合:需要快速知道用户当前的用量,而不是等待次日跑批处理。
- 解耦计费逻辑:将“记录用量”与“计算金额”分开,避免计费逻辑侵入业务代码。
核心架构与工作流
OpenMeter 的工作流程可以简化为以下三个阶段:
1. 事件采集 (Ingestion)
你的应用程序通过 HTTP API 将事件发送给 OpenMeter。
* 输入:customerId, metricName, value (可选), timestamp。
* 示例:用户 user_123 刚刚消耗了 500 个 Token。
2. 实时聚合 (Aggregation)
OpenMeter 内部使用高效的存储和处理机制,将离散的事件实时累加。
* 处理:如果 metricName 是 tokens_consumed,OpenMeter 会将 500 加到 user_123 的当前周期总额中。
* 窗口管理:支持按月、按日或自定义周期进行重置。
3. 指标查询 (Querying)
计费引擎或前端面板通过 API 查询用户的实时用量。
* 输出:user_123 本月共计使用了 15,400 个 Token。
快速上手实例
假设你正在开发一个 AI 写作工具,计划按 “生成的字数” 计费。
第一步:定义指标 (Metric)
在 OpenMeter 中,你需要先定义一个指标。例如,定义一个名为 words_generated 的指标,聚合方式为 sum(求和)。
第二步:发送使用事件
每当你的 AI 完成一次生成,就在后端调用 OpenMeter 的 API:
curl -X POST https://your-openmeter-instance.com/ingest \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"customerId": "cust_98765",
"metric": "words_generated",
"value": 120,
"timestamp": "2023-10-27T10:00:00Z"
}'
这里表示客户 cust_98765 刚刚生成了 120 个字。
第三步:查询当前用量
当用户打开“账单详情”页面时,你的后端请求 OpenMeter:
curl -X GET https://your-openmeter-instance.com/metrics/words_generated/cust_98765 \ -H "Authorization: Bearer YOUR_API_KEY"
返回结果:
{
"customerId": "cust_98765",
"metric": "words_generated",
"value": 15420,
"period": "2023-10"
}
此时你得知该用户本月已使用 15,420 字,你可以根据这个数值乘以单价,计算出应付金额。
OpenMeter 的关键技术特性
1. 极高的写入吞吐量
OpenMeter 针对计费场景进行了优化,能够处理每秒数百万次的事件写入,确保在流量高峰期不会丢失任何计费数据(丢失计费数据意味着直接损失收入)。
2. 灵活的聚合策略
它不仅支持简单的 sum(求和),还支持:
* Count: 记录事件发生的次数。
* Gauge: 记录最后一次的值(如:当前存储空间占用)。
* Max/Min: 记录周期内的峰值(如:最高并发连接数)。
3. 强大的集成能力
OpenMeter 并不试图取代 Stripe 或 Chargebee 这样的支付平台,而是作为它们的前置数据源。它通过 Webhooks 或 API 将精准的用量数据同步给支付平台,实现自动化扣费。
部署建议
如果你打算在生产环境部署 OpenMeter,建议关注以下几点:
- 持久化存储:确保使用高性能的数据库(如 ClickHouse 或 PostgreSQL),因为计费数据对一致性和持久性要求极高。
- 缓存层:利用 Redis 减轻数据库压力,实现毫秒级的用量查询。
- 安全性:由于涉及计费,必须严格配置 API Key 权限,防止恶意篡改用量数据。
总结:为什么选择 OpenMeter 而不是自研?
很多公司最初尝试用 UPDATE users SET usage = usage + 1 这种简单的 SQL 语句来记录用量,但很快会遇到以下问题:
* 数据库锁竞争:高并发下,同一行数据的频繁更新会导致严重的性能瓶颈。
* 数据丢失:异步队列如果崩溃,会导致计费不准,引发客户投诉。
* 统计复杂:计算“过去 30 天滚动窗口”的用量在传统 SQL 中非常低效。
OpenMeter 将这些复杂的工程问题抽象化,让你能够专注于产品的核心业务逻辑,而将“如何精准记录每一分钱”交给专业的度量平台。



还没有评论,来说两句吧...