CDNetworks 的CDN Pro基于CPU成本计费彻底改变了CDN价格模型

最后更新于 2022年7月12日
CDNetworks-CDN-Pro-Revolutionizes-CDN-Price-Model-with-CPU-Cost-1536x614.jpg

背景

如今的内容分发网络 (CDN) 所做的不仅仅是缓存和内容分发。所有主要的CDN厂商都试图将他们的业务扩展到边缘计算领域。主流厂商,例如 CDNetworks 的 CDN Pro,提供编程能力,支持客户在边缘服务器上运行复杂的逻辑。一些逻辑,例如加密算法、正则表达式操作和数据压缩,可能消耗大量算力。在CDN边缘侧运行这些逻辑不仅可以减轻源站的压力,还可以显著减少延迟,提升终端用户的体验。

然而,这种趋势并未反映在CDN行业的计费方式中。大多数CDN厂商仍然主要根据流量或带宽计费。这种计费方式是几十年前创建的,当时CDN厂商的成本主要是从ISP采购带宽的成本。当CDN仅用于分发高度可缓存的大文件 (HCLF)时,这种计费方式是合理。然而,如今CDN早已不局限于处理高度可缓存的大文件。一台CDN缓存服务器用于处理可缓存的大文件时,通常可以轻松跑到40Gbps的单机带宽;但是,要加速跨越太平洋的动态API服务时,同样的带宽量级可能需要500台服务器才能满足。CDN厂商的数据中心成本在很大程度上与服务器数量成正比。不同业务在资源消耗方面的巨大差异给CDN厂商及其客户带来了许多定价上的挑战。

为确保盈利,CDN厂商必须将除带宽外的其它成本转化为每GB流量或每Mbps带宽的成本。但在客户的域名上线加速之前,几乎无法准确估计它将产生的成本。客户通常可以提供域名预计消耗的流量或带宽,但他们无法知道需要多少台服务器。而且,服务客户域名产生的机器消耗可能随着客户更改业务逻辑而变化。根据传统计费方式来设定价格具有很大的不确定性。因此,几乎不可能制定出对所有客户和业务类型都公平的价格手册。但解决方案非常简单:引入基于CPU消耗收费的计费方式。基于CPU计费从云计算诞生之初就一直是云计算的计费项目。因此,它被边缘计算所采用也就不足为奇了,这正是CDN正在发展的方向。

它是如何工作的?

由于CDN平台的资源在多个客户之间共享,因此衡量每个客户的资源消耗情况并不容易。即使是流量这个最常用的计费项,也只有应用层的数据才能准确统计。在应用层以下收集网络开销并将其归到相应的客户是非常棘手的,因此大多数厂商直接放弃这么做。衡量每个客户消耗的CPU则更具挑战性。然而,早在2016年CDN Pro项目开始时,我们就将此确定为必备功能。当我们决定基于NGINX构建边缘服务器时,我们的团队对NGINX的开源版本进行了大量的更改。

NGINX采用“事件驱动、非阻塞”的架构。每个请求在等待I/O时都会进入“休眠状态”,当某些数据准备好处理时被唤醒,然后在处理完成时再次进入休眠状态。这可能在请求处理的生命周期中发生多次。我们在Linux上使用函数 clock_gettime()来获取每个请求在每个活动间隔上花费的CPU时间(以纳秒为单位)以及在此过程中累积的时间。在请求的生命周期结束时,我们将该请求消耗的总CPU时间写入访问日志,就像我们在日志中写入响应字节数一样。除访问日志外,CPU时间也写入流量日志,以便于生成实时的域名粒度的CPU消耗数据。

这个方式可以准确计量NGINX进程在每个请求上消耗的CPU时间。所统计到的CPU时间,不包括处理以下事务的消耗:

  • 内核处理来自网卡或其他I/O设备的中断。
  • NGINX主进程执行的公共任务。
  • 运行在同一台服务器上的其他服务,如日志预处理、监控等。

