计网Chapter2-3_P2P视频流DASH与CDN可扩展性

计网Chapter2-3_P2P视频流DASH与CDN可扩展性
agsdChapter 2.3:P2P、视频流、DASH 与 CDN 的可扩展性
Chapter 2.3 的主线是应用层系统的可扩展性。当很多用户同时下载文件或观看视频时,中心服务器很容易成为瓶颈。P2P、DASH 和 CDN 分别从上传能力、码率选择和内容位置三个角度解决规模问题。
本节核心结论: 大规模应用不能只依赖中心服务器;P2P 分散上传能力,DASH 让客户端适应网络变化,CDN 把内容副本放到更靠近用户的位置。
1. P2P 的基本思想
P2P 的基本单位是 peer。在纯 P2P 架构中,几乎没有一直运行的中心服务器,任意端系统之间可以直接通信。每个节点既可以请求服务,也可以提供服务。
P2P 的自扩展性来自一个关键事实:新节点加入时,一方面增加下载需求,另一方面也带来上传能力。当节点越多时,系统负担增加,但可用服务能力也可能同步增加。
flowchart LR
Seed[初始源节点] --> P1[Peer1]
Seed --> P2[Peer2]
P1 <--> P2
P2 <--> P3[Peer3]
P3 <--> P4[Peer4]
P4 <--> P1
这张图强调 P2P 的文件分发不是“所有人只从服务器下载”,而是 peer 之间也会交换数据块。初始源节点把文件注入系统后,下载到块的 peer 也能继续上传给别人。
2. C/S 与 P2P 文件分发时间
设文件大小为 F,peer 数量为 N,服务器上传速率为 u_s,第 i 个 peer 上传速率为 u_i,第 i 个 peer 下载速率为 d_i,所有 peer 中最小下载速率为 d_min。
在 C/S 模式下,服务器至少要上传 N 份文件,总上传量是 NF,所以服务器侧时间下界是:
1 | NF / u_s |
最慢客户端下载一份文件至少需要:
1 | F / d_min |
因此 C/S 分发时间满足:
1 | D_cs >= max{ NF/u_s, F/d_min } |
这说明 C/S 模式下,随着 N 增大,服务器上传压力线性增大。
在 P2P 模式下,服务器或初始源节点至少要上传一份完整文件:
1 | F / u_s |
最慢 peer 仍然至少要下载一份:
1 | F / d_min |
所有 peer 总共需要下载 NF 数据,而总上传能力是 u_s + Σu_i,因此还有下界:
1 | NF / (u_s + Σu_i) |
所以 P2P 分发时间满足:
1 | D_p2p >= max{ F/u_s, F/d_min, NF/(u_s + Σu_i) } |
P2P 的关键优势在第三项:N 增大时,总需求 NF 增加,但总上传能力 u_s + Σu_i 也随 peer 增加而增加。
3. u_s 是否意味着 P2P 有中心服务器
公式里的 u_s 不一定表示传统 C/S 中长期承担全部下载压力的中心服务器。它表示最初拥有完整文件的源节点或初始种子节点的上传速率。
哪怕是 P2P,文件一开始也必须由某个节点拥有完整副本。课件为了推导方便,把这个源节点称为 server,并记作 u_s。它的作用是把文件至少注入系统一次,之后 peer 之间可以互相分发。
如果课件记号中 N 表示下载的 peer 数量,那么总上传能力是:
1 | u_s + Σ(i=1..N) u_i |
如果自己把“总共 n 个节点”定义为包含初始源节点在内,那么剩余 peer 数量是 n - 1,总上传能力可以写成:
1 | u_s + Σ(i=1..n-1) u_i |
关键是先说明 N 是否包含初始源节点。
4. BitTorrent:分块交换与互惠机制
BitTorrent 是 P2P 文件分发的典型例子。它不会让每个 peer 一次下载完整文件,而是把文件分成多个 chunk 或 block,各 peer 之间交换不同块。
新节点加入 torrent 时,大致经历:
- 向 tracker 注册。
- 获得 peer 列表。
- 与部分 peer 建立连接。
- 从不同 peer 下载文件块。
- 把自己已有的块上传给其他 peer。
两个核心策略是 rarest first 和 tit-for-tat。
rarest first 指优先请求网络中最稀缺的块。这样可以避免某些块过少,导致后期大量 peer 都卡在同一个缺失块上。
tit-for-tat 指优先给上传给自己最快的 peer 回传数据,同时定期随机选择额外 peer 进行试探。这既鼓励互惠,也给新节点进入交换关系的机会。
5. 视频流服务为什么困难
视频流量占据互联网很大比例。视频服务的难点主要有两个:
- 规模性:如何同时服务海量用户。
- 异构性:不同用户的带宽、设备、网络路径和稳定性差异很大。
视频本质上是按固定速率播放的图像序列。原始视频数据量巨大,因此必须压缩。压缩主要利用两类冗余:
- 空间冗余:同一帧内部有大量相似像素。
- 时间冗余:相邻帧之间变化通常不大。
存储型流媒体还面临 continuous playout constraint,即播放必须连续。网络中存在 jitter、丢包、重传和用户快进快退,因此客户端需要 playout buffer 来吸收网络波动。
机制理解: 缓冲区不是为了提高画质,而是为了让不稳定的网络传输变成尽量稳定的播放体验。
6. DASH:动态自适应 HTTP 流媒体
DASH 全称是 Dynamic Adaptive Streaming over HTTP。它的核心思想是:把视频分成块,为每个块准备多个码率版本,让客户端根据网络状况动态选择。
服务器端负责:
- 将视频文件切成多个块。
- 为每个块编码多个码率版本。
- 把块复制到服务器或 CDN 节点。
- 提供 manifest file,列出各块和各码率版本的 URL。
客户端负责:
- 获取 manifest file。
- 判断什么时候请求下一个块。
- 根据带宽和缓冲区选择码率。
- 选择从哪个服务器或 CDN 节点请求。
当网络好时,客户端请求高码率块;当网络变差时,客户端请求低码率块。因此视频清晰度可能在播放过程中自动升降。
7. CDN:把内容放到更靠近用户的位置
CDN 是 Content Distribution Network,内容分发网络。它解决的问题是:如何把视频、图片、网页等内容稳定地分发给大量用户。
单个 mega-server 不可扩展,原因包括路径远、瓶颈链路多、重复长距离传输浪费带宽、单点故障、中心服务器和周边网络容易拥塞。
CDN 的基本思想是:在全网部署缓存节点,把内容复制到多个位置,用户请求时导向较近或网络状况较好的副本。
两类部署策略是:
| 策略 | 含义 | 优点 | 缺点 |
|---|---|---|---|
| enter deep | 把 CDN 节点深入部署到许多接入网 | 离用户近 | 节点多,管理复杂 |
| bring home | 在少数关键位置或 IXP 附近部署集群 | 管理简单 | 离部分用户较远 |
8. DASH 与 CDN 如何配合
DASH 决定“请求什么质量的视频块”,CDN 决定“从哪里请求这些块”。两者常常一起工作。
sequenceDiagram
participant Client as 客户端
participant DNS as DNS/CDN 映射
participant CDN as CDN 节点
participant Player as 播放器
Client->>DNS: 解析视频 URL
DNS-->>Client: 返回合适 CDN 节点
Client->>CDN: 请求 manifest
CDN-->>Client: 返回块列表和码率
Client->>CDN: 请求合适码率块
CDN-->>Player: 交付视频块
这张图展示了两层选择:DNS/CDN 先帮助客户端找到合适节点,DASH 再让客户端根据当前带宽和缓冲区选择合适码率的视频块。
CDN 常借助 DNS/CNAME 重定向用户。用户访问内容网站时,网站可能返回指向 CDN 域名的 CNAME;随后 CDN 的 DNS 系统选择合适节点,客户端再通过 HTTP 请求内容。
9. 易混点
P2P 不是完全没有任何服务器。实际系统中可能有 tracker、索引服务器、认证服务器等辅助组件,但文件块主要在 peer 之间交换。
DASH 和 CDN 不是同一件事。DASH 解决码率自适应,CDN 解决内容位置和分发路径。
缓冲区不是为了提高画质,而是为了抵抗 jitter 和短期吞吐波动。
u_s 不一定是传统中心服务器,它可以表示初始源节点或 original seed 的上传能力。
10. 复习清单
学完本节后,应能回答:
- P2P 为什么具有自扩展性?
- C/S 文件分发时间为什么会随
N线性增长? D_cs和D_p2p的公式中每一项分别来自什么限制?- BitTorrent 中 tracker、torrent、chunk 分别是什么?
- rarest first 为什么有助于文件分发?
- tit-for-tat 如何抑制只下载不上传?
- 视频流服务为什么需要编码、DASH 和缓冲区?
- DASH 的服务器端和客户端分别做什么?
- CDN 为什么比 mega-server 更可扩展?
- CDN 如何通过 DNS/CNAME 把用户导向合适节点?
u_s + Σu_i中的u_s应如何理解?








