超额计费

场景

账单系统上线后,运行正常。

但运营团队发现了一些问题:

Ops Chat
周二 11:40

用户反馈:

  1. 为什么我的账单有超额费用?
  2. 超额费用是怎么计算的?
  3. 我什么时候超的限?

技术问题:

  1. 统计数据延迟(月度统计不是实时的)
  2. 无法精确计算超额时间点
  3. 用户无法实时查看已用量

问题分析

我查了一下当前的计费逻辑:

设计流程
问题分析
  1. 步骤 1:计算用量、账单或套餐状态
  2. 步骤 2:读取用户套餐、调用量和当前计费周期
  3. 步骤 3:根据套餐、用量和支付状态选择计费处理路径
  4. 步骤 4:写入账单、权益或超额记录,并保留对账依据
关注点:计费准确性、幂等处理、账单追溯和用户提示。

问题:

  1. 使用月度统计表,数据有延迟
  2. 无法精确计算超额时间点
  3. 用户无法实时监控自己的用量

改进方案

实时用量追踪

不再依赖月度统计表,而是实时追踪:

设计流程
实时用量追踪
  1. 步骤 1:计算用量、权益、超额费用或账单状态
  2. 步骤 2:更新计费周期内的用量汇总和账单状态
  3. 步骤 3:计算用量、账单或套餐状态
  4. 步骤 4:校验身份、密钥或权限
关注点:计费准确性、幂等处理、账单追溯和用户提示。

实时查询用量

设计流程
实时查询用量
  1. 步骤 1:读取用量并判断是否超过配额
  2. 步骤 2:更新计费周期内的用量汇总和账单状态
  3. 步骤 3:计算用量、账单或套餐状态
  4. 步骤 4:校验身份、密钥或权限
关注点:计费准确性、幂等处理、账单追溯和用户提示。

超额预警

用量达到 80% 时预警

设计流程
用量达到 80% 时预警
  1. 步骤 1:读取用量并判断是否超过配额
  2. 步骤 2:读取用量并判断是否超过配额
  3. 步骤 3:生成账单记录并保留补偿、追溯和对账依据
  4. 步骤 4:更新计费周期内的用量汇总和账单状态
关注点:计费准确性、幂等处理、账单追溯和用户提示。

超额限制

硬限额 vs 软限额

设计流程
硬限额 vs 软限额
  1. 步骤 1:读取用量并判断是否超过配额
  2. 步骤 2:计算用量、权益、超额费用或账单状态
  3. 步骤 3:更新计费周期内的用量汇总和账单状态
  4. 步骤 4:写入队列并异步消费
关注点:计费准确性、幂等处理、账单追溯和用户提示。

精确账单生成

相关数据模型

使用实时数据生成账单

设计流程
使用实时数据生成账单
  1. 步骤 1:生成账单并记录计费明细
  2. 步骤 2:更新计费周期内的用量汇总和账单状态
  3. 步骤 3:计算用量、账单或套餐状态
  4. 步骤 4:校验身份、密钥或权限
关注点:计费准确性、幂等处理、账单追溯和用户提示。

用量仪表盘

本月用量

正常
已用 7,500限额 10,000
75.0%
当前套餐
基础版
日限额
333 次/天
剩余可用
2,500 次
超额调用
0 次
预估超额费用
¥0.00
计费周期
2024-03
上线前多想一步
  • 会不会重复扣费? 同一次调用、同一张账单,重试多次也只能算一次。
  • 账单算错怎么办? 要能追到每一笔超额费用来自哪次调用,而不是只给一个总数。
  • 用户申诉怎么查? 客服至少能看到用量时间线、套餐变化和扣费明细。

当前架构