1分钟了解CDN内容分发技术
这是一个缓存为王的互联网世界
缓存为王
互联网从引入国内开始到现在,一眨眼已经30余年的时间了。这期间互联网的内容形态已经有万千变化。
从最开始的 hao123,yahoo, souhu 等静态新闻类网站,到现在图片、视频、直播、游戏等内容和形式富文本交互式的内容生态,已然百花齐放,即内容从静态为主,转向动态为主。
优秀产品全球化,光纤入户,手机游戏对战等等,这些10年前起来还是奢望的技术,现在已经普及众生。即产品全球化,传输速率和质量受到新挑战。
以淘宝为例,为了能承载中国近14亿人,淘宝可谓淋漓尽致的发挥CDN
的功用:
- 500T的原图 500T的缩略图
- 700亿左右的缓存图片
- 100余CDN节点
- 峰值流量TB级别
而这已经是几年的数据。
淘宝CDN应用
与此同行,超大流量即对电信、联通等运营商骨干网提出了新的要求,如何将产品第一时间送达终端用户,各家想尽了办法,CDN
功不可没。
用户访问流程
- 网页加速
- 流媒体加速
- 文件传输加速
- 应用协议加速
CDN
在这些领域时至今日,依然有着不可撼动的地位。这一些都缘由用户对于网速的追求,有数据表示:
响应时间 | 用户感觉 |
---|---|
0-1s | 很快 |
1-2s | 一点点慢 |
2-4s | 机器在工作 |
4-6s | 先开点别的吧 |
>6s | 网站坏了吧 |
CDN
对我们生活有如此大影响,作为IT,了解其工作原理还有很有必要的。我们会从如下三方面着手了解。
- CDN发展史及工作方式
- CDN的关键技术
- 加速新技术
1、CDN发展史及工作方式
C
ontent D
istribute N
etwork:内容分发网络,又名C
ontent D
elivery N
etwork(内容交付网络),旨在解决第一公里的带宽问题。
服务成功率、建连时间、时延、视听播放卡顿度、图像清晰度的好坏决定互联网应用的生死。
- 无
CDN
的用户终端访问数据走向
用户 -> 互联网 -> 服务商
- 有
CDN
的用户终端访问数据走向
用户 -> 互联网 -> CDN 或 服务商
1.1 CDN的工作原理
CDN工作原理
CDN
的最终目标是尽可能将数据放离用户尽可能近的地方。 了解CDN
的工作原理有助于理解其如何实现该想法:
- DNS解析地址为CNAME指向的CDN专用dns服务器
- CDN返回全局负载均衡设备IP
- 用户向全局负载均衡设备发起请求
- 全局负载均衡设备根据用户IP地址,以及用户请求内容,选择用户所属区域的负载均衡设备,告诉用户向这台设备发起请求
- 区域负载均衡设备会为用户选择一台合适的缓存服务器提供服务。选择依据包括:用户IP,用户距离,请求内容,服务器负载情况
- 全局负载均衡设备把服务器的IP地址返回给用户
- 用户向缓存服务器发起请求,缓存服务器返回用户请求内容。如果缓存用品没有请求内容,则依次向上级缓存服务器追溯,直至将网站的源服务器拉到本地。
凡对互联网有一定基础,理解起来都不是难事,但事实上,CDN
的资源调度和实施还是存在一定实现复杂度。看了CDN
逻辑框架及相关服务接口,会有所体会。
CDN逻辑框架及相关服务接口
1.3 CDN可承载的内容
静态内容是早期 CDN
主要承载的内容,以文字、图片、动画等内容为主。随着互联网不断演化,近年来,流媒体、视频、SSL认证、HTTPS加速等也已经成为CDN
的业务范畴。
- 网页加速
- 流媒体加速
- 文件传输加速
- 应用协议加速
不同内容的加速方式也有差别:
流媒体CDN与web
应用技术也多种多样,主要还是以开源技术为主:
- squid
- quagga
- lvs
- keepalived
- nginx
- lua
1.4 内容接入方式
- 内容存储接入 源站发布内容前,提前把内容注入到CDN。业务系统会期望用户访问的请求指向CDN,引导用户终端直接向CDN发起请求,无需从源站获取内容,提升终端用户体验
- 内容预注入 方式和内容存储接入类似,但不进行内容长久存储,只会把热点内容临时缓存。根据热点智能增删
- 实时回源 事先不做缓存,当用户发起请求时,实时从源站获取,随即分发至站点。终端用户的再次请求会将提速
1.5 用户请求调度
- 全局
根据用户所在地理位置不同,在各节点之间分析决策,最终将用户请求转移至整个网络中距离用户最近的节点。主要基于
DNS
调度和基于应用层重定向两种方式 - 本地 局限在一定地理范围内,更注重一定区域内服务器健康和负载状况。将请求分发给状态最佳,最轻闲的服务器,充分利用现有设备,有效解决用户请求过多引发系统过载的问题。
1.6 内容分发
- PUSH
一种智能主动的分发策略:由
CDN
管理系统主动发起。将内容从源站或中心内容库主动分发至边缘节点。主要协议有HTTP
,FTP
等。 - PULL
被动策略,根据用户请求,边缘
CDN
节点向中心节点或源站发起内容请求的过程。 - 混合
2、CDN的关键技术
CDN
的关键技术我们主要关注:
- 用户统一ID
- 用户请求调度规则
- 内容缓存技术
- 服务鉴权技术
2.1 用户统一ID
针对不同业务需要有唯一ID
标识。在CDN
总体架构设计之初就需考虑到. 有如下两种思路:
- 在内容进入
CDN
之前按规律统一编码 - 不对内容编码,而是针对每个接入的业务编码
如果出现重复ID
,CDN
会把错误的内容发给用户
2.2 用户请求调度规则
- 智能DNS调度 普通
DNS
只解析IP地址,而智能DNS
系统会判断用户源IP地址,分配最优最近资源的IP地址给用户。 - 基于DNS重定向调度 将域名解析到
CDN
友商,由友商根据自己的资源情况完成用户的最优资源调度 - 基于HTTP重定向 301,302,meta fresh。相比
DNS
智能解析,更精准、更精细、更了解用户。但也HTTP
重定向需多一步解析,链路长,GLSB可能会成为瓶颈,核心设备承压大等问题
2.3 内容缓存算法
- Least Frequrently Used: 最少频率使用
- Low Inter-Reference Recency Set
- Least Recently Used: 最近最少使用
- Leaste Recently Frequently Used
- Frequently Based Replacement
2.4 服务鉴权技术
对于友商蹭流量的行为给予严厉谴责,技术上严厉打击,常用打击方式:
- 判断引用地址
- 用户身体验证
- 使用cookies携带验证信息
- 使用POST
- 使用验证码
- 使用动态密钥
- 在内容中随机插入数据加密
- 打包下载
3、加速新技术
互联网不断成熟的过程,对行业也做了精细化分工。绝大多数应用均分为前后端,其中前端最接近用户。作为接近用户的第一层,FEO的优化显得尤为重要。
3.1 前端优化技术FEO(Front-End Optimization)
- 合并HTTP请求
- 使用浏览器缓存 cache-control , expires控制
- 压缩组件减少通信传输
- 使用外部JavaScript和CSS HTML文档通常不会被配置为可缓存。外部的可以缓存到本地。
- 减少COOKIES传输
- 避免CSS表达式
3.2 动态加速技术
动态内容CDN
不会缓存,但请求如果还到CDN
再回源,会有传输延迟和数据传输失败的问题。
动态加速技术解决方案:
- 差异化缓存
- 传输加速技术(减少源到用户的时延和带宽)
- 动态内容加速技术(提高服务端生成动态网页的性能),主要有预取技术DUP(Data Update Propagation)和DC2CP(Dynamic Content Caching Protocol)技术
加速技术主要有:
- ESI片段缓存
- CDE增量编码
3.2 传输加速技术
利用CDN
的站点多的优势,帮助终端用户利用CDN
链接,找到触达源站的最优路径。
3.3 SDN调度技术
控制平面和数据转发平面分离,不再耦合在一起。优势:
- 整个网络状态均由SDN控制器收集
- 网络管理控制通过软件编程实现,灵活且无需关注底层实现细节。
3.4 P2P流媒体技术
借用终端用户宽带,效果待估量。用户隐私泄密,安全隐患,带宽被占满,消耗较多,用户感知较大会刻意关闭软件会失效等问题,都被一一验证。
3.5 应用协议加速技术
- 广域网加速
- SSL应用加速 硬件加解密
- HTTPS加速 拆分HTTP请求