本质:DNS解析CNAME时最终会请求到阿里CDN的DNS服务器上,阿里CDN的DNS服务器会判断请求ip的物理区域是哪里,同时根据各CDN节点的压力做全局的负载均衡

返回合适CDN节点的ip。

http://cstdlib.com/tech/2015/08/18/what-is-cdn/

需求

CDN,全称Content Delivery Network,主要作用是为源站减少访问压力的同时,为客户端提供更快速的内容响应。除此之外,CDN还能对源站进行安全防护。 其实真正为CDN付费的是源站,所以CDN的用户其实是源站,例如新浪微博,youku视频,淘宝网啊之类的。而客户端,是CDN的用户的用户。 所以CDN是夹在源站和源站的用户之间的,以下称客户端均指源站的用户。

工作原理

传统网站访问过程

要说CDN的工作原理,就得先说说Internet资源的访问过程。传统的来说,在浏览器访问网站应当有这么一些步骤:

  1. 在浏览器键入网址www.taobao.com
  2. 浏览器请求dns服务器,查询到www.taobao.com对应的IP
  3. 浏览器向服务器发起TCP连接
  4. 浏览器通过建立的TCP连接发送HTTP协议报文
  5. 服务器向浏览器发送页面内容
  6. 浏览器将页面展现出来

对于上面提到的第2步,其实还是有需要来更加详细的说明一下dns的解析过程,因为它是CDN能工作的基本条件。

DNS工作过程

DNS的工作过程容易被人忽略,一般只知道DNS的输入是一个网址,输出的是一个IP,在这里我也正好给自己总结记录一下。 DNS的协议主要是基于UDP的,所以dns server的qps一般都是很惊人的,比web server(http是基于tcp的)的qps是高出几个量级的。有个基本概念就是dns的记录类型,常见的dns记录类型有A,AAAA,CNAME等。中A记录是域名到IPV4地址的;AAAA记录是域名到IPV6地址的;CNAME记录类似于查询过程中的转发,意思是你去问问这个个人,他管这事。好的,下面继续说说DNS的工作过程。

  1. 在浏览器键入www.taobao.com,其实真正dns协议里用到的是www.taobao.com.最后还有一个点,可能是因为美观等原因,一般都不显示
  2. 查询本地缓存(host文件或者是浏览器的缓存)中有没有该域名对应的记录,有的话就直接用了
  3. 向运营商的DNS服务器发起dns解析的请求,一般称运营商的DNS服务器为local dns
  4. local dns会查询本地的缓存,local dns设置的缓存时间是有讲究的,过长过短都不好。另外local dns的查询是运营商的事,这里面水很深,外部不可控
  5. local dns如果没有缓存,会把域名从右往左扫描,依次请求对应的服务器,例如对于域名www.taobao.com.,先去问负责.的根域名服务器,就是传说中全球只有几台的那些服务器,他们会答复.com是谁管理的,然后local dns又去找管理.com的服务器(假设名字为S1),去问问taobao.com是谁管,一般来说,在S1查到的记录是一条cname记录(阿里毕竟大公司,自己管理自己旗下的域名),然后就转到了阿里自己的DNS服务器上来了,一般称之为权威服务器
  6. 权威服务器是阿里自己建的,然后根据公司内部的一些配置啊,调整啊,查到www.taobao.com.对应的服务器是谁,返回一个IP地址
  7. local dns缓存这个IP地址,并且回复浏览器
  8. 浏览器和对应的IP地址的服务器简历TCP连接,发送HTTP报文

买过域名的朋友都知道,假如你在万网买了cstdlib.com,然后你想启用一个二级域名go.cstdlib.com,那么你要去万网的控制台(已经和阿里云合并)设置一条A记录的解析,将go.cstdlib.com指向你想要的IP。每次增加二级域名的过程都是这样子。那么,如果你知道了DNS的解析过程,你可以这么做:

  1. 在服务器D1上起一个dns server,作为cstdlib.com的dns权威服务器
  2. 在万网的控制台新增一条CNAME记录,将cstdlib.com的解析转到D1来
  3. D1想返回什么IP就返回什么IP

这样一来,一切尽在掌控,毕竟D1是你的,而且以后你再也不用去万网的控制台了,这就是自建DNS服务器。

CDN选择优质节点

