「内容分发网络原理与实践」
基本原理
基本概念
定义
- C:分发内容-Content
- D:分发策略-Delivery
- N:分发网络-Network
分发内容
- 静态资源:图片、文字、动画
- 动态内容:流媒体
工作过程
- 内容注入
- 用户请求调度
- 用户发起请求
- CDN授权DNS服务器(全局负载均衡GLSB)将节点设备IP返回用户或者将l另一个GSLB设备的IP返回用户
- 用户向GLSB设备发起内容访问请求
- 根据用户IP地址以及访问URL,选择用户所属地域负载均衡设备(SLB),并让用户向该SLB发起访问
- SLB设备通过决策为用户选择最佳服务器,用户向服务器发起访问请求
- 若服务器内容未命中,则该服务器向上级节点请求内容,然后由该服务器提供服务
- 内容分发
- 内容服务
内容接入
内容存储接入
- 互联网内容源提前将内容注入CDN
- 内容永久存储CDN
- 包括对内容的增加、删除和更新,可以使用系统或者手动方式主动发起内容删除并立即实现全网删除
- 对用户服务质量保障最佳,但对CDN资源消耗大、成本高,主要用于IPTV、视频点播
内容预注入
- 源站在内容发布之前注入CDN
- 只进行内容缓存,CDN根据热度实现智能删除
- 删除之后,仍可通过回源实现内容再提取
实时回源
用户访问时,CDN实时拉取源站内容,内容为非托管式接入
对用户服务质量保障低,主要用于网站,为主流应用方式。
用户请求调度
- 全局调度
- 基于DNS调度方式
- 基于应用层重定向调度
- 本地调度
内容分发
- push:由CDN内容管理系统发起,将内容从源站或者内容库主动分发到边缘节点
- pull:由用户发起请求驱动
- 混合分发:利用push方式进行内容预推,后续使用pull方式拉取
内容服务
- 静态内容服务
- 缓存类服务:基于HTTP服务的文件下载
- 流媒体类服务:视频网站
- 动态内容服务:微信、微博等实时互动站点
架构与组网
功能平面
- 管理平面:业务管理、网络管理、分发策略管理、内容接入管理、回源分发管理
- 调度平面:满足用户服务请求调度(DNS调度、HTTP调度、RTSP调度)、内容定位、内容路由
- 数据平面:内容存储、内容缓存、内容分发、内容转码、内容服务
内部网元
- 内容中心节点
- 区域节点
- 边缘服务器节点
- 全局内容路由
- 运维管理
- 运营管理及适配
- 接口
部署架构
- 层级:中心层-区域层-边缘层
- 节点构成:缓存-SLB
CDN间组网
- 并联组网:源站接入多个CDN
- 级联组网:一个上游CDN对接多个下游CDN
关键技术
内容统一ID
- 统一资源定位符(URL)
- 协议
- 主机名
- 端口号
- 路径
- 内容ID
- 参数
- CDN内容统一ID(UniContentID)
- 使用二元组标识:ProviderID、ContentID
- ProviderID是唯一ID,需要再接入点和全网进行配置
- ContentID区分同一个ProviderID的不同内容,全网可重复
负载均衡
负载均衡的关键是资源使用,其最终目标是使每个服务器的资源利用状态尽量达到平衡。把握各个服务器负载情况,并动态调整流量分配是负载均衡技术的核心。
技术分类
- 基于DNS的负载均衡
- 基于客户端的负载均衡
- 基于OSI模型的负载均衡
- 基于二层设备的负载均衡,MAC地址
- 基于三层设备的负载均衡,VIP地址和NAT
- 基于四层设备的负载均衡,VIP地址和端口号,LVS
- 基于七层应用的负载均衡,基于虚拟URL,Nginx和Apache
算法分类
- 轮询:无状态按顺序轮流分配
- 加权轮询:无状态,使用权值轮流分配
- 随机:无状态,随机分配
- 加权随机:无状态,使用权值随机分配
- 最小连接:动态算法
- 加权最小连接:权值和连接数相结合
- 目标地址散列:静态映射算法,将目标IP进行HASH计算
- 源地址散列
- 基于局部性的最少连接算法:在服务器负载基本平衡的情况下将相同IP请求分配给同一台服务器
- 带复制的基于局部性最少连接算法:维护一组IP到一组服务器的映射
路由调度
基于DNS的用户调度
- 智能DNS技术
- 基于DNS重定向技术
基于HTTP重定向
内容缓存技术
缓存替换算法
- LRU算法:缓存经常使用的数据,淘汰未被使用数据,最近最少使用
- LFU算法:最少频率使用
- 基于分数因子的缓存算法
- 基于块等级的缓存算法
- 基于流行度的块等级缓存算法
流媒体技术
- 实时流媒体:RTSP
- 渐进式下载流媒体技术:HTTP Streaming
- 自适应流媒体技术
服务鉴权技术
常见服务鉴权
- 判断引用地址
- 使用用户合法性验证信息
- 使用cookie携带动态验证信息
- 使用POST下载
- 使用图形验证码
- 使用动态密钥
- 内容中插入随机数据加密
- 打包下载
CDN服务器鉴权
- 本地鉴权:门户和CDN共享密钥机制,门户提供URL增加加密后的服务鉴权信息,用户利用鉴权URL向CDN解密后检查URL确保合法性
- 开环加解密:固定密钥在CDN和业务系统中分别配置
发展方向
前端优化
- 合并HTTP请求
- 使用浏览器缓存
- 压缩组件减少通信传输
- 使用外部JavaScript和CSS
- 减少cookie传输
- 避免CSS表达式
动态加速
- 差异化缓存
- ESI:片段缓存
- CDE:增量编码
- 传输加速
- 内容生成加速
SDN调度
P2P流媒体技术
应用协议加速技术
- 广域网应用加速
- SSL应用加速
- HTTPS加速
智能协同技术
- 智能存储
- 智能调度
- 智能组网
NVMe技术
开源方案
开源软件
缓存系统
- Squid
- Nginx
- ATS
- Varnish
内容管理系统
- HDFS
- Ceph
- GoogleFS
- ElastSearch
内容路由系统
- LVS
- Nginx
- Haproxy
监控系统
- Cacti
- Nagios
- Zabbix
技术指标
- 命中率
- 吞吐量
- 并发值
- 响应时间
- MDI:媒体传输质量
- MOS:平均意见指标
- 稳定性和可靠性
测试验证
系统测试
目的
- 以功能测试为主。
- 验证CDN的需求和功能是否得到完整实现
- 验证CDN在正常情况下的功能和特性
要求
- 了解操作系统和功能模块的设定
- 分析模块的设计和实施思路
- 对系统运行状态、边界值进行分析
- 进行全流程的系统功能测试,关注整个系统的整个运行结果,分析功能是否完备,是否可完整对外服务
方法
- Postman
- SoapUI
- DNS查询
- Curl
网络测试
内容测试
- 测试源站是否能够推送内容到内容库
- 测试用户请求调用模块RR中基于DNS和HTTP调度配置是否成功
- 测试流媒体模块配置是否成功
- 测试Curl发起源站资源,是否可以命中缓存
现网测试
目的是发现当前运行CDN中的性能瓶颈,以实现系统优化
- 模拟各地用户请求,通过不同负载下的测试结果分析评估CDN能力
- 测试极端水平,查找CDN模块弱点
- 验证稳定性和可靠性
开源套件
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.