caching - 当 2 次命中 CloudFront 上的同一路径时的预期缓存行为
问题描述
所以假设我有一个 CloudFront 分配,/path1
然后我/path1
很快就会再次打电话。流量将是
- 第一个请求是 CloudFront 未命中并转到服务器
- 第二个请求是 CloudFront 命中
但是,如果 CloudFront 有 2 个并行命中怎么办。同时,当第二个请求在第一个请求完成之前到达 CloudFront 时,CloudFront 还没有缓存的响应。它会等待第一个请求完成并返回吗?或者两个请求都会命中服务器?
查看我的 NGINX 日志时,看起来当并行调用到达服务器时,它们都到达了服务器。有没有办法避免这种情况?就像流氓客户端对同一路径发出太多请求一样,我希望 CloudFront 只能向服务器发出 1 个请求并返回相同的响应。那可能吗?
解决方案
如果第一个请求仍在为客户端提供服务,则 CloudFront 尚未缓存它,第一个请求已完成,这意味着 CloudFront 从 Origin 接收到完整的数据并将其提供给客户端,它将响应保存在缓存中并进一步提供服务要求。
如果您在第一个请求完成之前发出第二个请求,它将是来自 cloudfront 的 MISS,您将看到两个请求都到达 CloudFront。
但是,如果您谈论的是并行请求突发,CloudFront 有一种方法来处理它们:
“当 CloudFront 边缘站点收到对某个对象的请求,并且该对象当前不在缓存中或该对象已过期时,CloudFront 会立即将请求发送到您的源。如果出现流量高峰——如果对同一对象的其他请求对象在您的源响应第一个请求之前到达边缘站点—CloudFront 在将对象的其他请求转发到您的源之前会短暂暂停。通常,对第一个请求的响应将在响应后续请求之前到达 CloudFront 边缘站点. 这个短暂的暂停有助于减少源服务器上不必要的负载。如果其他请求不相同,例如,您将 CloudFront 配置为基于请求标头或 cookie 进行缓存,CloudFront 会将所有唯一请求转发到您的源。"
推荐阅读
- c - 为什么函数调用即使在调用之前没有定义也能工作?
- css - 如何在自动调整父级大小的同时在子级上使用 transform: translateY?
- javascript - 如何在子窗口的父窗口中运行脚本?
- javascript - 与nextjs在同一页面上链接页面
- javascript - JSON 不会被数组中的变量解析
- javascript - 错误:
属性 dy:预期长度,“NaN” - Raphael.js - sonata-admin - 奏鸣曲管理员缺少 css 文件
- python - 使用访问令牌请求 Bitbucket API
- bash - Bash 脚本:复制特殊变量 $@
- c - 在C中将int值添加到字符串