回到正题,CDN如何为用户选择时延更小的源站。这次不以访问淘宝为例了,因为阿里有自己的CDN,要是以访问淘宝为例,容易混淆CDN的提供者和源站。 这次举例以新浪微博为源站,假设微博使用了阿里的CDN(并不是假设,新闻在这里),那么阿里CDN会告诉微博,你要我给你加速一张图片是吧,那你就把这个图片解析到我的服务器来(可以CNAME,也可以直接写阿里CDN的url),那么,阿里CDN的dns权威服务器,会收到这么一个解析请求,“请告诉我,新浪微博的1.png的源站在哪”。这时CDN系统就要大展身手了。

假设我们现在是阿里CDN的dns权威服务器,有人问我们“新浪微博的1.png的源站在哪”,那我会这么做:先看看问我的这个人IP是多少(回忆一下dns解析的过程,我们看到的应该是local dns的IP),然后根据这个IP查到他是哪里的,北京还是广州,上海还是深圳。如果是北京,那好,我就给你返回北京的源站的地址;如果是上海,那我就给你返回上海的源站的地址,这样就实现了就近访问。

在把IP地址对应到地理位置的过程中,需要用到IP库,阿里CDN的IP地址库贱贱的,因为阿里CDN的负责人叔度在ArchSummit架构师峰会上说,他们可以用淘宝的包裹记录来校准,真是机智。

当然,就近只是一个要考虑的因素之一,还有很多因素需要考虑的,例如网络成本,流量分布,源站负载等。这是个很复杂的过程,我只是举了一个直观的方面来说。

CDN减少源站压力

刚才说了CDN是如何选择优质节点的,那么对于客户端,算是有个交代了。所以接下来考虑怎么给源站一个交代:减小源站压力。如果每一个用户请求都让他直接去源站拿的话,那源站将会承受巨大的压力,所以要考虑为源站提供一个HTTP的缓存,通过提升缓存的命中率来减小源站的压力。

比如刚才第一个用户请求了1.png,那么CDN先把这张图片缓存(缓存简单可以认为是一个哈希表,key是url,value是response)起来,下次再有人要1.png,就直接返回给他,从而减少回源流量。

HTTP缓存服务器是一个很复杂的功能。下面还是贴一张叔度在ArchSummit架构师峰会上用到的PPT吧,来说一下这里面大概的技术,阿里的HTTP缓存服务器叫Swfit,正好和苹果的那个语言重名了。

图中是一个CDN节点,用户的请求从LVS(LVS是一个四层的负载均衡组件,作者是章文嵩博士,现任阿里云CTO)的入口来,先由LVS做一次4层的负载均衡,然后转到一台Tengine(阿里在nginx的基础上开发的服务器)上,Tengine做一致性hash,选择一台Swift(阿里使用的HTTP缓存服务器),然后Swift去做缓存回源。接下来仍然贴一张叔度在ArchSummit架构师峰会上用到的PPT,一起看看Swift的架构。

首先可以看到,Swift是一个多线程的程序,每个线程起一个epoll来充分发挥多核的处理能力。并且尽量减少线程间的上下文切换,一个请求尽量在一个线程处理。然后图里面还能看到内存缓存,SSD缓存,SATA缓存。据叔度说,Swift会有热点淘汰的机制,将热文件放在内存里,次热文件放在SSD上,最后才是SATA盘,然后会有热点淘汰和提升机制。

同时叔度在ArchSummit峰会上还提出,Tengine和Swift是通过Spdy协议来通信的,从而优化HTTP的效率。所以,CDN在技术上还是很有深度的,网络,IO,多线程,TCP/IP,HTTP这些后台常见的名词在这里面体现的淋漓尽致。

边边角角

其实在DNS查询过程有一个这样的问题,权威服务器接收请求的时候,只能得到local DNS的IP,并不知道client IP。这是个很蛋疼的东西,所以google提出了EDNS的协议,会带上client IP,但是其实不怎么实用,因为这相当于大家缓存DNS查询结果的时候多了一维client IP,一维数组变二维数组,简直是内存的灾难。所以,大家平常就别用8.8.8.8这样的DNS服务器了,不然别人以为你是在美国,然后用美国的源站和你通信,肯定慢成狗啊。

总结

总结一下CDN的工作原理:通过权威dns服务器来实现优质节点的选择,通过缓存来减少源站的压力。

推荐阅读

最后推荐一下阿里CDN的负责人叔度在ArchSummit上的演讲,把阿里CDN架构讲的很清楚。本文很多内容来自该演讲。链接在这里

http://www.infoq.com/cn/presentations/alibaba-cloud-cdn-technology-evolution/

 

