CDN通俗易懂

CDN通俗易懂

简介

CDN 的全称是(Content Delivery Network),即内容分发网络。其目的是通过在现有的Internet中增加一层新的CACHE(缓存)层,将网站的内容发布到最接近用户的网络边缘的节点,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因,提高用户访问网站的响应速度、减少带宽预算分配、改善内容可用性、增强网站安全性。

简单的说,CDN 的工作原理就是将您源站的资源缓存到位于全球各地的 CDN 节点上,用户请求资源时,就近返回节点上缓存的资源,而不需要每个用户的请求都回您的源站获取,避免网络拥塞、缓解源站压力,保证用户访问资源的速度和体验。

如果最近的服务器没有缓存的数据会向上级请求数据,缓存到就近CDN服务器上。

组成

CDN 与菜鸟的仓配系统类似,CDN是由多个节点组成的,一般来讲,CDN网络的主要有中心节点边缘节点

  • 中心节点:中心节点包括CDN网管中心和全局负载均衡DNS重定向解析系统,负责整个CDN网络的分发及管理;

  • 边缘节点:CDN边缘节点主要指异地分发节点,由负载均衡设备高速缓存服务器两部分组成;

负载均衡设备负责每个节点中各个Cache的负载均衡,保证节点的工作效率;同时还负责收集节点与周围环境的信息,保持与全局负载均衡DNS的通信,实现整个系统的负载均衡。

高速缓存服务器(Cache)负责存储客户网站的大量信息,就像一个靠近用户的网站服务器一样响应本地用户的访问请求。通过全局负载均衡DNS的控制,用户的请求被透明地指向离他最近的节点,节点中Cache服务器就像网站的原始服务器一样,响应终端用户的请求。因其距离用户更近,故其响应时间才更快。

原理

假设百度网站现在只有一台服务器,现在有一个人在上海访问百度,如果该服务器也在上海,那么通常来说访问比较快。如果该服务器在拉萨,那么相对而言访问就比较慢了。问题的根本原因是网络传输是依赖于网线的,网线越长,时间肯定就越久。

怎么解决这个问题呢?其实思路很简单,百度在全国各地都部署一模一样的服务器就行了,专业一点叫冗余
思路很简单,但实现还是比较麻烦的,服务器上的资源分为两种:静态资源动态资源

  • 静态资源:这种资源通常是很少变动的,比如图片,视频,css,javascript等;
  • 动态资源:这种资源不同用户不同时刻访问通常是不一样的,比如ftl,jsp等。

如果百度要在全国各地都部署服务器,每个服务器上都有相同的动态资源,那么可能还需要配置相应的数据库,因为动态资源所记录的信息通常会存储在数据库中,那么这就涉及到了数据同步等等问题,这会导致成本很高,这种做法专业一点其实就是集群,而目前来说集群架构最多是三地五中心,不是说全国多地集群不可能,主要是成本太高。

那么有没有成本比较低的方式呢?有,就是在每个服务器上只部署静态资源,静态资源通常不涉及到数据库,所以成本也比较低,而且也能提高用户的访问速度。

到这里,介绍了CDN想要达到的目的,那么怎么达到这个目的呢?现在如果要比较CDN系统,我们可以考虑两点:

  • CDN系统中存储静态资源服务器的性能以及网速怎么样;
  • CDN系统中全国甚至全球范围内服务器节点的数量以及部署情况。

第一点很好理解,第二点大家应该也能理解了。如果静态资源的服务器节点很多,能够让每个用户在访问这些静态资源时都不用跑很远的路程才能获取到,那么自然这是CDN系统的优点。

有公司看到了这种需求,所以现在其实有很多CDN供应商,比如阿里,腾讯等等都有自己的CDN服务。只要你自己的系统接入了这些大厂所提供的CDN服务,你把自己的静态资源传给CDN服务,那么这些静态资源将自动的分布到全世界各地去。

好,那么现在的问题是,用户在访问静态资源时也是通过域名来访问的,域名会被解析成某一个IP地址,关键的问题就是,DNS系统在做域名解析时,是如何解析出来一个离用户最近的一个IP地址呢?

