为特定位置测试 Google CDN

Test Google CDN for a certain location

我们在启用了 CDN 的 Google 存储中有视频 (mp4) 文件。这些视频是伪流式传输的(HTTP 字节范围),来自除我们的一位用户以外的所有用户。所有视频都具有相同的格式,由具有相同参数的 ffmpeg 编码。所有视频都从不同位置流式传输(特别是从美国和欧洲测试)。

只有一位来自韩国的用户报告说他无法播放某些视频,但可以很好地播放其他视频。他尝试了 3 种不同的设备(Windows、iPhone、Android 表),结果相同。他已尝试切换到移动网络 (LTE),但问题仍然存在。不知道韩国其他用户有没有同样的问题,我们那里的用户不多。

韩国的 PoP 或 GCC 节点提供的数据是否与其他地方的数据略有不同?是否可以测试与来自欧洲的韩国用户相同的 PoP、GCC 节点的 HTTP 请求?

更新: 经过与用户的更多测试,我们发现(curl)下载的视频是正确的。他也有一些新视频的问题,所以问题不在缓存中。问题出现了,当视频在末尾有索引时,播放器必须首先查找文件末尾 (HTTP byte-range)。 (但不总是,他可以播放一些结尾有索引的视频)。

从不同位置测试您的服务

数据的提供方式不会因位置而异。要从远程位置发出 HTTP 请求,我建议启动一个带有容器的 VM 实例,并配备一个现成的 VPN 服务器 (1) in a region close to the remote location you are looking for (2). In this case, it's either Taiwan or Singapore (3),最接近测试您的服务。

Google CDN 和大文件

如您所见,缓存响应的正文必须小于 10 MB,否则将不会被缓存 (5). Still, the documentation offers a tip for large files caching, towards optimising outgoing traffic with Cloud CDN Interconnect (4)。 Cloud CDN 似乎不是适合视频流的服务。你能告诉我你如何在后端处理通过 HTTP 传输的视频流吗?在响应中发送数据之前,您是否以某种方式对文件进行了分区? 您还可以检查您的日志,看看数据是从缓存发送给用户,还是从后端发送。 (6)

Google CDN 和部分内容响应

根据 (5), the only stored responses are the ones having the status code 200/203/300, etc., along with other conditions to be respected. Usually, according to RFC 7233 (7), successful partial content responses are coded with the 206 HTTP status code. This means that Cloud CDN does not implicitly support caching partial content. Still, please bear in mind that Cloud CDN does respect the RFC 7234 specifications (8),从某种意义上说,字节范围请求在使用缓存时是可选的(“缓存可以通过发出后续范围请求来完成存储的不完整响应”)。我的观点是只有完整的内容响应被缓存,而“块”的请求被代理到源服务器并且响应没有被插入缓存。