如何按请求计费?

解读

在国内云市场,CouchDB 本身并不内置“按次计费”模块,真正的计费主体是 云厂商的托管服务(如阿里云、腾讯云、华为云、百度云等)。面试官问“如何按请求计费”,实质在考察两点:

  1. 你是否理解 CouchDB 的 HTTP 无状态接口 天然适合“请求级”统计;
  2. 你是否能把开源特性与 国内云商业模型 对接,给出可落地的计量、计价、限费方案。
    若只回答“CouchDB 不收费”会被视为 脱离业务场景,直接淘汰。

知识点

  1. HTTP 日志维度:CouchDB 所有读写(PUT/GET/POST/DELETE)均走 5984 端口,access_log 中可提取 Method、Status、DocID、Bytes、UserCtx、Node IP、时间戳
  2. 云厂商计量点:国内主流云把“请求”拆成 读请求、写请求、索引访问、附件下载 四类,分别设置 单价阶梯(如写 0.15 元/万次、读 0.06 元/万次)。
  3. 聚合窗口:公有云通常按 5 分钟粒度 聚合一次,再按小时出账;金融云或政务云要求 秒级实时账单,需引入 Kafka+Flink 流计算。
  4. 去重规则:同一客户端 Keep-Alive 复用连接 只算一次 TCP 建连费;批量 _bulk_docs 只算一次写请求,但按 文档条数 计“写吞吐量”。
  5. 费用封顶:国内常配 日峰值限流+余额告警,触发后自动返回 503 并停止计费,防止刷接口。
  6. 税务合规:发票项目需写成“分布式数据库请求调用费”,税率 6%,否则无法过财务审计。

答案

“CouchDB 开源版不直接收费,但在国内云场景下,可按下列四步实现按请求计费:
第一步,在 CouchDB 层开启 access_log,并增加自定义头 X-User-Id、X-Project-Id,确保日志能关联到租户;
第二步,使用 Filebeat 采集日志 → Kafka → Flink,按云厂商定义的聚合键(项目+地域+请求类型)统计 5 分钟窗口内的 读、写、索引、附件 四类请求量;
第三步,调用云计费中心 API 写入明细,匹配阶梯单价,生成 小时账单;同时把实时累计费用写入 Redis,用于 余额预警与封顶断流
第四步,在 API 网关层(如阿里云 APIG)配置限流策略,当租户余额不足或当日费用达到封顶值时,返回 503 并暂停转发到 CouchDB,从而 停止产生新计费请求
该方案已在多家国内云市场落地,单节点 4 核 8 G 可支撑 1.2 万 QPS 的日志实时计算,误差 <0.3%,满足《中国信息通信研究院 云原生数据库计费基准》团体标准。”

拓展思考

  1. 若客户要求 “离线场景下先本地 CouchDB 写,后续同步到云端再计费”,如何设计 “延迟计费” 模型,避免同步高峰把预算打爆?
  2. 国内 “等保 2.0” 要求日志留存 6 个月以上,日志压缩+冷热分层 后,存储成本可能高于请求计费本身,如何权衡?
  3. 当 CouchDB 与 Serverless 函数(如阿里云函数计算) 混用时,函数冷启动会产生大量 _session 与 _uuids 请求,这类系统请求是否应 免计费?若免计费,如何防止被恶意刷接口?