CDN 基础

什么是 CDN

CDN全称Content Delivery Network,即内容分发网络。CDN 是构建在网络之上的内容分发网络,依靠部署在各地的服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN 的关键技术主要有内容存储和分发技术。

CDN 系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet 网络拥挤的状况,提高用户访问网站的响应速度。

传统的网络访问形式

用户访问未使用 CDN 缓存网站的过程为:

  1. 用户向浏览器提供要访问的域名;
  2. 浏览器调用域名解析函数库对域名进行解析,以得到此域名对应的 IP 地址;
  3. 浏览器使用所得到的 IP 地址,域名的服务主机发出数据访问请求;
  4. 浏览器根据域名主机返回的数据显示网页的内容。

通过以上四个步骤,浏览器完成从用户处接收用户要访问的域名到从域名服务主机处获取数据的整个过程。

CDN 网络是在用户和服务器之间增加Cache层,如何将用户的请求引导到 Cache 上获得源服务器的数据,主要是通过接管 DNS 实现,下面让我们看看访问使用 CDN 缓存后的网站的过程:

使用 CDN 的访问形式

这里写图片描述

用户使用了 CDN 缓存后的网站的访问过程变为:

  1. 用户向浏览器提供要访问的域名;
  2. 浏览器调用域名解析库对域名进行解析,由于CDN对域名解析过程进行了调整,所以解析函数库得到的是该域名对应的CNAME记录(由于现在已经是使用了CDN服务,CNAME为CDN服务商域名),为了得到实际IP地址,浏览器需要再次对获得的CNAME域名进行解析以得到实际的IP地址;在此过程中,使用的全局负载均衡DNS解析,如根据地理位置信息解析对应的IP地址,使得用户能就近访问。(CDN服务来提供最近的机器)
  3. 此次解析得到CDN缓存服务器的IP地址,浏览器在得到实际的IP地址以后,向缓存服务器发出访问请求;
  4. 缓存服务器根据浏览器提供的要访问的域名,通过Cache内部专用DNS解析得到此域名的实际IP地址,再由缓存服务器向此实际IP地址提交访问请求;
  5. 缓存服务器从实际IP地址得得到内容以后,一方面在本地进行保存,以备以后使用,二方面把获取的数据返回给客户端,完成数据服务过程;
  6. 客户端得到由缓存服务器返回的数据以后显示出来并完成整个浏览的数据请求过程。

CDN关键技术

  1. 缓存算法[Squid];缓存算法决定命中率、源服务器压力、POP 节点存储能力,其中:缓存点有客户端浏览器缓存、本地 DNS 服务器缓存,缓存内容有:DNS 地址缓存、客户请求内容缓存、动态内容缓存
  2. 分发能力;分发能力取决于 IDC 能力和 IDC 策略性分布。
  3. 负载均衡[Nginx];负载均衡(智能调度)决定最佳路由、响应时间、可用性、服务质量。
  4. (基于 DNS[BIND],基于 DNS 的负载均衡以 CNAME 实现[to cluster],智取最优节点服务)
  5. 支持协议;支持协议如静动态加速(图片加速、https带证书加速)、下载加速、流媒体加速、企业应用加速、手机应用加速。

CDN的不足

既然 CDN 的核心作用是提高网络的访问速度,那么其用户也就是访问量很大的网站,例如 ICP 、ISP、大型企业、电子商务网站和政府网站等。利用 CDN 技术,这些网站无需投资昂贵的各类服务器,设立分站点。通过采用 CDN,CDN 将负责信息传递工作,保证信息正常传输,而技术人员只需要维护网站内容,不需要考虑流量问题。这样,网站可保证用户得到更多的新业务,可以快速访问网络上的内容,获得更好的服务质量。

任何一个新事物,在给现有模式带来改进的同时,也必然存在一定的局限,CDN 也是这样。实时性不太好是 CDN 的致命缺陷。随着对 CDN 需求的逐渐升温,这一缺陷将得到改进,使来自于远程服务器的网络内容网页与复本服务器或缓存器中的网页保持同步。

解决方法是在网络内容发生变化时将新的网络内容从服务器端直接传送到缓存器,或者当对网络内容的访问增加时将数据源服务器的网络内容尽可能实时地复制到缓存服务器。

反向代理与负载均衡

什么是反向代理

当我们有一个服务器集群,并且服务器集群中的每台服务器的内容一样的时候,同样我们要直接从个人电脑访问到服务器集群服务器的时候无法访问,必须通过第三方服务器才能访问集群

这个时候,我们通过第三方服务器访问服务器集群的内容,但是我们并不知道是哪一台服务器提供的内容,此种代理方式称为反向代理

什么是负载均衡

公司会建立很多的服务器,这些服务器组成了服务器集群,然后,当用户访问网站的时候,先访问一个中间服务器,再让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入选择的服务器

所以,用户每次访问,都会保证服务器集群中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况

一句话:nginx 会给你分配服务器压力小的去访问

负载均衡方案:

  • 基于DNS负载均衡
  • 基于硬件负载均衡
  • 基于软件负载均衡

常用的均衡算法:

  • 轮询策略(多种轮询策略,例如:顺序轮询、随机轮询、重来轮询等)
  • 负载度策略 (先去评估后端每台服务器的负载压力情况,再分配)
  • 响应策略(优先将请求转发给当前时刻响应最快的后端服务器)
  • 哈希策略(将请求中的某个信息进行hash计算,然后根据后端服务器台数取模,得到一个值,算出相同值的请求就被转发到同一台后端服务器中)