什么是cdn
作者:阿里巴巴淘系技术
链接:https://www.zhihu.com/question/36514327/answer/1604554133CDN工作原理
内容分发网络(Content Delivery Network,简称CDN)是建立并覆盖在承载网之上,由分布在不同区域的边缘节点服务器群组成的分布式网络。
CDN应用广泛,支持多种行业、多种场景内容加速,例如:图片小文件、大文件下载、视音频点播、直播流媒体、全站加速、安全加速。
借用阿里云官网的例子,来简单介绍CDN的工作原理。
假设通过CDN加速的域名为
www.a.com
,接入CDN网络,开始使用加速服务后,当终端用户(北京)发起HTTP请求时,处理流程如下:
- 当终端用户(北京)向
www.a.com
下的指定资源发起请求时,首先向LDNS(本地DNS)发起域名解析请求。- LDNS检查缓存中是否有
www.a.com
的IP地址记录。如果有,则直接返回给终端用户;如果没有,则向授权DNS查询。- 当授权DNS解析
www.a.com
时,返回域名CNAMEwww.a.tbcdn.com
对应IP地址。- 域名解析请求发送至阿里云DNS调度系统,并为请求分配最佳节点IP地址。
- LDNS获取DNS返回的解析IP地址。
- 用户获取解析IP地址。
- 用户向获取的IP地址发起对该资源的访问请求。
- 如果该IP地址对应的节点已缓存该资源,则会将数据直接返回给用户,例如,图中步骤7和8,请求结束。
- 如果该IP地址对应的节点未缓存该资源,则节点向源站发起对该资源的请求。获取资源后,结合用户自定义配置的缓存策略,将资源缓存至节点,例如,图中的北京节点,并返回给用户,请求结束。
从这个例子可以了解到:
(1)CDN的加速资源是跟域名绑定的。
(2)通过域名访问资源,首先是通过DNS分查找离用户最近的CDN节点(边缘服务器)的IP
(3)通过IP访问实际资源时,如果CDN上并没有缓存资源,则会到源站请求资源,并缓存到CDN节点上,这样,用户下一次访问时,该CDN节点就会有对应资源的缓存了。
淘宝的图片访问,有98%的流量都走了CDN缓存。只有2%会回源到源站,节省了大量的服务器资源。
jsDelivr官网
比如在我的博客主题中会用到这样的一个svg文件:behappy on github.svg
现在我把svg文件托管到github的master分支上: behappy on github
若我Releases一个版本0.0.1,那github中会有这样的文件:https://raw.githubusercontent.com/wang-xiaowu/picture_repository/0.0.1/star%20behappy-on%20github-orange.svg
如果我要使用jsDelivr托管此文件,那只需要将网站中载入的本地文件链接更换为jsDelivr CDN的链接,格式如[https://cdn.jsdelivr.net/gh/${user}/${repo}@${version/前面说的分支master或0.0.1}/${file/后面直接copy即可}
](gh代表github):
behappy on cdn,其实只是把/master改成@master即可
若要使用缩小版本功能(针对css,或者js等,),比如原文件名为static/css/style.css
,则将“.min”添加到JS /CSS文件中,jsdelivr将自动生成文件。
https://cdn.jsdelivr.net/gh/wang-xiaowu/picture_repository@master/static/css/style.min.css