前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
返回 AI 情报前线
All News · 全部资讯9865
  • 评审容量已成交付新瓶颈:打字快不等于交付快
  • AI Agent 让 CI 成为瓶颈,加速流水线是错误解法
  • 程序员自建家用LLM集群的完整踩坑历程
  • Claude Code Mods 沙箱机制深度解析
  • MCP 协议安全:Agent 工具调用的运行时攻击面
  • Node.js多LLM提供商集成实战:统一输出契约与回退策略
  • Google RRSI 方法:防止自改进 AI Agent 记忆测试任务
  • DeepSeek Harness v0.2支持Claude Code Mods兼容层
  • MCP协议深度解析:AI工具集成标准现状与局限
  • 生产级LLM Gateway四个关键设计决策
  • MCP JSON 配置优化:同步一次节省 98% Discovery Token
  • Agent 静默失败代价 2500-8000 美元:用权威系统交叉验证代替执行日志
  • Agent 静默失败导致数千美元损失:如何用外部核查机制堵漏
  • Grok Build 真实用户体验:宣传与实际的落差
  • 两个面向AI Agent的x402 API:页面质量检测与成本计算
  • AI幻觉报告泛滥,谷歌暂停开源漏洞奖励计划
  • Rust成为微软内部一级语言,与C++/C#并列
  • 生产级Agentic RAG系统实战课程
  • Claude-Mem:让AI编程工具跨会话持久记忆
  • Google Gemini 调整分层策略:免费用户只能用量最小的 Flash-Lite
  • 积分系统设计中没人会纳入预算的工程细节
  • Agenthof:用控制面让 AI Agent 的每次调用都有审计可查
  • Claude Code Mods 发布:Agent 变成可扩展平台
  • ThinkingBox:Benchmark 专门捕获 AI Agent「说完成但没做完」
  • 5 个 JSON Schema 将 AI 编程智能体的输出质量管起来
  • DeepSeek Harness v0.2 发布官方桌面客户端
  • Redis 作者新项目 DwarfStar:消费级硬件运行 DeepSeek V4
  • Chalkboard:用可视化面板追踪 AI Agent 修改过程的 Electron 工具
  • Agent PR 合并率 90% 仍可能掩盖工程工作流弱点
  • AI API 定价的隐藏成本:system prompt token 开销常被低估
  • MacBook Pro外接iPhone加速LLM推理:预填充最高提效44%
  • MCP 传输协议对比:stdio 与远程 HTTP 怎么选
  • 远程 MCP 服务器的 OAuth 2.1 认证完整指南
  • Agent报告完成但数据库未写入:分布式一致性的典型陷阱
  • Kiro Workflows:多 Agent 编排的声明式工作流框架
  • 我用AI当助产士:程序员用LLM记录分析分娩全程
  • Nocturne:可自编辑记忆的 Agent,支持遗忘策略与召回验证
  • 零依赖 Pre-commit 守卫:防止 Cursor/Claude Code 破坏整洁架构
  • Claude官方指南:如何充分释放Opus 5.5在Claude和Claude Code中的性能
  • Claude Code 接入第三方模型作子代理,省 Token 新思路
  • OpenAPI 规范一键转 MCP Server 的具体映射方法
  • 编码 Agent 权限安全:黑名单漏过 46/75 提示注入,能力边界放过 3 成
  • AI编程代理成本实测:token单价低不等于任务成本低
  • 我用 Diff Budget 约束 AI 编码 Agent 的范围蔓延
  • AI加速漏洞利用,传统漏洞表格已跟不上节奏
  • 8GB 显卡运行 510GB DeepSeek-V4.1-Flash 的实战记录
  • 本地语音转文字 pipeline:faster-whisper int8 量化实现全离线
  • 393 个 AI 构建仓库人工复审:八分之一存在严重缺陷
  • 开源工具 BootLoops + Claude 三个月产出 36 篇跨学科论文
  • Jev/TEV意图识别 vs Embedding:不是替代是分工
  • 2026年AI智能合约审计实战:从LLM到CI/CD集成
  • 已加载 51 / 9865
8.0
热点
AI SCORE
技术实践2026-10-04 15:21

积分系统设计中没人会纳入预算的工程细节

dev.to · AI#计费系统#后端工程#数据库设计
Editor brief · 编辑速览

深入剖析积分/信用系统从简单数据库字段到复杂多桶策略的演变过程,涉及重置规则、过期策略、按账单日续期、升级/降级处理等实际工程问题。

