CDN-详解

170 阅读4分钟

是什么:

CDN - 内容分发网络。

CDN原理

用户在通过浏览器访问未使用CDN加速的网站的大致过程如下:

1195455-20181223181306732-613950785.png

  1. 用户在浏览器中输入要访问的域名。
  2. 浏览器向DNS服务器请求对该域名的解析。
  3. DNS服务器返回该域名的IP地址给浏览器。
  4. 浏览器使用该IP地址向服务器请求内容。
  5. 服务器将用户请求的内容返回给浏览器。

使用了CDN:

1195455-20181223181458607-1033911695.png

  1. 用户在浏览器中输入要访问的域名。
  2. 浏览器向DNS服务器请求对域名进行解析。由于CDN对域名解析进行了调整,DNS服务器会最终将域名的解析权交给CNAME指向的CDN专用DNS服务器。
  3. CDN的DNS服务器将CDN的负载均衡设备IP地址返回给用户。
  4. 用户向CDN的负载均衡设备发起内容URL访问请求。
  5. CDN负载均衡设备会为用户选择一台合适的缓存服务器提供服务。
    选择的依据包括:
    根据用户IP地址,判断哪一台服务器距离用户最近;
    根据用户所请求的URL中携带的内容名称,判断哪一台服务器上有用户所需内容;
    查询各个服务器的负载情况,判断哪一台服务器的负载较小。
    基于以上这些依据的综合分析之后,负载均衡设置会把缓存服务器的IP地址返回给用户。
  6. 用户向缓存服务器发出请求。
  7. 缓存服务器响应用户请求,将用户所需内容传送到用户。
    如果这台缓存服务器上并没有用户想要的内容,而负载均衡设备依然将它分配给了用户,那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉取到本地。

为什么:

解决如何将数据快速可靠从源站传递到用户的问题用户获取数据时,不需要直接从源站获取,通过CDN对于数据的分发,用户可以从一个较优的服务器获取数据,从而达到快速访问,并减少源站负载压力的目的。

如果网络上的数据都使用从源站直接交付到用户的方法,那么将极有可能会出现访问拥塞的情况。
如果能有一种技术方案,将数据缓存在离用户最近的地方,使用户以最快的速度获取,那这对于减少网站的出口带宽压力,减少网络传输的拥堵情况,将起到很大的作用。CDN正是这样一种技术方案。

怎么做:

假设这里的 CDN 域名是 cdn.example.com,源站(主站)域名是 www.example.com。

  1. 单独搭建一个静态资源服务作为 CDN 源站,在源站下划分一个路由例如 /static,LB 层将主站域名 /static 路由解析到静态资源服务即 CDN 源站上,CDN 配置成只有 /static 路由下的资源指向源站回源。
  2. 在 Webpack 生产构建配置中为所有资源文件中加上 hash,并设置 publicPath//cdn.example.com/static/path/to/dist
  3. 在构建流水线中于 Webpack 构建完成后加一步增量上传产物文件夹下的内容到静态资源服务源站上的步骤,并将 html 文件存起来记上版本号。
  4. 主站用 Nginx / Apache 等静态资源服务器或者用 Node.js 写个简单的服务在对应的访问路由返回步骤 3 中构建产物的 html 文件。
  5. 主站对 html 配置无缓存(某些情况下也可以加上协商缓存),CDN 则可以把缓存时间设置的尽可能的长。

在这样一种方案下,用户访问对应路由时,由主站的服务器返回 index.html,并去 CDN 上获取静态资源文件即可

具体实操 - 待增加

www.zhihu.com/question/32…

总结

在网站和用户之间引入CDN之后,用户不会有任何与原来不同的感觉。
使用CDN服务的网站,只需将其域名的解析权交给CDN的负载均衡设备,CDN负载均衡设备将为用户选择一台合适的缓存服务器,用户通过访问这台缓存服务器来获取自己所需的数据。
由于缓存服务器部署在网络运营商的机房,而这些运营商又是用户的网络服务提供商,因此用户可以以最短的路径,最快的速度对网站进行访问。因此,CDN可以加速用户访问速度,减少源站中心负载压力。