0

我试图了解 Google CDN 在以下情况下的行为:

  • 假设我有一个提供分块 http 数据的后端服务。为了便于解释,我们假设服务单个请求最多需要 10s

  • 假设客户端 A 通过 CDN 请求文件,并且该文件当前未缓存在 CDN 中。该请求将转到后端服务,该服务开始提供文件。客户端 A 将立即开始接收 HTTP 块

  • 5s 后,另一个客户端 B 请求相同的文件。我可以设想 3 种可能的行为,但我不知道如何通过 CDN 配置来控制它:

选项 a:CDN 只是将请求传递给后端服务,而忽略文件的一半已经被服务并且可能已经被缓存。不可取,因为后端服务将被访问两次并两次提供相同的数据。

选项 b:CDN 将第二个请求置于“暂停”状态,等待第一个请求终止,然后再从其缓存中为客户端 B 提供服务(在这种情况下,请求 B 不会到达后端服务)。好的,但仍然不令人惊讶,因为客户端 B 在获取任何 http 数据之前会等待 5 秒。

选项 c:CDN 立即提供前半部分 http 块,然后以与请求 A 相同的速度提供剩余的 http 块。理想!

关于当前行为的任何想法?我们可以做些什么来获得选项 C,这是迄今为止我们的首选选项?

Tnx,祝你有美好的一天!

让诺

4

2 回答 2

0

遗憾的是,关于您最近的查询,目前只有支持字节范围服务的资源才有资格进行块缓存。您绝对可以在Google 问题跟踪器上为您的用例创建功能请求。

好消息是,使用 Cloud CDN 进行块缓存现已推出 GA,您可以随时检查功能。

于 2018-10-12T22:00:23.887 回答
0

需要注意的是,GFE 历史上只缓存完整的响应,并将每个响应存储为一个单元。因此,当前行为将遵循选项 A。您可以查看此帮助中心文章了解更多详细信息

然而,随着目前处于 Beta 阶段的块缓存的引入,大型响应主体被视为可以独立缓存的块序列。大小小于或等于 1 MB 的响应正文可以作为一个单元进行缓存,而无需使用块缓存。大于 1 MB 的响应正文永远不会作为一个单元缓存。此类资源将使用块缓存进行缓存或根本不缓存。

只有支持字节范围服务的资源才有资格进行块缓存。GFE 仅缓存响应其发起的字节范围请求而接收到的块数据,并且 GFE 仅在收到表明源服务器支持为该资源提供字节范围服务的响应后才发起字节范围请求。

更清楚地说,一旦块缓存在 GA 中,您将能够实现您的首选选项 C。

于 2018-10-10T15:45:10.497 回答