我的第一项专利:用「95 区间」把 CDN 带宽成本分得更准

2289 字
11 分钟
我的第一项专利:用「95 区间」把 CDN 带宽成本分得更准

这是我在字节跳动做 CDN 成本分摊时设计的一套算法,后来申请了专利,并在中国和美国都拿到了授权。我是第一发明人。这篇文章不讲法律文本,用大白话说清楚它解决了什么问题、是怎么做的。

专利信息#

中国美国
名称CDN中的信息处理方法、系统、设备和存储介质Method and system for processing information in CDN, device, and storage medium
专利号CN117061354BUS12375742B2
申请日2023-10-102024-10-10
授权日2024-01-122025-07-29
专利权人北京火山引擎科技有限公司Beijing Volcano Engine Technology Co., Ltd.
原文下载 PDF下载公开文本 PDF · USPTO 授权全文

一、问题:一份带宽账单,怎么分给很多用户?#

CDN 厂商(或者一家公司内部采购 CDN 的平台)买的是一整份带宽,再给很多用户、很多域名共享着用。月底付给上游的带宽费用,业内最常见的计费方式是 95 峰值:

一个月里每 5 分钟采一个总带宽点,30 天共 8640 个点。从大到小排序,去掉最高的 5%(432 个点),剩下的最大值,也就是第 433 个点,就是「95 带宽值」,按它计费。

钱是按总带宽付的,接下来要回答的问题是:这笔钱里,每个用户该承担多少? 这就是成本分摊,它直接决定了每个客户的毛利、每个内部业务该被收多少钱。

二、传统做法:只看 95 那一个时间点#

常见的做法很直接:找到 95 带宽值对应的那个时间点(「95 时间点」),看每个用户在这个时间点用了多少带宽,按比例分。

比如 95 带宽值是 300,用户 A 在 95 时间点用了 100,那 A 就承担三分之一的成本。

简单,但有两个硬伤。

1. 只看一个点,不能代表整个月。 假设 95 时间点落在第 15 天,用户 A 那一刻恰好没用带宽,但第 16 到 25 天用得很猛。按这种算法,A 一分钱不用分摊,可实际上正是 A 这些天的高用量把整体带宽和成本推高了。

2. 选哪个点,结果就不一样。 总带宽曲线一天里通常有早晚两个高峰,一条水平线(95 带宽值)会和曲线交出好几个点,这几个点的总带宽都等于 95 值。随便挑一个,分摊结果可能天差地别:在 a 点 A 没用带宽,不用分摊;换成 b 点 A 用了,就要分摊。同一份账单,结果取决于运气。

三、我的做法:把「一个点」换成「一段区间」#

核心想法一句话:不看单个时间点,而是看 95 值附近的一段带宽区间里,各用户整体用了多少。

具体分四步:

  1. 采样排序:取管理周期(比如一个月)内每个采样点的总带宽值,按时间排好。
  2. 划出管理区间:在 95 带宽值附近定一个下界 A 和一个上界 B(比如 95 值上下各取一个总带宽值),总带宽曲线落在 A 到 B 之间的那些时间段,就是「管理区间」。一个月里通常会有很多段。
  3. 算占比:统计每个用户在所有管理区间里用掉的带宽,除以全部用户在这些区间里用掉的总带宽,得到这个用户的使用占比。
  4. 按占比分摊:成本按这个占比分给各个用户。

下面是专利中的图 7,说明管理区间是怎么划出来的:

专利图 7:在 95 带宽值上下取阈值 A、B,总带宽曲线落在两条虚线之间的时间段 a1–a2、b1–b2、c1–c2、d1–d2 就是管理区间
专利图 7:在 95 带宽值上下取阈值 A、B,总带宽曲线落在两条虚线之间的时间段 a1–a2、b1–b2、c1–c2、d1–d2 就是管理区间

95 带宽值是图中的实线,A、B 是它下方和上方的两个阈值。总带宽曲线每次穿过 A、B 之间这条带,就形成一段管理区间。一天有早晚两个高峰,每个高峰的上坡和下坡各穿过一次,所以这里有 a1–a2、b1–b2、c1–c2、d1–d2 四段;一个月下来,就是几十上百段。

第 3 步有两种算法,可以按需选择:

  • 累加法:直接把区间内各采样点的带宽值加起来。用户 A 的占比 = A 在区间内各点带宽之和 ÷ 区间内各点总带宽之和。计算简单,省算力,工程上最常用。
  • 积分法:把总带宽和每个用户的带宽分别拟合成曲线,用区间内曲线下的面积来算占比。精度更高。

专利中的图 6 把积分法画得很直观:

专利图 6:用户 A、B、C 的带宽依次叠加成三条曲线,竖条是管理区间,每条竖条里不同灰度的面积就是各用户在区间内的用量
专利图 6:用户 A、B、C 的带宽依次叠加成三条曲线,竖条是管理区间,每条竖条里不同灰度的面积就是各用户在区间内的用量

  • 最下面的曲线是用户 A 的带宽;中间是 A 和 B 叠加;最上面是 A、B、C 三者叠加,也就是总带宽;
  • 顶部横着的浅灰色带,就是 95 值附近的阈值带,竖向的四根条带就是管理区间;
  • 在每根条带里,从下往上三种灰度,分别是 A、B、C 在这段时间里的用量(曲线下的面积);
  • 某个用户的使用占比 = 他在所有条带里的面积之和 ÷ 所有条带的总面积。

这就像微积分里用面积来累计一段时间内的量:看的不是某一个瞬间谁用得多,而是整段高峰期里,每个人贡献了多少。

另外还有一个约束:区间内的采样点数量,占整个周期采样点的比例不能低于某个阈值。区间太窄、点太少,结果又会退化成「只看几个点」。

