Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

HEAD 请求对 CDN 预热

  对于秒杀活动而言,有很多东西是只有在某一个时刻开始才能展示给用户并让用户操作的。如果这些资源都在同一个时刻被请求,那么什么服务器都挡不住。所以这种情况就需要程序提供一个预热机制。后端程序的预热很简单,只要服务器自己跑个脚本就可以搞定,可是到了 CDN 上怎么办呢?
  CDN 上的资源是无法通过服务器跑脚本的方式来预热的。因为 CDN 节点分布在全国各地,服务器只有有限个外网 IP 的话永远都只有那么几个 CDN 节点被预热,所以这条路是走不通的。
  另一方面,很多 CDN 本身也提供了预热的功能,但是预热的 API 有调用次数限制,使用它会让程序多出一些不确定因素。而且预热的 API 并不能解决所有问题,比如有几十上百万个的 URL 需要预热,这么大规模地调用 API 再推送到全国的节点并不是一件可以在几分钟内搞定的事情,也许需要几小时甚至更久。而且如果数据是区域敏感型的,很多时候完全没必要把数据全量同步到全国。每个地区实际上只会用到数据那个地区的数据而已。
  对于 CDN 的预热,只有让用户自己做才是最真实也是最快的。但是考虑到如果用户端后台加载这些预热数据会有流量损耗的问题,所以使用 HEAD 方法来请求,避免不必要的内容传输。而且作为具有缓存功能的代理服务器,它们是会将 HEAD 请求使用 GET 的方式发送到原始服务器并缓存结果的。
  HEAD 请求对于客户端而言的代价甚至比 UBT 还小,所以基本上可以忽略它。而且具体实现中也不会让所有用户都去预先请求所有数据,而是设置一个概率,随机让部分用户去请求随机的部分数据,这样可以把影响降到更低。
网名:
34.203.245.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^