数据

如上所述,CDN Pro平台按请求粒度采集每个请求消耗的CPU时间,并支持按域名统计查询每个域名消耗的CPU时间。有关详细信息,请参阅API文档。根据流量我们可以推导出带宽,也就是将某个时间段统计到的总响应字节数除以时间间隔得到对应时段的带宽。同理,对于CPU消耗,可以将某个时间段统计到的总CPU时间除以时间间隔得到对应时段消耗的CPU核数。另一个有趣的指标是每个请求平均消耗的CPU时间。根据CDN Pro所服务的域名,这个指标通常在几微秒到几秒之间变化。以下是影响该指标的几个主要因素:

TLS 握手:以下图表显示了按连接顺序分组的每个请求平均消耗的CPU时间。带有标签“1”的曲线对应于每个连接中的第一个请求。它与后续第“2”、“3”和“4”个请求之间的差异反映了TLS握手所消耗的CPU时间。我们可以看到,使用RSA-2048证书的RSA连接平均消耗大约2.0毫秒。相比之下,使用ECDSA-256证书的EC连接大约消耗0.9毫秒。

TLS-handshake-1024x415.png Average-CPU-Time-by-order-in-an-EC-connection-1024x428.png

TLS 复用:如果TLS连接被多个请求复用,则握手的消耗由所有这些请求分担。

缓存命中状态:缓存命中时,一个请求通常消耗较少的CPU时间,如下图所示:

Average-CPU-Time-by-cache-status-1024x417.png

响应的大小:更大的文件响应通常会消耗更多的CPU时间:

Average-CPU-Time-by-response-size-1024x423.png

要确定响应固定数据量所需的CPU消耗,可将CPU时间除以流量。不同业务的不同域名之间存在显著差异。如下表所示,对于高度可缓存大文件的域名,每GB流量消耗不到1秒的CPU时间;对于高度动态的API服务,每GB流量可能需要数百倍的CPU消耗。

以下是从CDN Pro客户域名观测到的数据。“CPU 时间”列表示处理每GB流量所消耗的 CPU 时间。

(为了保护隐私,隐藏了真实域名。)

域名 内容类型 CPU 时间
域名1 动态API服务 453.66 秒
域名2 动态API服务 315.72 秒
域名3 动态API服务 66.06 秒
域名4 动态API服务 65.78 秒
域名5 动态API服务 29.84 秒
域名6 动态API服务 25.19 秒
域名7 动态API服务 18.81 秒
域名8 高度可缓存大文件 7.20 秒
域名9 高度可缓存大文件 2.60 秒
域名10 高度可缓存大文件 2.12 秒
域名11 高度可缓存大文件 1.75 秒
域名12 高度可缓存大文件 1.56 秒
域名13 高度可缓存大文件 801.98 毫秒

计费

上面的数据清楚地说明了第一部分提出的观点。仅根据流量进行计费是不准确、不公平的。这种计费方式类似于仅根据重量对超市中的所有商品进行收费。引入按CPU时间计费可确保准确对每个客户就其消耗的资源合理收费。 CDNetworks 网站已经正式介绍了这种新的计费方式。基于HTTPS请求数的计费项将被取消,因为基于CPU时间计费更能准确反映资源消耗。同时,所有节点组的流量单价将显著降低。敬请期待!

免费试用
CDNetworks

我们的多数产品都有14天的免费试用。无需信用卡。

探索更多

云安全

CDNetworks WAF 主动防御严重 React 漏洞 CVE-2025-55182

2025 年 12 月 3 日(美国东部时间),React 服务器组件中发现了一个严重安全漏洞,CVSS 评分为 10.0。

了解更多 »
云安全

CDNetworks WAAP:基于人工智能的 Web 应用程序和 API 保护

CDNetworks 始终以创新为驱动力,不断应对数字生态系统中 WAAP 面临的新挑战。本文将带您了解我们的 WAAP 方案核心功能与优势。

了解更多 »