CDN的原理以及其中的一些技术的更多相关文章

  1. CDN加速原理

    原文链接:http://www.72e.net/cdnspeed/cdnyuanli.aspx 首先,让我们来看一下传统的Internet网络的基本结构和数据传输情况,如下图所示. Internet  ...

  2. CDN的原理及对SEO的影响

    http://www.williamlong.info/archives/4059.html CDN的概念最早于1995年由美国麻省理工大学提出,是一套能够实现用户就近访问的网络解决方案.具体方法是: ...

  3. 什么是网站CDN服务,CDN加速原理?

    转载:http://server.zzidc.com/fwqcjwt/728.html 摘要:在为您的网站打开速度发愁吗?您有没有发现有些大网站每天拥有几十万或者上百万,甚至几亿用户的访问,而且不同用 ...

  4. CDN 工作原理剖析

    CDN 工作原理剖析 CDN / Content Delivery Network / 内容分发网络 https://www.cloudflare.com/zh-cn/learning/cdn/wha ...

  5. 一文搞懂CDN加速原理

    开源Linux 长按二维码加关注~ 一.什么是 CDN CDN的全称是(Content Delivery Network),即内容分发网络.其目的是通过在现有的Internet中增加一层新的CACHE ...

  6. CDN和CDN加速原理

    随着互联网的发展,用户在使用网络时对网站的浏览速度和效果愈加重视,但由于网民数量激增,网络访问路径过长,从 而使用户的访问质量受到严重影响.特别是当用户与网站之间的链路被突发的大流量数据拥塞时,对于异 ...

  7. 什么是CDN及CDN加速原理

    目录 CDN是什么? CDN的相关技术 负载均衡技术 动态内容分发与复制技术 缓存技术 谁需要CDN? CDN的不足 随着互联网的发展,用户在使用网络时对网站的浏览速度和效果愈加重视,但由于网民数量激 ...

  8. cdn工作原理

    cdn工作原理 1.用户向浏览器输入www.web.com这个域名,浏览器第一次发现本地没有dns缓存,则向网站的DNS服务器请求: 2.网站的DNS域名解析器设置了CNAME,指向了www.web. ...

  9. CDN及CDN加速原理

    本想自己写这个主题的文章,但网上已经有人写了一篇非常好的文章,觉得难以望其项背.就没有必要再写,直接转载如下: 在不同地域的用户访问网站的响应速度存在差异,为了提高用户访问的响应速度.优化现有Inte ...

随机推荐

  1. JS中setInterval、setTimeout不能传递带参数的函数的解决方案

    在JS中无论是setTimeout还是setInterval,在使用函数名作为调用句柄时都不能带参数,而在许多场合必须要带参数,接下来为大家介绍具体的解决方法 在JS中无论是setTimeout还是s ...

  2. [转]OBOUT ASP.NET HTML Editor - Insert HTML

    本文转自:http://www.obout.com/editor_new/sample_InsertHTML.aspx Example demonstrates how to access HTML ...

  3. 根据BIOS信息修改主机名

    Dell: Rename-Computer -NewName ("CNHZPD-" + (Get-WmiObject -class win32_Bios).SerialNumber ...

  4. PAT (Top Level) Practise 1008 Airline Routes(Tarjan模版题)

    1008. Airline Routes (35) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue Given a ...

  5. C#中String.Empty,“”,NULL的区别

    一.String.Empty String类的静态只读字段.定义如下: public static readonly string Empty; 二.“” 被赋值为“”的字符串变量,会在栈上保存一个地 ...

  6. VR制作的规格分析

    因为UE4的演示资源更丰富一些,我这边把UE4的有代表性的演示都跑了一遍,同时也通过Rift确认效果,和里面的资源制作方式.   首先,UE4是基于物理渲染的引擎,大部分都是偏向图像真实的.使用的材质 ...

  7. MZhong's Cover Letter

    Application for front-end developer position in Chicago Office Dear HR, I am writing to apply for th ...

  8. HK游记 Day2迪斯尼(下)

    接下来我们要去看狮子王庆典,绕啊绕啊,终于进场了,说实话我对一大帮人扮演动物歌舞表演不是很感冒,静倒是觉得很好看,印象最深的是狮子王的主题曲,还有大象车,长颈鹿车,狮子王车,静举着手机拍视频. 看完表 ...

  9. Law of total probability

    https://en.wikipedia.org/wiki/Law_of_total_probability the total probability of an outcome which can ...

  10. IOS 移除storyboard

    我是IOS新手,都说storyboard是个好东西,但是我搞了一会始终没有搞懂,并且我觉得学习一门语言,使用类似以前网页三剑客这种所见所得工具,不太利于学习,所以我就想着移除storyboard 1: ...