普通的DNS系统是做不到的,需要一个特殊的DNS服务器,这个特殊DNS需要知道 :

  • 用户当前所在位置;
  • 用户现在访问的这个域名对应哪些IP地址,以及这个IP地址分别在哪里。

对于第一个问题好解决,直接从用户请求里提取出用户的IP地址,比如这个IP地址被解析为北京电信、上海移动等。
第二个问题由谁来解决,我们现在考虑的是CDN,CDN提供商肯定知道他们公司在哪些地方部署了机器以及它们的IP地址,所以这个问题只能有CDN提供商来解决,CDN提供商会提供这个特殊的DNS服务器,我们叫做CDN专用DNS服务器

这样的话,只要用户在使用某个域名访问静态资源时,如果用户直接配置自己电脑的DNS地址为CDN专用DNS服务器。那么自然解决了问题,但是我们需要考虑的时,我们不能要求世界上所有的用户都去修改自己电脑的DNS地址。所以这个时候就要利用DNS中的CNAME了。

用户使用某个域名来访问静态资源时(这个域名在阿里CDN服务中叫做“加速域名”),比如这个域名为image.baidu.com,它对应一个CNAME,叫做cdn.ali.com,那么普通DNS服务器(区别CDN专用DNS服务器)在解析image.baidu.com时,会先解析成cdn.ali.com普通DNS服务器发现该域名对应的也是一个DNS服务器,那么会将域名解析工作转交给该DNS服务器,该DNS服务器就是CDN专用DNS服务器。CDN专用DNS服务器对cdn.ali.com进行解析,然后依据服务器上记录的所有CDN服务器地址信息,选出一个离用户最近的一个CDN服务器IP地址,并返回给用户,用户即可访问离自己最近的一台CDN服务器了。
在这里插入图片描述

传统网站的请求响应过程

  1. 输入网站域名;
  2. 浏览器向本地DNS服务器请求对该域名的解析;
  3. 本地DNS服务器中如果缓存有这个域名的解析结果,则直接响应用户的解析请求;
  4. 本地DNS服务器中如果没有关于这个域名的解析结果的缓存,则以迭代方式向整个DNS系统(相应的DNS服务器)请求解析,获得应答后将结果反馈给浏览器;
  5. 浏览器得到域名解析结果,就是该域名相应的服务设备的IP地址;
  6. 浏览器获取IP地址之后,经过标准的TCP握手流程,建立TCP连接;
  7. 浏览器向服务器发起HTTP请求;
  8. 服务器将用户请求内容传送给浏览器;
  9. 经过标准的TCP挥手流程,断开TCP连接。

引入CDN之后请求访问过程

  1. 输入网站域名,先经过本地DNS系统解析,如果本地DNS服务器没有相应域名的缓存,则本地DNS系统会将域名的解析权交给CNAME指向的CDN专用DNS服务器;
  2. CDN的专用DNS服务器将CDN的全局负载均衡设备IP地址返回给用户;
  3. 用户向CDN的全局负载均衡设备发起访问请求;
  4. CDN全局负载均衡设备根据用户IP地址,以及用户请求的URL,选择一台用户所属区域的区域负载均衡设备,并将请求转发到此设备上(CDN全局负载均衡设备会选择一个相对于用户较近的、访问快的服务器让用户访问);
  5. 基于以下这些条件的综合分析之后,区域负载均衡设备会选择一个最优的缓存服务器节点,并从缓存服务器节点处得到缓存服务器的IP地址,最终将得到的IP地址返回给全局负载均衡设备:
    (1)根据用户IP地址,判断哪一个边缘节点距用户最近
    (2)根据用户所请求的URL中携带的内容名称,判断哪一个边缘节点上有用户所需内容
    (3)查询各个边缘节点当前的负载情况,判断哪一个边缘节点尚有服务能力
  6. 全局负载均衡设备把服务器的IP地址返回给用户;
  7. 用户向缓存服务器发起请求,缓存服务器响应用户请求,将用户所需内容传送到用户终端。
  8. 如果这台缓存服务器上并没有用户想要的内容,而区域均衡设备依然将它分配给了用户,那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到本地。

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值