内容分发网络原理与实践
作者: 唐宏
出版时间:2018年版
内容简介
本书分三部分系统地分析了CDN基本原理与关键技术、如何选择合适的CDN提升业务质量、利用开源软件设计自有CDN等相关技术原理。首先介绍CDN关键技术原理,然后介绍CDN不同的运营与建设模式,最后介绍了利用开源软件搭建CDN的方案。通过本书读者可以较为深入的了解CDN关键技术、CDN市场与业务、CDN的初步设计与开发。
目录
作者序 2
目录 2
第 一部分 CDN基本原理与关键技术 11
1 影响互联网应用质量的关键 11
1.1 互联网应用发展 11
1.2 互联网应用质量 12
1.2.1 质量是互联网应用的生命 12
(1) 用户对互联网应用质量的期望 12
(2) 互联网应用质量指标--QoE 13
1.2.2 网络性能是影响质量的关键 14
(1) 网络性能对互联网应用质量的影响 14
(2) 网络传送性能指标--QoS 17
1.3 提高互联网应用质量的方法 18
1.3.1 集中式部署带来的问题 18
1.3.2 利用网站镜像加速 18
1.3.3 利用CDN进行加速 19
(1) 互联网2:8法则 19
(2) CDN的加速作用 21
2 CDN基本原理 24
2.1 CDN的基本概念 24
2.1.1 CDN的定义 24
2.1.2 CDN可承载的内容 24
2.2 CDN的工作过程 25
2.2.1 CDN的基本工作过程 25
2.2.2 CDN内容接入 27
(1) 内容存储接入 28
(2) 内容预注入 28
(3) 实时回源 28
2.2.3 CDN用户请求调度 29
(1) 全局调度 29
(2) 本地调度 29
2.2.4 CDN内容分发 30
(1) Push方式 30
(2) Pull方式 31
(3) 混合分发方式 31
2.2.5 CDN内容服务 32
(1) 静态内容服务 32
(2) 动态内容服务 33
3 典型的CDN架构与组网 34
3.1 CDN功能平面 34
3.2 CDN内部网元 35
(1) 内容中心节点 35
(2) 区域节点 36
(3) 边缘服务节点 36
(4) 全局内容路由 36
(5) 运维管理 37
(6) 运营管理及适配 37
(7) 接口 37
3.3 CDN部署架构 39
3.4 CDN间组网 40
4 CDN关键技术 43
4.1 统一内容ID 44
4.1.1 统一资源定位符 44
4.1.2 CDN内容统一ID 45
4.2 本地负载均衡(SLB) 45
4.2.1 负载均衡技术 45
4.2.2 负载均衡的技术分类 46
(1) 基于DNS的负载均衡 46
(2) 基于客户端的负载均衡 46
(3) 基于OSI模型的负载均衡 47
4.2.3 负载均衡的算法 48
4.3 用户请求路由调度(RR)/全局负载均衡(GSLB) 50
4.3.1 基于DNS的用户调度 50
(1) 智能DNS技术 50
(2) 基于DNS重定向调度 53
(3) 策略的优劣分析 54
4.3.2 基于 HTTP 的重定向 54
(1) HTTP重定向基本原理 54
(2) 基于HTTP重定向调度 55
(3) 策略的优劣分析 55
4.4 内容缓存技术 56
4.4.1 缓存技术 56
4.4.2 缓存替换算法 57
4.5 流媒体技术 63
4.5.1 实时流媒体技术:RTSP 63
4.5.2 渐进式下载流媒体技术:HTTP Streaming 65
4.5.3 自适应流媒体技术 68
(1) HTTP Live Streaming(HLS) 70
(2) Smooth Streaming 70
(3) HTTP Dynamic Streaming(HDS) 71
(4) DASH 73
4.6 服务鉴权技术 76
4.6.1 常见的服务鉴权技术 76
4.6.2 CDN服务鉴权机制 77
5 CDN新技术介绍 80
5.1 前端优化技术 80
5.2 动态加速技术 82
(1) 差异化缓存技术 82
(2) 传输加速技术 84
(3) 内容生成加速技术 85
5.3 SDN调度技术 86
5.4 P2P流媒体技术 88
5.5 应用协议加速技术 88
(1) 广域网应用加速 89
(2) SSL应用加速 89
(3) HTTPS加速 89
5.6 智能协同技术 89
5.7 NVMe技术 90
第二部分 选择合适的CDN提升业务质量 92
6 CDN产业与市场发展 92
6.1 CDN产业发展 92
6.1.1 CDN产业的发展历程 92
6.1.2 CDN服务提供商类型 93
6.1.3 CDN市场的发展特点 95
6.2 CDN发展趋势 95
6.2.1 CDN业务发展趋势 95
(1) 视频成为最主要业务 96
(2) 增值业务快速增长 96
(3) 差异化订制需求增长 97
6.2.2 CDN市场发展趋势 98
(1) 行业竞争加大,资费逐年降低 98
(2) 客户逐步自建,自建和租用结合 98
(3) 运营商纷纷切入CDN市场 99
6.2.3 CDN网络发展趋势 100
(1) CDN融合承载 100
(2) CDN与云结合 101
(3) CDN网络协同 104
6.3 CDN服务商面临的挑战 104
6.3.1 不可忽视的安全因素 105
6.3.2 大数据流量的利用 105
6.3.3 推进统一的技术标准 105
6.3.4 定制化的技术创新要求 105
7 选择合适的CDN 107
7.1 租用CDN vs 自建CDN 107
7.1.1 业务需求 107
7.1.2 CDN与成本分析 107
(1) 带宽成本 107
(2) 建设和维护成本 107
7.1.3 CDN租用与自建结合 108
7.2 租用CDN的选择 109
7.2.1 CDN服务类型与功能 110
7.2.2 CDN容量与分布 110
7.2.3 CDN运营维护 110
7.2.4 CDN价格 111
7.2.5 多CDN租用 112
7.3 自建CDN的选择要素 112
7.3.1 开源CDN软件 vs商业CDN软件 113
7.3.2 业务需求变化 113
7.3.3 开发和维护能力 114
8 租用CDN实施的考虑与评估 115
8.1 CDN需求确认 115
8.2 CDN测试验证 118
8.2.1 CDN服务切换 118
8.2.2 CDN服务质量测试 119
(1) 响应时间 120
(2) 节点性能 121
(3) 服务错误率 122
(4) 应用层性能 122
8.3 CDN服务监控 123
(1) 设备监控 123
(2) 服务监控 125
8.4 多CDN租用调度 125
8.4.1 多CDN租用调度系统(TMS) 126
8.4.2 服务调度流程 128
9 自建CDN实施的考虑与评估 130
9.1 自建CDN案例分析 130
9.2 自建CDN中的开源软件介绍 132
9.2.1 缓存系统 133
9.2.2 内容管理系统 133
9.2.3 内容路由系统 134
9.2.4 监控系统 135
9.3 自建CDN部署 136
9.4 自建CDN技术指标 137
9.4.1 命中率 137
9.4.2 吞吐量 138
9.4.3 并发值 139
9.4.4 响应时间 140
9.4.5 MDI 141
9.4.6 MOS 142
9.4.7 稳定性和可靠性 143
第三部分 利用开源软件设计自有CDN 144
10 开源CDN架构设计 144
10.1 业务需求分析 144
10.2 本书开源CDN总体架构 145
10.3 CDN网络规划 147
11 流服务缓存节点模块的设计 148
11.1 流服务缓存节点的特性 148
11.2 流服务缓存节点开源软件简介 148
11.2.1 Squid简介 148
11.2.2 Quagga简介 149
11.2.3 LVS简介 150
11.2.4 Keepalived简介 150
11.2.5 Nginx简介 150
11.2.6 Lua简介 150
11.3 模块设计 151
11.3.1 代理缓存(Squid) 151
11.3.2 四层负载均衡(OSPF+LVS+Keepalived) 152
11.3.3 七层负载均衡(Nginx+Lua) 153
11.4 环境配置 153
11.4.1 Squid安装与配置 153
11.4.2 Ospf安装与配置 157
11.4.3 LVS安装 159
11.4.4 Keepalived安装与配置 160
11.4.5 Nginx安装与配置 163
11.4.6 lua-nginx-module模块安装 164
12 内容库模块的设计 167
12.1 内容库的特性 167
12.2 内容库开源软件简介 167
12.2.1 FTP简介 167
12.2.2 Ceph简介 167
12.3 模块设计 169
12.3.1 内容注入(FTP) 169
12.3.2 分布式内容存储(Ceph) 169
12.3.3 内容分发(Nginx) 170
12.4 环境配置 170
12.4.1 FTP服务器搭建 170
12.4.2 Ceph安装与配置 171
12.4.3 Nginx安装与配置 175
13 全局用户请求调度模块的设计 176
13.1 基于DNS的流量管理服务设计 176
13.1.1 基于DNS流量管理的开源软件简介 176
(1) Bind 176
(2) Mysql数据库 176
13.1.2 模块设计 177
13.1.3 环境配置 177
13.2 基于HTTP的应用层调度服务设计 180
13.2.1 基于HTTP调度的开源软件简介 180
13.2.2 模块设计 180
13.2.3 环境配置 181
14 网络管理模块的设计 183
14.1 网络管理工作流程 183
14.2 网络管理开源软件简介 184
14.2.1 Zabbix简介 184
14.2.2 InfluxDB简介 186
14.2.3 Grafana简介 188
14.3 模块设计 188
14.3.1 数据采集(Zabbix) 188
14.3.2 数据存储(InfluxDB) 189
14.3.3 数据展示(Grafana) 189
14.4 环境配置 189
14.4.1 Zabbix安装与配置 189
14.4.2 InfluxDB安装与配置 192
14.4.3 Grafana安装与配置 195
15 基于开源的自建CDN测试验证 197
15.2 系统测试 197
15.2.1 测试目的 197
15.2.2 测试方法 198
15.2.3 测试拓扑组网 200
15.2.4 测试内容 201
15.2.5 测试过程 202
15.2 现网测试 208
15.2.1 测试目的 208
15.2.2 测试方法 208
15.2.3 测试过程 209
参考文献 214