服务并发(分块)请求时的Google CDN行为

时间:2018-10-08 20:07:41

标签: google-cloud-cdn

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

  • 让我们假设我有一个后端服务,用于提供分块的HTTP数据。为了便于说明,我们假设处理单个请求最多需要10秒

  • 让我们想象一下这样的情况:客户端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,祝您愉快!

Jeannot

2 个答案:

答案 0 :(得分:0)

请务必注意,GFE历史上仅缓存完整的响应,并将每个响应存储为一个单元。结果,当前行为将遵循选项A。您可以查看more details的此帮助中心文章。

但是,随着当前在Beta中引入的块缓存的引入,大型响应主体被视为一系列块,每个块都可以独立缓存。大小小于或等于1 MB的响应主体可以作为一个单元进行缓存,而无需使用块缓存。大于1 MB的响应主体永远不会作为一个单元进行缓存。此类资源将使用块缓存来缓存,或者根本不缓存。

仅支持字节范围服务的资源才有资格进行块缓存。 GFE仅缓存收到的块数据,以响应它发起的字节范围请求,并且GFE仅在收到指示原始服务器支持该资源的字节范围服务的响应后才启动字节范围请求。

更清楚地说,将块缓存放入GA中后,您将可以实现首选的选项C。

答案 1 :(得分:0)

不幸的是,关于您最近的查询,目前仅支持字节范围服务的资源才有资格进行块缓存。您绝对可以在Google Issue Trackers上为您的用例创建功能请求。

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