一 CDN
该篇文章的'背景':
1) 但是'CDN'在业务中'承载'着很重要的角色,值得'探究',本文仅做'记录'
2) 本文'穿插'阿里和华为云的CDN知识,可以作为'CDN'入门的'普适性'文章
① CDN的简介
阿里云CDN官方文档 华为云CDN官方文档
② CDN的术语
重点: '源站'、'CDN节点'、'加速域名'、'CNAME域名'、'终端用户'
终端用户: 就是'client'
③ CDN网络
IDC建立CDN网络,'IDC运营商'一般需有分布各地多个IDC数据中心,'服务对象'是托管在IDC中心的客户
备注1: 华为云'似乎'用的是'阿里'的CDN
备注2: 云厂商一般不会自建'IDC'组建CDN网络,成本太高,会利用现有的'网络资源'
备注3: 大厂会有专门的'CDN网络运维团队'进行支撑,保证信息正常传输,维护'CDN网络'稳定
④ CDN的本质
1) CDN网络是在'用户'和'源站服务器'之间增加了'Cache层'
2) 通过'DNS接管(智能DNS)'实现将'用户的请求'引导到'Cache'上获得'源服务器'的数据
3) CDN本质是一种'良性的'DNS劫持
4) CDN依赖的是'云厂商智能DNS就近'接入能力,也即'最佳解析ip'的调度
5) 提升'客户'的体验感
CDN业务内常见有DNS域名劫持和HTTP内容劫持 流量劫持
③ CDN使用的DNS
+++++++++++++++ "域名解析的细节" +++++++++++++++
1) 作为'ICP',只需要把'域名解释权'交给'CDN运营商',其他方面'不需要'进行任何修改
操作: ICP修改自己域名的解析记录,一般CNAME方式指向CDN网络'Cache服务器的地址'
2) 作为'CDN运营商'
[1]、首先需要需要为'ICP的'域名提供'公开'的解析
[2]、为了实现sortlist,一般是把ICP的域名'解释结果'执行一个CNAME记录
3) 当需要进行'sortlist'时,CDN运营商可以利用DNS对CNAME指向的域名解析过程进行'特殊'处理
4) 使DNS服务器在接收到客户端的请求时可以根据'客户端的ip地址',返回相同域名的'不同'ip地址
5) CDN运营商'内部'的DNS
[1]、由于从CNAME获得的'cache ip'地址,并且带有'Host'信息
[2]、请求到达Cache之后,Cache必须知道'源服务器'的ip地址,不然怎么'回源'
[3]、所以在CDN运营商内部'维护'一个内部DNS服务器,用于解释用户所访问域名的'真实ip'地址
[4]、在维护内部DNS服务器时,还需要维护一台'授权'服务器
特点: 控制'哪些域名'可以进行缓存,哪些'不能'进行缓存,避免发生'开放代理'的问题
++++++++++++++++ 为什么CDN厂商'都使用CNAME' ++++++++++++++++
背景: 为了实现既要对'普通用户透明',又要在为'指定的网站'提供加速服务的同时'降低'对ICP的影响
即:加入缓存以后,'用户在客户端'无需进行任何设置,直接'使用被加速网原有的域名'即可访问
实现: 只需要修改整个访问过程中的'域名解析'部分,可以实现'透明'的加速访问,'用户无感知'
④ CDN的调度原理
(1) 访问使用'CDN缓存'后的网站过程
[1]、用户通过'浏览器'发出请求,假定使用'加速域名访问'
[2]、浏览器调用'LDNS(本地域名解析库)'对域名解析
备注: 浏览器DNS缓存、操作系统DNS缓存、本地hosts、/etc/resolv.conf的优先级
[3]、由于CDN云厂商的'DNS劫持',所以解析库得到的是'原始域名'对应的'CNANE'记录
备注: 需要用户'自己'配置这个'CNAME'
[4]、之后浏览器再次对获得的CNAME域名进行解析得到实际的'CDN边缘节点的Cache缓存服务器'ip
备注1: 浏览器'访问'F12可以看到这个'ip'
备注2: 这个'ip'对于不同用户可能'不一样',由'CDN厂商内部自有算法计算出'
[5]、在此过程中,使用'全局负载均衡DNS(GSLB或智能DNS)'解析
备注: 如根据'地理位置'信息解析对应的ip,使得用户能就近访问
[6]、本次解析得到'CDN缓存服务器的ip地址',向'该缓存服务器'发出访问请求
[7]、如果'Cache服务器'没有数据,则缓存服务器从'实际的ip地址(源站)'得到内容后
(1) 一方面在'本地进行(Cache服务器)'保存,以备'后续请求'使用
(2) 另一方面'把获取的数据'返回给客户端,完成数据服务过程
[8]、客户端得到'由缓存服务器返回的数据'以后显示出来并完成整个浏览的数据请求过程
细节点: 使用了'CDN'之后,用户获取的数据一定是从'缓存服务器'获取的,除非'DNS'解析有问题
⑤ CDN回源的行为
++++++++++ "回源的术语" ++++++++++
1) 回源、'源站'、'回源HOST'、回源协议、回源率、'回源SNI'、'回源协议'
备注: 如果理解'缓存'和'nginx'的代理特性,很好'理解'这几个概念
2) 回源本质:缓存服务器节点没有资源,向'源站'发送了一次请求,CDN云厂商可以'改变'请求'行为'
个人理解: HTTP'参数'的劫持
3) 思考: '加速域'名、'源站'、'回源HOST'三者必须一致吗?
4) 清楚: CDN的'默认'行为,有时我们是'不需要'的,需要自己进行'策略'改变
+++++++++ CDN的配置'回源HOST'与'源站'的区别 +++++++++
⑥ CDN的应用场景
说明: 当前只是'粗略'的了解'CDN'应用场景
28比例:超过'80%的用户'经常访问的是'20%网站'的内容
⑦ CDN用的技术栈
1)CDN用的'技术栈'
[1]、DNS --> 'GSLB' --> "A、CNAME"记录,以及'客户端侧'影响解析的'因素'
[2]、HTTP知识 --> 各种'元数据[Range、缓存等]'头、'nginx的知识[slice、代理]'
[3]、缓存和鉴权的知识 --> '通过nginx来学习'
2) 题外话: 可以使用'varnish+squid' 和'nginx'进行'CDN模拟'
CDN对Content-Type的处理
⑧ CDN编程
阿里云CDN的边缘脚本 边缘程序EdgeRoutine
⑨ 相关参考
CDN的实现原理
CDN之我见的三个系列
使用阿里云CDN常见的FAQ 华为云华存配置的FAQ 华为云回源相关的FAQ
CDN的实现原理