CDN概述CDN的全称是ContentDeliveryNetwork,即内容分发网络。其基本思路是尽可能避开互联网上可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输更快更稳定。CDN的工作原理是将源站的资源缓存在CDN的各个节点上。当请求命中某个节点的资源缓存后,立即返回给客户端,避免每次请求的资源都通过源站获取,避免网络拥塞,缓解源站压力,保证速度和体验访问资源的用户。举个生活中的例子,我们在某网站购买商品,快递可以当天送达。基本原则是在全国各地建立本地仓库。用户在购买产品时,通过智能仓配模式,客户可以选择就近的仓库发货,从而缩短物流配送时间。关于商品库存的分发,流程可以参考下图,从工厂(始发站)->区域仓库(二级缓存)->本地仓库(一级缓存)内容分发网络就像智能上文提到的仓配网络,解决了由于分布、带宽、服务器性能带来的访问延迟问题,适用于站点加速、点播、直播等场景。使用户就近获取所需内容,解决Internet网络拥堵的情况,提高用户访问网站的响应速度和成功率。CDN的诞生CDN诞生于20多年前。为了解决内容源服务器和传输骨干网压力过大的问题,1995年,麻省理工学院教授、互联网发明者之一汤姆莱顿带领研究生丹尼勒温和其他几位顶尖研究人员走到了一起试图用数学问题来解决网络拥塞问题。他们使用数学算法处理内容的动态路由,并最终解决困扰互联网用户的问题。Leighton后来加入了SloanMBA学生JonathanSeelig,从那里他们开始实施他们的商业计划,最终于1998年8月20日以Akamai的名义成立了公司。Akamai通过智能互联网分发结束了“全球等待”。1998年,中国第一家CDN公司ChinaCache成立。CDN工作原理访问CDN在访问CDN之前,我们在访问域名时,直接获取第一台真实服务器的IP地址。整个过程如下(图片有点粗糙)当我们需要对网站进行加速时,我们可以向运营商注册我们的加速域名和源域名,然后输入自己域名的DNS配置信息,并将A记录更改为CNAME记录。阿里云加速应用参考如下:CDN接入流程1.用户访问图片内容时,首先经过本地DNS解析。如果LDNS命中,则直接返回给用户。2.LDNSMISS,转发授权DNS查询3.返回IP地址对应的域名CNAME[picwebws.pstatp.com.wsglb0.com.]()(实际是DNS调度系统的ip地址)4.发送域名解析请求发送给DNS调度系统,DNS调度系统为该请求分配最佳节点IP地址。5、返回的解析IP地址6、用户向缓存服务器发起请求,缓存服务器响应用户请求,将用户需要的内容传送给用户终端。图:华为云全站加速示意图。CDN解决什么问题?骨干网压力过大TomLeighton在1995年带领团队尝试用数学问题解决网络拥塞问题,从而解决了骨干网压力过大的问题。由于青少年上网人数不断增加,骨干网核心节点的流量吞吐量不足以支撑网民的增长。CDN可以防止用户流量流经骨干网。骨干网是全球局域网,一级互联网服务提供商(ISP)将其高速光纤网络连接在一起,形成互联网的骨干网,从而实现不同地理区域之间的高效流量传输。1.局域网局域网(LocalAreaNetwork,简称LAN)是指在一定区域内由多台计算机互连而成的计算机群。比如我们上大学的时候,晚上12点以后就断网了,还可以通过路由器打开黑匣子CS,魔兽世界。即基于局域网互连实现数据共享和信息间的通信。2.骨干网这里参考一下中国电信的整个网络架构。骨干网可以理解为覆盖全国的局域网。通过核心节点的流量互通,实现全网互通。这就是我们称之为互联网的原因。北京、上海、广州是ChinaNet的超级核心。除超级核心外,中网还在天津、西安、南京、杭州、武汉、成都等地设有普通核心。三公里的middlemile在网络接入中通常是“三公里”。最后一英里)是:用户ISP接入点到用户客户端CDN网络层,主要用于加速第二英里(middlemile)。在CDN基础架构中,通常采用两级服务器进行加速:L1(下层):距离越近的用户(或俗称互联网用户)越好,通常用于缓存可缓存的静态数据,这就是所谓的lastmile(最后一英里)。L2(上层):离源站点越近越好,称为firstmile(第一英里)。当L1命中缓存失败,或者无法缓存内容时,请求会通过L1透传到L2。如果L2仍然没有命中缓存或者内容无法缓存,则继续透传给L2的上游(可能是源站,也可能是L3)。同时L2也可以收敛流量和请求数减少回源量(如果可以缓存的话),减轻源站的压力。L1和L2之间的部分是CDN的“内网”,称为middlemile(中间一公里)。CDN全球负载均衡系统GLB(GlobalLoadBalance)的组成当用户访问加入CDN服务的网站时,域名解析请求最终会交由“智能调度DNS”处理。通过一套预定义的策略,为用户提供当时离用户最近的节点地址,让用户得到快速的服务。同时需要与分布在各地的CDN节点保持通信,跟踪每个节点的健康状态、容量等信息,保证用户的请求分配到最近的可用节点。缓存服务器的主要作用是缓存热点数据,数据类型包括:静态资源(html、js、css等)、多媒体资源(img、mp3、mp4等)、动态数据(边缘rendering)等。与CDN相关的比较知名的开源软件有:SquidVarnishNginxOpenRestyATSHAProxy具体对比可以参考:https://blog.csdn.net/joeyon1985/article/details/46573281CDN的分层架构源码站点出处本站是指发布内容的原始站点。网站上的文件增删改查都在源站完成;此外,缓存服务器捕获的所有对象也都来自源站点。CDN调度策略DNS调度是根据请求者本地DNS的出口IP地址和运营商的DNS调度。DNS调度问题:DNS缓存时间不会在TTL到期前刷新,导致节点异常时自动调度有较大延迟,直接影响线上业务访问。大量本地DNS不支持EDNS协议,无法获取客户真实IP。大多数时候CDN只能通过本地DNSIP进行决策,经常会出现跨地域调度的情况。HTTPDNS调度客户端请求一个固定的HTTPDNS地址,根据返回获取解析结果。可以提高解析的准确性(不像DNS调度,只能通过本地DNSIP做决策),也可以很好的避免劫持等问题。当然,这种模式也存在一些问题。例如,客户端每次加载URL时,可能会生成HTTPDNS查询,这需要高性能和网络访问。302调度是根据客户端IP和302调度集群进行实时流量调度。我们看一个例子:访问URL链接后,此时请求发送到调度集群,我们可以得到的客户端信息包括客户端的出口IP(大部分情况相同),然后是算法和DNS-basedscheduling可以一样,但是判断依据由本地DNSegressip改为clientegressip。浏览器收到302响应,跟随Location中的URL,继续发起http请求。本次请求的目标IP为CDN边缘节点,CDN节点会响应实际的文件内容。302调度的优点:实时调度,由于没有本地DNS缓存,适合CDN调峰处理,对成本控制意义重大;准确率高,直接获取客户端出口IP进行调度。302调度的缺点:每次都需要跳转,对延迟敏感的业务不友好。一般只适用于大文件。AnyCastBGP路由调度基于BGPAnyCast路由策略,只提供很少的外部IP,路由策略可以快速调整。目前AWSCloudFront和CloudFlare都采用这种方式在路由层面进行调度。这种方法可以很好的抵御DDOS攻击,减少网络拥塞。当然这种方式的成本和方案设计都比较复杂,所以国内的CDN还是采用UniCast的方式。一些概念性的CDN运行原理本地缓存的数据,以key-value的形式,mapsurl和本地缓存,存储结构类似于Map,以hash+链表的形式缓存。CDN命中率是衡量我们CDN服务质量的核心标准。当用户访问的资源刚好在缓存系统中时,可以直接返回给用户,表示CDN命中;如果CDN缓存中没有命中该资源,则触发回源动作。CDN回源当CDN本地缓存未命中时,触发回源动作,一级缓存访问二级缓存中是否有相关数据,如果有则返回一级缓存。二级缓存Miss,触发二级缓存回源请求,请求源站对应的数据。得到结果后缓存在本地缓存中,返回数据给一级缓存。一级缓存获取数据,缓存到本地,返回给用户。上面提到的CDN预热数据的访问方式是基于Pull方式,由用户决定最后将哪部分热点数据存储在CDN缓存中;对于大促场景,我们往往需要将活动相关资源预热到边缘节点(L1),避免大促开始后大量用户访问,造成源站压力过大。此时采用Push方式。CDN特性总结1.资源访问加速:LocalCache加速提高了企业站点(尤其是含有大量图片和静态页面的站点)的访问速度,大大提高了上述站点的稳定性2.消除运营商间网络互联瓶颈问题:镜像服务消除了不同运营商间互联瓶颈的影响,实现跨运营商网络加速,保证不同网络下的用户都能获得良好的接入质量。3、远程加速:远程访问用户根据DNS负载均衡技术,智能自动选择Cache服务器,选择最快的Cache服务器,加速远程访问。访问时从缓存服务器读取数据,减少远程访问带宽,分担网络流量,减轻原站WEB服务器负载等。5.集群抗攻击:广泛分布的CDN节点和智能冗余机制节点之间可以有效防止黑客攻击,减少各种D.D.o.S攻击对网站的影响,同时保证更好的服务质量。大家注意了,别迷路了,以上就是本文的全部内容,我每周都会更新几篇高质量的大厂访谈和常用技术栈相关的文章。感谢大家的阅读,如果这篇文章写得好,请多多转发!!!感谢您的支持与认可,下篇文章见!!