文章思维导图
Knowledge map
拖拽缩放
Full translation

完整中文译文

如果你的产品卖的是积分、Token、分钟数或 API 调用,你的团队里大概有人说过这么一句话:「往 users 表加一列 credits 就完事了。」这是一个合理的第一步。也是大多数团队开始构建一个他们根本没打算自己维护的计费系统的起点。

以下是有了真实客户之后,这一列会变成什么样子。

1. 余额不是一个数字

按月付费的客户有一个额度,会定期重置。然后他们又买了一个叠加包,这个包不应该重置。接着你给他们发了一个注册奖励,30 天后过期。现在「他们有多少积分?」变成了一道对多个桶的求和,每个桶有各自的规则,而且你得决定先消耗哪个桶——通常是最快过期的那一个。

2. 「每月」指的是每个客户各自的月份

额度在客户的账单日续期,而不是每月 1 号。17 号注册的客户在每月 17 号续期。9 号升级的客户可能从现在起在每月 9 号续期,也可能沿用 17 号,取决于你怎么算按比例的部分。你的续期任务现在需要知道每个客户的锚定日期。

3. 周期中途切换套餐

今天升级了,额度怎么算?是现在就拿完整的新额度、按比例分配,还是下次续期再给新额度?降级更麻烦:要是客户已经用掉的超过了小套餐包含的数量呢?无论你怎么选,都需要一份记录,记录哪个套餐在哪个时间段适用,否则后面没法解释账单。

4. 两次请求,只剩最后一个积分

你的应用先查余额,再跑任务,然后扣减。在并行请求的情况下,两个任务可能同时看到「还剩 10 个积分」,两个都去跑了,都做了扣减。客户最后变成了 −10。对于便宜的任务这无所谓。对于视频渲染或一批图片生成,这就是真金白银。解决办法是在工作开始前锁定容量,工作结束后再结算。

如果你在任务前锁定了或扣减了积分,但任务失败了,客户应该拿回这些积分。如果你的 Worker 在任务中途崩溃了,没有人会来触发退款。所以锁需要有过期时间,而且必须有东西来清理它们。

5. 月度额度阻止不了一个客户的失控脚本在 10 分钟内把整月额度烧光

你需要对每个客户设置限速,不只是总额限制,而且通常需要在多个时间窗口下同时限制,比如每分钟和每小时。

6. 在客户用完之前通知他们

客户宁愿在 80% 的时候去充值,也不愿意等到发现积分归零时任务已经失败了。这意味着要跟踪每个客户每个周期的阈值,而且只在越过那条线的时候通知一次,而不是在此之后的每次请求都通知。

7. 周期结束时

周期结束时,财务想要一个精确的数字:这个客户用了多少、包含多少、超出多少。这个数字一旦周期关闭就不能再动了。

以上这些单独拎出来都不难。合在一起,就是一个小的、有状态的、对并发敏感的系統,它坐落在你最昂贵的操作前面,而且每次你的定价一变它就得跟着变。这才是原始估算里最常漏掉的那部分。

这就是我们在构建 Meterbase 解决的问题。你只需要设置一次计量器、套餐和额度,你的代码在工作前打一个调用,工作后打一个调用:

import { Meterbase } from "mbase-sdk"

const meterbase = new Meterbase({ apiKey: process.env.METERBASE_API_KEY! })

const check = await meterbase.check({
  customer_id: "acct_1",
  meter_id: "ai_tokens",
  quantity: 2_000, // an estimate
})
if (!check.allowed) throw new Error(`Refused: ${check.reason}`)

const reply = await generateReply(prompt)

await meterbase.track({
  customer_id: "acct_1",
  meter_id: "ai_tokens",
  quantity: reply.usage.total_tokens,
})

额度、叠加包、套餐变更、锁定、限速和阈值 Webhook 都封装在这两个调用后面。Meterbase 不是计费系统:Stripe 或 Paddle 仍然收钱,你只需要读取每个客户一个周期的用量来出账单。

如果你现在正在构建这个,或者你已经构建完了但厌倦了维护它,我们很想听听你是怎么处理的:meterbase.tech。

Original source

本文由 AI 翻译整理自 dev.to · AI,原文版权归原作者所有。

阅读英文原文
上一篇
Google Gemini 调整分层策略:免费用户只能用量最小的 Flash-Lite
下一篇
Agenthof:用控制面让 AI Agent 的每次调用都有审计可查