CDN的使用场景和操作细节
随着互联网的发展,各种网络应用也雨后春笋般的发展,应用越做越大,访问路径越来越长,用户的访问质量受到严重的影响,特别是用户和网站之间的链路被突发的大流量数据拥堵、异地访问急需加速,减少网络费用等因素,对于这些急需解决的问题,于是就有了内容发布网络(Content Delivery Network,简称CDN)。
CDN是指一种通过互联网互相连接的电脑网络系统,利用最靠近用户的服务器,更快、更可靠地将音乐、图片、视频、应用程序及其他文件发送给用户,来提供高性能、可扩展性及低成本的网络内容传递给用户。
CDN总承载量可以比单一骨干最大的带宽还要大。这使得内容分发网络可以承载的用户数量比起传统单一服务器多。也就是说,若把有100Gbps处理能力的服务器放在只有10Gbps带宽的数据中心,则亦只能发挥出10Gbps的承载量。但如果放到十个有10Gbps的地点,整个系统的承载量就可以到10*10Gbps。同时,将服务器放到不同地点,可以减少互连的流量,进而降低带宽成本。
CDN访问路径
- 首先访问本地的DNS,如果没有命中,继续递归或者迭代查找,直到命中拿到对应的IP地址。
- 拿到对应的IP地址之后服务器端发送请求到目的地址。注意这里返回的不直接是CDN服务器的IP地址,而是全局负载均衡系统的IP地址
- 全局负载均衡系统会根据客户端的 IP地址和请求的url和相应的区域负载均衡系统通信
- 区域负载均衡系统拿着这两个东西获取距离客户端最近且有相应资源的CDN缓存服务器的地址,返回给全局负载均衡系统
- 全局负载均衡系统返回确定的CDN缓存服务器的地址给客户端。
- 客户端请求缓存服务器上的文件
其中有一个比较重要的点,在过程1里:这个过程中,有一个CNAME的过程,我们访问CDN资源的地址一般是a.cloud.com或者类似的地址,是一个公司的访问CDN的专用地址。但是一般用的CDN的服务却是第三方的,即其实资源在他们的地址上比如tencent.cdn.com。这时候就需要在CDN查询的时候,需要把我们访问a.cloud.com的地址映射到tencent.cdn.com的地址上,然后拿着映射后的地址再去走一遍DNS解析,成功之后才获取到第三方提供的全局负载均衡系统的IP。再继续走后面的流程。
CDN的优势
我们使用CDN的两个重要的原因就是加速网站访问、减少宽带成本,其次,CDN还有很多作用:
1、为了实现跨运营商、跨地域的全网覆盖
互联不互通、区域ISP地域局限、出口带宽受限制等种种因素都造成了网站的区域性无法访问。CDN加速可以覆盖全球的线路,通过和运营商合作,部署IDC资源,在全国骨干节点商,合理部署CDN边缘分发存储节点,充分利用带宽资源,平衡源站流量。阿里云在国内有500+节点,海外300+节点,覆盖主流国家和地区不是问题,可以确保CDN服务的稳定和快速。
2、为了保障你的网站安全
CDN的负载均衡和分布式存储技术,可以加强网站的可靠性,相当无无形中给你的网站添加了一把保护伞,应对绝大部分的互联网攻击事件。防攻击系统也能避免网站遭到恶意攻击。
3、为了异地备援
当某个服务器发生意外故障时,系统将会调用其他临近的健康服务器节点进行服务,进而提供接近100%的可靠性,这就让你的网站可以做到永不宕机。
4、为了节约成本投入
使用CDN加速可以实现网站的全国铺设,你根据不用考虑购买服务器与后续的托管运维,服务器之间镜像同步,也不用为了管理维护技术人员而烦恼,节省了人力、精力和财力。
5、为了让你更专注业务本身
CDN加速厂商一般都会提供一站式服务,业务不仅限于CDN,还有配套的云存储、大数据服务、视频云服务等,而且一般会提供7x24运维监控支持,保证网络随时畅通,你可以放心使用。并且将更多的精力投入到发展自身的核心业务之上。
CDN使用场景
CDN是将源站内容分发至最接近用户的节点,使用户可就近取得所需内容,提高用户访问的响应速度和成功率。解决因分布、带宽、服务器性能带来的访问延迟问题,适用于站点加速、点播、直播等场景。今天为大家分享几个CDN的典型适用场景。
1、网站站点/应用加速
站点或者应用中大量静态资源的加速分发,建议将站点内容进行动静分离,动态文件可以结合云服务器ECS,静态资源如各类型图片、html、css、js文件等,建议结合 对象存储OSS 存储海量静态资源,可以有效加速内容加载速度,轻松搞定网站图片、短视频等内容分发
2、视音频点播/大文件下载分发加速
支持各类文件的下载、分发,支持在线点播加速业务,如mp4、flv视频文件或者平均单个文件大小在20M以上,主要的业务场景是视音频点播、大文件下载(如安装包下载)等,建议搭配对象存储OSS使用,可提升回源速度,节约近2/3回源带宽成本。
3、视频直播加速
阿里云一站式 视频直播服务 服务已正式上线发布!基于领先的内容接入与分发网络和大规模分布式实时转码技术打造的音视频直播平台,提供便捷接入、高清流畅、低延迟、高并发的音视频直播服务。支持多直播场景,全景数据统计,丰富角度分析;直播功能丰富,录制回放、实时封面、实时转码、连麦混流。
4、移动应用加速
移动APP更新文件(apk文件)分发,移动APP内图片、页面、短视频、UGC等内容的优化加速分发。提供httpDNS服务,避免DNS劫持并获得实时精确的DNS解析结果,有效缩短用户访问时间,提升用户体验。
CDN缓存策略
这对不同文件类型合理配置缓存策略能有效的增加CDN回源效率,大幅缩减宽带成本
1、配制合理的CDN缓存规则
说明:让当地或就近的 CDN 节点上的缓存内容,直接提供给用户访问。多个客户访问相同资源也无需回源站获取内容,以此减少回源带宽。
优点:缓存住的内容可直接由 CDN 提供资源的访问。
缺点:根据 CDN 缓存算法 "最近最少使用" 的原则,将最近访问内容频率最低的会被清理出 CDN 缓冲中,导致冷资源还会重新回源站获取。
例如: jpg|bmp|gif 图片类型缓存 7 天,mp4|flv|ts 视频类型缓存 30 天
需要注意:当CDN主动更新文件时可能会造成服务器压力上升,因为厂商的服务器会有很多,同时拉取更新资源时,请求量会很大。如果恰好处于业务高峰期需要和CDN厂家协商更改拉取时间。
2、去问号回源
说明:只缓存 URL 中的问号 ? 前路径中的地址资源,而不再缓存整条 URL 地址资源。
优点:只缓存住主要的资源内容,忽略掉问号后的经常变化的参数,有利于提高缓存命中率,减少回源带宽。
缺点:问号后如果有不同的内容版本号来区分资源,去问号缓存可能会影响实际访问效果,从而导致访问到旧资源。
例如: http://www.youku.com/test.mp4... , 配制去问号缓存 http://www.youku.com/test.mp4 做到只缓存这个URL地址资源。
3、开启 CDN 父层
说明:CDN 父层是指相对于边缘节点的上层再加了一个共享存储池,用来将多个 CDN 边缘节点的请求汇聚到父层,由父层再回源站获取资源。
优点:由父层统一回源站,可以起到收敛多个 CDN 边缘节点的请求。做到合并请求,减少回源带宽。
缺点:父层的部署地区并不是离客户最近的机房线路,由父层回源链路过长可能会被线路抖动产生回源失败。父层故障可能会导致多个 CDN 边缘节点无法获取到回源信息,影响面也较大。
4、开启 CDN 分段(分片)回源(缓存)
说明:CDN 分片回源是指将一份文件拆分成若干个小文件回源。
优点:通过识别不同类型的文件大小,来调整分片的大小。将客户第一次请求,由分片服务自动将资源的请求拆分成若干个分片,最终将分片缓存在边缘或父层中。
缺点:分片服务在第一次无论客户请求过程中是否断开,都会将请求进行分片回源。产生较多的请求次数,增加源站的HTTP请求连接数。
例如:以4M为分片单位,仅对点播和下载文件启用分片功能。
5、多个加速域名共享CDN缓存
说明:多个加速域名使用同一个源站,多个加速域名默认都会回源获取资源。
优点:配制了共享CDN缓存策略,多个加速域名只会回源一次,减少回源带宽。
缺点:多个加速域名的HOST会被合并成一个主要回源域名的HOST,导致记录回源域名不够清晰。
6、HTTP 和 HTTPS 共享CDN缓存
说明:HTTP 和 HTTPS 的 URL,默认是分别回源获取对应的资源。
优点:配制 HTTP 和 HTTPS 共享缓存策略,可以减少回源次数及带宽。
缺点: HTTP 的回源获取错误文件导致 HTTPS 响应错误
7、限制回源带宽。
说明:针对源站带宽有一定的限额,如果达到带宽上限会引起无法响应和请求到源站任何资源。
优点:限制回源带宽设置阀值,可以减少回源量突增导致无法访问的异常产生
缺点:会导致回源带宽突增后,导致超过回源带宽的请求失败
8、用第三方云存储(或内容注入)
说明:将源站迁移至第三方云存储,或CDN缓存节点作为临时存储站。
优点:一次性或者临时性将源站资源上传和同步到第三方存储机构,以减少回源带宽。
缺点:使用第三方云存储会产生使用成本,使用CDN缓存注入节点,将会占用上传带宽。
9、CDN 预取(预热)
说明:将资源提前一次性推送到CDN的边缘或者父层缓存节点。
优点:只占用一次上传带宽,而推送到CDN边缘或父层的内容可直接被用户访问。
缺点:需要提前获得推送资源,并且会占用上传带宽,业务繁忙时预热会导致上传带宽紧张。
欢迎订阅「K叔区块链」 - 专注于区块链技术学习
博客地址:http://www.jouypub.com
简书主页:https://www.jianshu.com/u/756c9c8ae984
segmentfault主页:https://segmentfault.com/blog/jouypub
腾讯云主页:https://cloud.tencent.com/developer/column/72548