四、为什么这样更准#

回到前面的两个例子:

  • 用户 A 在 95 时间点没用带宽,但在区间里其他时间点用了:传统做法判定 A 不用分摊,区间法会把 A 的用量算进去。
  • 有好几个点都等于 95 值:区间法本来就把这些点都包含在内,不存在「挑哪个点」的问题,结果是稳定的。

还有一个实际业务中很常见、单点法处理不好的情况:按流量计费的客户,以及月中才接入的客户。

CDN 厂商和上游运营商结算带宽,通常是按所有客户叠加后的总带宽取 95 值。但下游客户的计费方式各不相同:有的客户和我们按带宽结算,有的按流量结算。按流量计费的客户,他付给我们的钱和 95 无关,可他的带宽一样叠加在总带宽曲线上,一样抬高了我们付给运营商的 95 值,理应分摊这部分成本。

单点法在这里很容易失真:

  • 一个月中才接入的客户,如果 95 时间点落在他接入之前,他在那一刻的带宽是 0,就一分钱成本都分不到;
  • 按流量计费的客户用量往往不规律,95 时间点恰好赶上他的低谷,分到的成本也会远低于实际。

但他们在月内的其他高峰期,确实贡献了相当一部分 95 值以上的打点。区间法覆盖的是整个月里所有的高峰区间,只要客户在这些时段有用量,就会按比例分到成本。这样算出来的客户毛利更真实,能减少「看起来很赚钱、其实在亏钱」的误判。

同时,区间是围绕 95 值划定的,保留了 95 计费的业务含义:分摊的依据依然是决定账单的那段高峰期用量,而不是全天的平均用量。

简单说,它既延续了 95 计费的逻辑,又解决了单点分摊不准、不稳的问题,对各种计费方式、各种接入时间的客户都能给出合理的成本。

五、落地情况#

这套算法最早是我在字节做火山 CDN 经营分析时设计的。验证的方式很朴素:和数据工程团队一起,用全量客户的计费打点数据,把几种分摊方式都跑一遍,在 Grafana 上并排对比结果,用数据说服团队采用。

后来它的使用范围不断扩大:

  • 火山 CDN 经营分析:每天定时产出客户、域名维度的成本,进一步算出收入和毛利率。
  • 融合 CDN 内部结算:字节内部各业务(头条、抖音点播直播等)按这套方法分摊二三十家 CDN 厂商的采购成本。
  • 火山多云 CDN 的 FinOps 能力:作为商用功能,帮客户把多家厂商的账单拆到域名。

数据团队后续的带宽成本分摊,也都基于这套算法实现。

六、原文下载#

  • 中国发明专利 CN117061354B:PDF
  • 美国专利公开文本 US 2025/0119603 A1:PDF
  • 美国授权专利 US12375742B2:USPTO 全文

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

我的第一项专利:用「95 区间」把 CDN 带宽成本分得更准
https://tracerzzz.cn/posts/cdn-bandwidth-cost-allocation-patent/
作者
tracerZzz
发布于
2026-10-25
许可协议
CC BY-NC-SA 4.0
相关文章智能推荐
1
CDN 的错峰与超卖:为什么厂商能把同一份带宽卖好几次
工作在 95 计费下,一个新客户接入后,大盘的 95 可能几乎不涨,这就是错峰客户。它让 CDN 厂商可以把同一份带宽卖给多个客户,也就是超卖。这篇用模拟数据讲清楚错峰和超卖,以及衡量它们的两个指标:单个客户的边际超卖倍数,和整个平台的超售比。
2
CDN 是怎么收费的:从流量、95 峰值到日峰月均,厂商和客户两边看计费
工作我在百度云 CDN 做过客户账单,在字节做过火山 CDN 的计费推量,也做过融合 CDN 向多家厂商采购的对账和成本分摊,厂商和采购两边都经历过。这篇整理 CDN 常见的计费方式:流量、带宽峰值、95 峰值、日峰月均、月第四峰值、夜间减半、闲忙时、请求数,以及计费区域、包头系数这些容易忽略的细节,并用一个月的模拟数据对比不同方式算出来差多少。
3
CDN 新客户接入前的价格测算:用波形拟合算出最低成本价
工作火山 CDN 经营分析平台上的价格测算功能:销售拿到一个新客户的带宽打点,平台把它和大盘拟合,判断客户是否错峰、算出边际超卖倍数,再结合资源诉求的加权成本和包头系数,给出不同计费方式下的最低成本价。这篇讲它的输入、计算过程、示例和后续的优化方向。
4
指标异动归因:从贡献度公式到 CDN 毛利率的层层下钻
工作整理我学习指标异动归因的过程:加法、乘法、比率三类指标分别怎么算贡献度,为什么比率指标要拆出「结构变化」,以及我在字节火山 CDN 经营分析中,如何用这套方法对毛利率、收入、成本做逐层递归归因,把收入变化拆到客户增减、用量变化和价格变化。
5
一个接口管多家 CDN:多厂商刷新预热的适配层设计
工作我在字节负责火山多云 CDN 和融合 CDN 的多厂商内容管理(刷新、预热)。这篇讲怎么用适配器模式屏蔽厂商差异,怎么在多云层做配额和限频,怎么按每家厂商的限制拆分任务,怎么用 RocketMQ、Redis、MongoDB 实现分布式下发、共享配额、重试和进度汇总,以及后来如何借助 AI 把新厂商接入时间缩短到一两天。
随机文章随机推荐

评论区

Profile Image of the Author
tracerZzz
想当木匠的程序员!
分类
标签
站点统计
文章
19
分类
9
标签
48
总字数
79,096
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
ESA Pages
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录