实习的第一个月里在数据迁移上花了很多时间,刚开始看着各种术语“ugc”、“cdn”、“双写”、“回源”,一脸懵圈,不知道如何下手。现在验证暂且告一段落,虽然整个验证过程大多也不过是简单比对迁移前后的域名关键字,但为了更好地理解业务中涉及的技术,本文重点梳理了一下CDN相关的知识。

一、CDN
1.1 CDN的定义及原理
CDN(content delivery network),即内容分发网络,是承载流量、下载服务的一层智能虚拟网络,基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输更快、更稳定。
在互联网产品的应用场景下,CDN的核心理念是“分享”和“提速”。

当正常访问未使用CDN的网站时,过程如下:
图片说明

CDN网络在用户与服务器之间增加了cache层,通过接管DNS来将用户请求引导到cache上获得源服务器的数据。
类比场景:人➡️水壶➡️水房,水房里的水是用户请求的资源,而水壶就是各个缓存节点。
使用CDN访问网站的流程图:
图片说明

  1. 用户输入域名到DNS服务器
  2. 浏览器调用域名解析库对域名进行解析,不过由于CDN对域名解析过程进行了调整,所以解析函数库一般得到的是该域名对应的CNAME记录,为了得到实际IP地址,浏览器需要再次对获得的CNAME域名进行解析以得到实际的IP地址;在此过程中,使用的全局负载均衡DNS(图片中的Tencent DNS)解析,如根据地理位置信息解析对应的IP地址,使得用户能就近访问;
    PS:CNAME被称为规范名字。这种记录允许将多个域名映射到同一个IP地址上。 举例说明:我们访问CDN资源的地址一般是a.wesingapp.com或类似的专用地址,但 使用的CDN是第三方或者另外自建的,即实际上资源的地址会是wesing.cdn,此时就需要在DNS查询时将映射后的地址再走一遍DNS解析。
  3. 浏览器在得到了最佳接入节点的缓存服务器IP后向对应的节点/缓存服务器发出访问请求
  4. 缓存服务器响应用户请求,将用户所需内容传送到用户终端。
    如果这台缓存服务器上并没有用户想要的内容,而区域均衡设备依然将它分配给了用户,那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到本地(图中7、8、9步)。

1.2 回源

  1. 定义:
    前文所叙述CDN访问资源的流程最后一步里,当缓存服务器上没有想要的资源时,就会向它上一级缓存服务器请求内容,以此类推,直到获得想要的资源。回到源服务器获取资源就叫做回源。

  2. 回源触发的场景
    1⃣️缓存服务器上没有资源
    2⃣️资源过期
    3⃣️访问的资源是不缓存资源
    4⃣️未忽略URL参数域名,使用该形式域名带参数访问资源会直接回源

  3. 回源率的定义
    回源率和缓存的命中率正好相反,回源率高,说明缓存系统的缓存命中率低。回源率分为回源请求数比例和回源流量比例两种。
    1⃣️回源请求数比例:没有缓存或缓存过期的请求以及不可缓存的请求均被作为回源请求,发往源站点服务器响应。其他的请求则由缓存系统直接使用缓存响应。其计算公式为:
    回源请求数/(回源请求数+用户发送的请求数)
    2⃣️回源流量比:计算公式为:
    回源流量/(回源流量+用户请求访问的流量)

  4. 回源率的影响
    回源率太高,会增加源站负载,也会降低访问效率。
    回源率过高也就是CDN命中率太低,常见原因:
    1⃣️源站动态资源较多,且多为不可缓存的内容,CDN只加速静态资源(H5、图片视频等)的获取
    注:有些http请求头会带有强制不缓存的命令字段,例如no-cache、no-store等,这种情况需要源站根据对应服务器框架的缓存配置规则去掉这个请求头,才可以缓存资源
    2⃣️缓存配置不合理,缓存时间太短,所以CDN频繁回源
    3⃣️资源访问量较低,文件热度不够,CDN收到的请求少,从而资源提前被CDN缓存删除

  5. 几个专业名词
    加速域名:接入CDN的域名,用户直接访问的域名地址
    源站域名:回源站时访问的地址,仅用来域名解析到具体IP地址
    回源域名(host):域名解析到具体IP地址后,源站IP上可以存在多个虚拟域名,这也是为什么需要全局负载均衡对CNAME二次解析的原因

参考文档:
https://zhuanlan.zhihu.com/p/28940451
https://juejin.im/post/5af46498f265da0b8d41f6a3