CDN 是怎么收费的:从流量、95 峰值到日峰月均,厂商和客户两边看计费
在 CDN 行业做了几年,计费几乎贯穿了我所有的工作:
- 在百度云 CDN,给头部客户出定制化账单,实现过 95 峰值、日峰月均、流量、夜间带宽减半、闲忙时等多种计费方式;
- 在字节火山 CDN,做过把客户用量推给计费中心的计量系统;
- 在字节融合 CDN,站在采购方一侧,和多家 CDN 厂商对账,再把采购成本分摊给内部业务。
同一套计费规则,厂商关心的是「怎么收」,客户关心的是「怎么付得最少」。这篇把常见的计费方式整理一遍,并用一个月的模拟数据算一算,不同方式到底差多少。
说明:各家厂商的具体规则(采样粒度、时段划分、取整方式等)以合同和官网为准,本文讲的是通用的思路。文中的数据都是模拟的。
一、两大类:按流量,还是按带宽
CDN 的计费方式,归根结底分两类:
- 按流量:这个月一共传了多少数据(GB、TB),用多少付多少;
- 按带宽:这个月「最高」用到了多大的带宽(Mbps、Gbps),按这个高度付费。至于「最高」怎么定义,就衍生出了下面的各种方式。
为什么会有按带宽计费?因为 CDN 厂商自己的成本,很大一部分就是按带宽算的:机房、运营商出口都要按峰值准备容量,峰值再短,资源也得提前备好。按带宽向客户收费,是把这个成本结构传导下去。
二、计费的基础:5 分钟一个点
除了纯流量计费,几乎所有带宽类的计费都基于同一份数据:每 5 分钟一个带宽点。
做法是统计这 5 分钟内的总流量,除以 300 秒,得到这 5 分钟的平均带宽:
一天 288 个点,30 天的月份 8640 个点,所有带宽类计费都是在这 8640 个点上做文章。我在火山 CDN 做计费推量时,带宽计费的客户就是每 5 分钟推一个点给计费中心。
为了让后面的对比有个参照,我模拟了一个客户一个月的带宽:白天有个小高峰,晚上 21 点左右是大高峰,每天的波动在 ±5% 以内;另外第 11 天晚上有一场直播活动,带宽在一个小时里冲到了平时的两倍多。
三、按流量计费
最直观的方式:把一个月所有的流量加起来,乘以单价。单价通常是阶梯价,用量越大越便宜。
模拟客户一个月的平均带宽约 472 Mbps,对应的流量约 153 TB。
带宽和流量之间有一个很好记的换算:1 Mbps 的带宽跑满一个 30 天的月,大约是 324 GB 流量。
这个数后面算「该选哪种计费方式」时会用到。
四、按带宽计费的几种方式
用同一份模拟数据,各种带宽计费方式算出来的计费带宽如下:
| 计费方式 | 怎么算 | 计费带宽(Mbps) |
|---|---|---|
| 月峰值 | 8640 个点里的最大值 | 1589 |
| 日峰值月平均 | 每天取最大值,30 个值求平均 | 756 |
| 月第四峰值 | 每天取最大值,30 个值里排第四大的 | 734 |
| 95 峰值 | 8640 个点去掉最高的 5%,剩下的最大值 | 678 |
| (参考)月平均带宽 | 8640 个点的平均值 | 472 |
同一个客户、同一个月,不同算法的计费带宽能差一倍多。下面逐个说。
1. 月峰值:最简单,也最「贵」
直接取整个月的最大值。问题很明显:第 11 天那一小时的直播,把计费带宽从六七百拉到了将近 1600,客户要为一个小时的尖峰付一整个月的钱。所以纯月峰值计费很少见。
2. 95 峰值:行业最主流
把 8640 个点从大到小排序,去掉最高的 5%(432 个点),第 433 个点就是 95 峰值。
5% 的点相当于一个月里约 36 个小时可以「超标」不算钱。偶发的突发流量,比如一场活动、一次发版,基本都会落在这 5% 里被去掉。模拟数据里,那场直播完全没有影响 95 峰值。
95 峰值对客户和厂商都比较公平:客户的偶发尖峰被容忍了,厂商又能按接近真实容量需求的水平收费。这也是为什么运营商和 CDN 厂商之间、CDN 厂商和大客户之间,绝大多数都用 95 结算。
也正因为 95 这么普遍,才有了「按 95 结算的总成本,怎么分摊给共享带宽的多个客户」这个问题,这就是我那项专利要解决的,见《我的第一项专利:用「95 区间」把 CDN 带宽成本分得更准》。
3. 日峰值月平均:每天的高峰都要付钱
每天取一个峰值,再对一个月的日峰值求平均:
它对单日尖峰比月峰值宽容:那场直播只抬高了一天的峰值,被 30 天一平均就摊薄了。但它对「每天都有高峰」的业务不友好,每天晚高峰的那个最高点都被计入。模拟数据里,日峰月均(756)比 95 峰值(678)高出约 11%。
日峰月均更适合带宽曲线每天都很平稳的客户,比如下载、点播类业务;对于有明显晚高峰、偶尔还有活动的业务,95 通常更划算。
4. 月第四峰值
每天取峰值,然后取一个月里第四大的那个。意思是一个月里可以有 3 天「超标」不算。它介于月峰值和日峰月均之间,一些云厂商把它作为可选的计费方式。
5. 夜间带宽减半
在合同约定的夜间时段(比如凌晨),带宽按一半计入,再参与 95 或其他方式的计算。这是一种鼓励客户把预热、批量下发这类可以错峰的流量挪到夜间的手段,对厂商来说,夜间本来就是带宽的低谷,闲着也是闲着。
要注意的是,它只对高峰落在夜间的客户有意义。模拟客户的高峰在晚上 21 点,夜间本来就不在前 5% 里,所以开不开夜间减半,95 峰值都是 678,没有变化。
6. 闲忙时计费
把一天分成忙时和闲时两段,分别计算计费带宽,或者用不同的单价。思路和夜间减半一样:用价格引导客户错峰,让厂商的带宽资源在一天里用得更均匀。
五、其他计费方式
- 请求数计费:按请求次数收费,常见于 HTTPS 请求、动态加速、边缘计算等场景,因为这些场景的成本更多花在 CPU(TLS 握手、回源、计算)上,而不是带宽上。在火山 CDN 计费推量里,QPS 计费的客户就是按小时推送请求数据。
- 增值服务单独计费:比如 HTTPS、WAF、实时日志、图片处理等,一般单独计价,不并入带宽或流量。
六、容易忽略的细节
账单对不上,很多时候不是计费方式本身,而是这些细节:
1. 计费区域。 不同区域的带宽成本差别很大,海外普遍比国内贵,各区域通常分别计费:国内的 95 和海外的 95 各算各的,单价也不同。一个客户的流量往海外迁移,即使总量不变,账单也会上涨。
2. 包头系数。 CDN 计费的流量来自节点日志,记录的是应用层(HTTP)的数据量;而实际在网络上传输时,还有 TCP/IP 包头、重传、TLS 握手等开销。所以很多厂商会在日志流量上乘一个大于 1 的包头系数,来近似网络层的真实流量。我在字节做火山 CDN 的计费核对时,包头系数就是独立核算计费值时必须考虑的因素之一。
3. 统计口径和时间。 5 分钟的点是按什么时区切分的?月份按自然月还是账期?有的厂商对 95 的取点规则有细微差别(比如 8640 个点还是按实际天数)。这些在厂商和客户之间对账时,都要事先对齐,否则差几个点就会对不上。
4. 多个域名、多个项目合并计算。 一个客户有多个域名,是先把所有域名的带宽在每个 5 分钟点上加起来,再算 95;还是每个域名各算 95 再相加?两者结果不同:前者因为各域名的高峰可能错开,通常更低。合同里一般约定按客户(或按项目)合并计算。
七、站在两边看:该选哪种计费方式
站在客户这边,选择的关键是带宽利用率,也就是平均带宽和计费带宽的比值:
利用率高,说明带宽曲线平,按带宽买更划算;利用率低,说明大部分时间带宽是闲着的,按流量买更划算。具体的平衡点,可以用前面那个换算来算:
把它和流量单价比一比,就知道哪种更便宜。模拟客户按 95 算的利用率约为 472 ÷ 678 ≈ 70%,曲线很平,按带宽计费大概率更划算。
站在厂商这边,我做账单时最深的体会是:计费方式本质上是把自己的成本结构翻译给客户。厂商向运营商按 95 付费,就倾向于向客户按 95 收费;夜间带宽闲置,就推出夜间减半;HTTPS 消耗 CPU,就按请求数收费。理解了厂商的成本在哪里,就能理解每一种计费方式为什么存在,作为客户也就知道该怎么谈价格了。
95 计费还带来了一个有意思的现象:高峰和大盘错开的客户,接入后几乎不增加厂商的成本,厂商因此可以把同一份带宽卖给多个客户。这就是错峰和超卖,详见《CDN 的错峰与超卖》;接入新客户前怎么据此测算最低价,见《CDN 新客户接入前的价格测算》。
站在采购方内部,比如字节融合 CDN 这样同时向多家厂商采购、再分给内部业务的平台,还要多解决一个问题:厂商按整体 95 收的钱,怎么公平地分给每个业务、每个域名。单纯取 95 时间点那一刻的占比会失真,这也是我后来设计「95 区间」分摊算法的起点。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!




