You need to enable JavaScript to run this app.
导航
点播 CDN 常见问题
最近更新时间:2024.10.24 11:29:51首次发布时间:2024.09.18 11:02:10

为什么用量查询流量数据与日志统计流量数据有差异?

问题现象

通过视频点播控制台用量查询页面(或 OpenAPI)查询到的加速域名使用的流量数据与通过日志统计的流量数据存在差异。

问题原因

日志统计流量是统计日志中 response size 字段记录的流量数据,只统计了应用层产生的流量,但实际产生的网络流量(网络层统计的流量)通常比应用层流量要高出 7%~15%。主要原因是网络层流量比应用层流量多了以下两个流量消耗:

  • TCP/IP 包头:应用层流量在开始网络传输之前,需要先使用 TCP 协议(传输层)封装为 TCP 数据包,再使用 IP 协议(网络层)封装为 IP 数据包,IP 数据包最大为 1500 字节,这其中包含了 20 字节的 TCP 协议包头和 20 字节的 IP 协议包头,这两个协议包头也会产生网络流量,但由于应用层无法统计到这两个包头的流量,因此日志统计流量里不包含这 40 字节。这部分包头消耗的网络流量至少占通过日志统计流量的 2.74%(按最大 IP 数据包 1500 字节,其中 TCP/IP 包头 40 字节,应用层数据 1460 字节),应用层数据越小,占比越大,通常在 3% 左右。
  • TCP 重传:由于互联网中网络情况较为复杂,在出现网络拥堵、设备故障等情况下就会出现丢包,通常有 3%~10% 的数据会被互联网丢弃,数据包被丢弃后的重传动作是由操作系统内核层的协议栈处理的,无法记录到应用层日志中,因此这部分也会产生额外的网络消耗。

基于以上两个额外的网络流量消耗,在行业惯例中,会在基于日志中 response size 字段统计出的应用层流量的基础上,再加上 7%~15% 的网络消耗来得出实际的计费流量数据(即:体现在费用账单上的数据)。视频点播取平均值 10% 做为网络消耗流量,因此实际的计费流量(也包括监控查询流量)是通过日志统计流量的 1.1 倍(即:TCP 系数 1.1)。

为什么开启 HTTP/2 协议会导致网站的流量增高?

开启 HTTP/2 协议会导致网站的流量增高,原因如下:

  • 多路复用:HTTP/2 采用了多路复用的机制,可以在单一的 TCP 连接上并行发送多个请求和响应,从而减少建立和管理多个 TCP 连接的开销。但这也意味着在同一个 TCP 连接上,所有请求和响应都会共享可用带宽,可能导致整体流量增加。
  • 头部压缩:HTTP/2 使用 HPACK 算法对请求和响应的头部信息进行压缩传输,减少了头部占用的网络带宽。但是,头部压缩本身也需要一定的计算资源,可能会增加服务器的 CPU 使用率。
  • 服务器推送:HTTP/2 允许服务器主动向客户端推送资源,这可以减少客户端的后续请求,但同时也意味着更多的数据需要通过网络传输。
  • 优先级和流量控制:HTTP/2 引入了优先级和流量控制机制,可以更好地管理资源的分配,但是这些机制的实现也会带来一定的计算开销。
  • 加密:大多数 HTTP/2 实现都要求使用 HTTPS,这意味着需要进行 SSL/TLS 的加解密处理,也会增加服务器的计算负荷。

总的来说,HTTP/2 的优化策略可以提高网站性能和用户体验,但也可能导致总体流量增加。例如,当某些原始 MP4 视频片段存在问题(如 moov 后置和音视频交织差异较大),在使用 HTTP/2 协议播放这类 MP4 资源时,需要频繁发起“起始位置-”的 range 请求以寻找与音频包匹配的 pts。这种请求消耗较大,只有在两次请求的 range 范围完全一样时才能命中缓存。存在重合的范围但 range 不同的情况时无法命中缓存,可能导致较大的流量消耗。