首页 > 解决方案 > 当 2 次命中 CloudFront 上的同一路径时的预期缓存行为

问题描述

所以假设我有一个 CloudFront 分配,/path1然后我/path1很快就会再次打电话。流量将是

但是,如果 CloudFront 有 2 个并行命中怎么办。同时,当第二个请求在第一个请求完成之前到达 CloudFront 时,CloudFront 还没有缓存的响应。它会等待第一个请求完成并返回吗?或者两个请求都会命中服务器?


查看我的 NGINX 日志时,看起来当并行调用到达服务器时,它们都到达了服务器。有没有办法避免这种情况?就像流氓客户端对同一路径发出太多请求一样,我希望 CloudFront 只能向服务器发出 1 个请求并返回相同的响应。那可能吗?

标签: cachingamazon-cloudfront

解决方案


如果第一个请求仍在为客户端提供服务,则 CloudFront 尚未缓存它,第一个请求已完成,这意味着 CloudFront 从 Origin 接收到完整的数据并将其提供给客户端,它将响应保存在缓存中并进一步提供服务要求。

如果您在第一个请求完成之前发出第二个请求,它将是来自 cloudfront 的 MISS,您将看到两个请求都到达 CloudFront。

但是,如果您谈论的是并行请求突发,CloudFront 有一种方法来处理它们:

同一对象的同时请求

“当 CloudFront 边缘站点收到对某个对象的请求,并且该对象当前不在缓存中或该对象已过期时,CloudFront 会立即将请求发送到您的源。如果出现流量高峰——如果对同一对象的其他请求对象在您的源响应第一个请求之前到达边缘站点—CloudFront 在将对象的其他请求转发到您的源之前会短暂暂停。通常,对第一个请求的响应将在响应后续请求之前到达 CloudFront 边缘站点. 这个短暂的暂停有助于减少源服务器上不必要的负载。如果其他请求不相同,例如,您将 CloudFront 配置为基于请求标头或 cookie 进行缓存,CloudFront 会将所有唯一请求转发到您的源。"


推荐阅读