【性能优化,打造亿级秒杀系统】- (三)静态资源CDN引入

Cache Control 响应头

告诉客户端我这个http请求的response 可不可以缓存,以什么样的方式缓存

  • privtae (客户端可以缓存)
  • public(客户端和代理服务器可以缓存)
  • cache-control:max-age=3418551
    从服务器端返回的,代表的是缓存时间,缓存将在***秒后失效
  • no-cache(缓存本次结果,下次请求的时候强制向服务端再验证一次)
  • no-store(不缓存请求的任何返回内容)

有效性判断

  • ETag
    资源唯一标识,服务器端返回。由资源做一个MD5加密生成的。
  • If-None-Match
    客户端发送的匹配ETag标识符。用来与服务器缓存的ETag 结果进行对比。如果服务器返回304,则代表该资源有效可以继续使用。返回200则需要重新请求。
  • Last-Modified
    资源最后被修改时间,服务器端返回
  • If-Modified-Since
    客户端发送的匹配资源最后修改的时间标识符,大于Last-Modified 就有效,反之无效。如果服务器返回304,则代表该资源有效可以继续使用。返回200则需要重新请求。

浏览器的三种刷新方式

  • 回车刷新或者a链接
    看cache-control 中的max-age是否有效,有效则为from cache,若cache-control 中为no-cache 则进入缓存协商逻辑(看last-modiified 与 ETag)
  • F5 刷新或者Commond+R刷新
    去掉cache-control 中的max-age 或者设置为0,然后进行缓存协商逻辑
  • ctri+F5(Windows) 或者commond+shift+R 刷新
    去掉cache-control和协商头,强制刷新。

协商机制

比较ETag与Last-Modified 到服务端,若结果不变则返回304 不返回数据,变化则返回200,返回数据。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

CDN自定义缓存策略

  • 可自定义目录过期时间
  • 可自定义后缀名过期时间
  • 可自定义对应权重
  • 可通过界面或者API强制cdn 对应目录刷新(不一定确保成功,有数量限制)
    在这里插入图片描述

静态资源部署策略(一)

  • css.js,img等元素使用版本号部署 例如a.js?v=1.0,但是不便利,维护困难,html的cache-control 加上no-cache ,
  • css.js,img等元素使用带摘要部署,例如a.js?v=45ewsda(用hash函数加上hashcode) 这样会出现先部署html 还是先部署资源的覆盖问题。
  • css.js,img等元素使用摘要作文件名部署,例如:45ews.js.xo.新老版本可并存并可回滚,资源部署完成后再部署html。

在没有引入CDN的时候我们对静态文件页面进行一次压测:
样本:969 平均2169ms TPS 28

【性能优化,打造亿级秒杀系统】- (一)项目部署

DNS 用CNAME 解析到源站

回源缓存设置

强推失效

发布了118 篇原创文章 · 获赞 5 · 访问量 8732

猜你喜欢

转载自blog.csdn.net/weixin_43672855/article/details/104495499