-
Notifications
You must be signed in to change notification settings - Fork 8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
面向前端的CDN原理介绍 #1
Comments
学习了 |
get |
讲的不是很详细,有些地方还是弄不懂,特别是前几步,如果图上能明确标注下步骤会更清晰些 |
@iSunlei 图片已更新,标注了步骤 |
步骤6客户配置了github.map.fastly.net的回源地址,这个地址是什么地址?和目标资源地址https://assets-cdn.github.com/pinned-octocat.svg有啥关系?这里没看懂。还有这个A记录(最近的边缘节点)是怎么计算出来的,大佬帮忙科普一下? |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
为什么需要CDN
根本上的原因是,访问速度对互联网应用的用户体验、口碑、甚至说直接的营收都有巨大的影响,任何的企业都渴望自己站点有更快的访问速度。而HTTP传输时延对web的访问速度的影响很大,在绝大多数情况下是起决定性作用的,这是由TCP/IP协议的一些特点决定的。物理层上的原因是光速有限、信道有限,协议上的原因有丢包、慢启动、拥塞控制等。
要提高访问速度,最简单的做法当然就是多设置几个服务器,让终端用户离服务器“更近”。典型的例子是各类下载网站在不同地域不同运营商设置镜像站,或者是像Google那样设置多个数据中心。但是多设几个服务器的问题也不少,一是多地部署时的困难,二是一致性没法保障,三则是管理困难、成本很高。实际上,在排除多地容灾等特殊需求的情况下,对大多数公司这种做法是不太可取的。当然,这种方案真正做好了,甚至是比后续所说的使用CDN要好的。
CDN是一种公共服务,他本身有很多台位于不同地域、接入不同运营商的服务器,而所谓的使用CDN实质上就是让CDN作为网站的门面,用户访问到的是CDN服务器,而不是直接访问到网站。由于CDN内部对TCP的优化、对静态资源的缓存、预取,加上用户访问CDN时,会被智能地分配到最近的节点,降低大量延迟,让访问速度可以得到很大提升。
CDN的原理
CDN有个源站的概念,源站就是提供内容的站点(网站的真实服务器), 从源站取内容的过程叫做回源。
每次访问的具体流程如图(以最普通的CDN为例)
具体举个例子:
用户在首次访问 https://assets-cdn.github.com/pinned-octocat.svg , 假设不委托local DNS服务器递归查询,会经历以下几个过程
assets-cdn.github.com
的DNS查询,获得一个 CNAME记录,igithub.map.fastly.net
,值得注意的是,多个加速域名可以解析到同一个CNAME,CDN回源和缓存的时候考虑到了hostname,👍;github.map.fastly.net
的DNS查询,获得一个A/AAAA记录,给出地址103.245.222.133
(视网站不同返回的不一样,可以有多个), 这一步对CDN来说时十分重要的,它给出了离用户最近的边缘节点;103.245.222.133
握手,握手完了把http请求头也发给了该边缘服务器;https://assets-cdn.github.com/pinned-octocat.svg
这个资源,有则返回给用户,如果没有,向CDN中心服务器发起请求;github.map.fastly.net
的回源地址(这个只有cdn会知道,假设是xxx.xxx.xxx.xxx
),就把http请求发到源站地址上,源站返回后返回给请求方;可以看出CDN加速的原理很大部分是跟DNS挂钩在一起的,CDN供应商几乎一定需要一个智能DNS服务器。CDN可以拿到所有的明文数据,所以对数据安全性、保密性要求比较高的企业会选择自建CDN或者设置NS记录,指向自建的智能DNS服务器。
上述步骤每一步都可以缓存,注意是每一步! 所以CDN要清除缓存很难,因为有很多服务器上的缓存要清除。无论是用户对边缘服务器的请求,还是CDN服务器的回源都可以使用https。
注意,实际环境中图中每个服务器都可以是集群,甚至CDN分区域中心和总中心。
The text was updated successfully, but these errors were encountered: