CDN浅析及在butterfly的应用
CDN浅析及在butterfly的应用
琴生博客加载速度一直较慢,在查阅了配置文件之后发现可以用CDN提升加载速度,于是乎了解了一下CDN并运用到自己的配置中。
CDN是什么
CDN英文全称Content Delivery Network
,中文翻译为内容分发网络。它是建立并覆盖在承载网之上,由分布在不同区域的边缘节点服务器群组成的分布式网络。CDN应用广泛,支持多种行业、多种场景内容加速,例如:图片小文件、大文件下载、视音频点播、直播流媒体、全站加速、安全加速。
借用上图阿里云官网的例子,来简单介绍CDN的工作原理。假设通过CDN加速的域名为www.a.com
,接入CDN网络,开始使用加速服务后,当终端用户(北京)发起HTTP请求时,处理流程如下:
- 当终端用户(北京)向
www.a.com
下的指定资源发起请求时,首先向LDNS(本地DNS)发起域名解析请求。 - LDNS检查缓存中是否有
www.a.com
的IP地址记录。如果有,则直接返回给终端用户;如果没有,则向授权DNS查询。 - 当授权DNS解析
www.a.com
时,返回域名CNAME www.a.tbcdn.com对应IP地址。 - 域名解析请求发送至阿里云DNS调度系统,并为请求分配最佳节点IP地址。
- LDNS获取DNS返回的解析IP地址。
- 用户获取解析IP地址。
- 用户向获取的IP地址发起对该资源的访问请求。
- 如果该IP地址对应的节点已缓存该资源,则会将数据直接返回给用户,例如,图中步骤7和8,请求结束。
- 如果该IP地址对应的节点未缓存该资源,则节点向源站发起对该资源的请求。获取资源后,结合用户自定义配置的缓存策略,将资源缓存至节点,例如,图中的北京节点,并返回给用户,请求结束。
从这个例子可以了解到:
- CDN的加速资源是跟域名绑定的。
- 通过域名访问资源,首先是通过DNS分查找离用户最近的CDN节点(边缘服务器)的IP
- 通过IP访问实际资源时,如果CDN上并没有缓存资源,则会到源站请求资源,并缓存到CDN节点上,这样,用户下一次访问时,该CDN节点就会有对应资源的缓存了。
简单讲,CDN就是通过将站点内容发布至遍布全球的海量加速节点,使其用户可就近获取所需内容。
CDN主要解决这么些问题:
- 物理距离远,多次网络转发,延时高不稳定;
- 所在运营商不同,需运营商之间转发绕行;
- 网络带宽处理能力有限,海量请求时,响应速度与可用性降低。
CDN工作原理及作用
CDN的工作原理就是将源站的资源缓存到位于全国各地的CDN节点上,用户请求资源时,就近返回节点上缓存的资源,而不需要每个用户的请求都回您的源站获取,避免网络拥塞、分担源站压力,保证用户访问资源的速度和体验。
为什么要用 CDN?
如果你在经营一家网站,那你应该知道几点因素是你制胜的关键:
- 内容有吸引力
- 访问速度快
- 支持频繁的用户互动
- 可以在各处浏览无障碍
此外,你的网站必须能在复杂的网络环境下运行,考虑到全球的用户访问体验。你的网站也会随着使用越来越多的对象(如图片、帧、CSS及APIs)和形形色色的动作(分享、跟踪)而系统逐渐庞大。所以,系统变慢带来用户的流失。
Google及其它网站的研究表明,一个网站每慢一秒钟,就会丢失许多访客,甚至这些访客永远不会再次光顾这些网站。可以想像,如果网站是你的盈利渠道或是品牌窗口,那么网站速度慢将是一个致命的打击。
这就是你使用CDN的第一个也是最重要的原因:为了加速网站的访问。
除此之外,CDN还有一些作用:
1.为了实现跨运营商、跨地域的全网覆盖**
互联不互通、区域ISP地域局限、出口带宽受限制等种种因素都造成了网站的区域性无法访问。CDN加速可以覆盖全球的线路,通过和运营商合作,部署IDC资源,在全国骨干节点商,合理部署CDN边缘分发存储节点,充分利用带宽资源,平衡源站流量。
2. 为了保障你的网站安全
CDN的负载均衡和分布式存储技术,可以加强网站的可靠性,相当无无形中给你的网站添加了一把保护伞,应对绝大部分的互联网攻击事件。防攻击系统也能避免网站遭到恶意攻击。
3. 为了异地备援
当某个服务器发生意外故障时,系统将会调用其他临近的健康服务器节点进行服务,进而提供接近100%的可靠性,这就让你的网站可以做到永不宕机。
4. 为了节约成本投入
使用CDN加速可以实现网站的全国铺设,你根据不用考虑购买服务器与后续的托管运维,服务器之间镜像同步,也不用为了管理维护技术人员而烦恼,节省了人力、精力和财力。
5. 为了让你更专注业务本身
CDN加速厂商一般都会提供一站式服务,业务不仅限于CDN,还有配套的云存储、大数据服务、视频云服务等,而且一般会提供7x24运维监控支持,保证网络随时畅通,你可以放心使用。并且将更多的精力投入到发展自身的核心业务之上。
CDN应用场景
- 网站站点/应用加速
站点或者应用中大量静态资源的加速分发,建议将站点内容进行动静分离,动态文件可以结合云服务器ECS,静态资源如各类型图片、html、css、js文件等,建议结合 对象存储OSS 存储海量静态资源,可以有效加速内容加载速度,轻松搞定网站图片、短视频等内容分发。
- 视音频点播/大文件下载分发加速
支持各类文件的下载、分发,支持在线点播加速业务,如mp4、flv视频文件或者平均单个文件大小在20M以上,主要的业务场景是视音频点播、大文件下载(如安装包下载)等,建议搭配对象存储OSS使用,可提升回源速度,节约近2/3回源带宽成本。
- 视频直播加速
视频流媒体直播服务,支持媒资存储、切片转码、访问鉴权、内容分发加速一体化解决方案。结合弹性伸缩服务,及时调整服务器带宽,应对突发访问流量;结合媒体转码服务,享受高速稳定的并行转码,且任务规模无缝扩展。
- 移动应用加速
移动APP更新文件(apk文件)分发,移动APP内图片、页面、短视频、UGC等内容的优化加速分发。提供httpDNS服务,避免DNS劫持并获得实时精确的DNS解析结果,有效缩短用户访问时间,提升用户体验。
CDN在hexo butterfly主题下的应用
因为众所周知的原因,jsdelivr无法使用了,所以要找新的CDN进行替换。
新版butterfly
使用新版butterfly的用户可以切换成local或者custom模式,如下图。
如果想配置为local模式,只需修改
third_party_provider
属性为local,并且按照注释进行插件安装。1
npm install hexo-butterfly-extjs
如果想配置为custom模式,需修改
third_party_provider
属性为custom,并且修改custom_format
属性,在上图中我就是这么做的。custom_format
属性可以使用给出的例子,或者参考这个链接,给出了常用CDN汇总。
旧版butterfly
旧版butterfly用户或者新版想配置自定义CDN插件的用户就需要第三方CDN插件了。
在上图的配置处进行逐个插件的配置,具体配置可以参考此博客,Butterfly CDN链接更改指南,替换jsdelivr提升访问速度 | 张洪Heo (zhheo.com),如果找到更多CDN可以自己配置上。
CDN选择原则优先使用字节跳动的cdn,如果没有则使用elemecdn。