什么是CDN?

2021-12-21 17:44:59 浏览数 (1)

翻译 | Alex 技术审校 | 杨硕 本文来自OTTVerse,作者为Krishna Rao Vijayanagar。

CDN

Easy Tech

010

CDN(Content Delivery Networks,内容分发网络)是分布在世界各地的服务器,它们是视频直播和点播中至关重要的基础设施。CDN位于视频播放器和源服务器之间,负责跨地理区域分发视频内容,并有效保障客户端流畅的观看体验。

在本文中,我们将学习CDN是如何工作的,如果不使用CDN会发生什么,并了解什么是Cache-Hit和Cache-Miss。让我们开始吧!

视频流架构

对于大部分视频直播和点播架构来说,下列操作是常见的步骤:

  1. 输入源视频并将其发送到转码器。
  2. 转码器调整视频大小,并将视频压缩成不同码率和分辨率的组合(被称为Profile,即配置文件)。
  3. 将被压缩的视频发送给封装器,并准备通过HLS和MPEG-DASH等ABR技术分发出去。
  4. 封装的视频(视频块和索引列表)被存储在视频流服务器或者源服务器上。最后,视频的URL通过CMS被发布出来,并使得应用程序可以访问。
  5. 当用户按下视频播放键时,源服务器响应来自播放器的请求,并将被请求的视频块分发出去。

我们刚刚描述了一个直播(或点播)的视频流服务架构,这个架构在一开始可能很好用,但是当你添加更多用户、订阅者、内容或者一个视频突然火了以后,它很快就崩溃了。

让我们用一分钟来讨论一下视频突然火爆的情况。

假设有人录制了一首歌并上传到你的UGC平台,突然一下子火了。全世界都想听这首歌,源服务器上来自播放器的请求急剧增长。你认为接下来会发生什么?

首先,你的源服务器将遭到大量请求的“轰炸”:来自时长3分钟的、同一视频中的视频切片,每秒发出1000次请求。就像发生踩踏事件一样!

在这种情况下,源服务器该如何应对?

源服务器将艰难地服务所有请求。即使服务器很强大,它也无法承受如此巨量的请求。

有些播放器也许会请求视频的第一个分片,其他播放器也许会请求最后一个视频分片(具有不同的分辨率和码率)。由于进程或网络 I/O 限制,源服务器很快便无法为众多请求提供服务。

最后,你的终端用户将会遭遇如下问题:

  • 视频缓冲:因为服务器无法快速响应用户。
  • 首屏时间:因为服务器负载过高,无法分发视频。
  • 视频质量较差:因为无法从服务器快速获取高质量(高码率)视频,播放器开始切换到低码率。ABR就是这样发挥作用的!

以上这些问题都会导致糟糕的体验,这可不是正确提供视频流服务的方式。但我们所描述的情况很常见,这在那些广受大众喜爱的视频流服务中几乎每天都会发生。

所以,解决方案是什么?

内容分发网络(CDN)

让我们尝试来解决问题,以下是到目前为止我们所观察到的问题症结:

  • 单一服务器要被迫服务100或者1000个客户端(或者视频播放器),无法满足如此多的需求。
  • 处于某个地理位置的单一服务器无法将视频分片分发给距离它地理位置较远的客户端。
  • 单点故障就会导致糟糕的用户体验。
  • 但最重要的是,对同一视频分片的请求数量巨大。

如果我们认真研究上述原因,某种模式似乎正在浮出水面,引领着我们走向问题答案。

如果所有用户端都在请求同一视频分片,为什么不像电脑上的缓存那样缓存视频分片?为什么每次都要向硬盘请求?

所以,让我们在源服务器的前面增加一个缓存层,这个缓存层可以缓存频繁被请求的视频分片并将它们分发出去,而不必每次都要访问源服务器。

然后, 为了服务不同的地理位置,我们可以在世界各地架设几个这样的缓存层,并向附近用户分发视频以及提供快速响应。

以上操作正是设计一个非常简单的CDN的开始。

好了,现在让我们更深入地理解CDN是如何工作的:

  • 封装好的视频(也许是HLS或者DASH)被存储在源服务器上,而CDN知道通向源服务器的路径。因此 CDN 知道来自流媒体提供商的所有电影都存在于一堆服务器上及它们的 IP 地址。
  • 然后视频播放器被编程为向CDN请求视频,而不是直接访问源服务器。所以视频播放器获取的是CDN的URL。
  • 当第一个播放请求到达CDN,CDN缓存中可能没有内容,于是它便将请求转发给源服务器。当CDN收到来自源服务器的响应,它缓存住内容并且发送给播放器。
  • 下一次另一个视频播放器(或者同一个播放器)请求同一视频分片时,CDN首先检查缓存看是否已缓存过被请求的内容。如果缓存过,CDN将缓存视频分发出去;如果没被缓存过,CDN向源服务器请求发送视频分片。

左图:无CDN 右图:有CDN (图片来自Wikipedia)

关于CDN,你还需要知道一些术语:

缓存未命中(Cache Miss):当客户端向CDN请求内容,而CDN刚好没有缓存该内容时,我们就称之为缓存未命中。发生缓存未命中时,CDN将向源服务器请求未命中内容。源服务器响应后,CDN将缓存内容并将其分发给客户端。

缓存命中(Cache Hit):当客户端向CDN请求内容时,CDN刚好缓存了此内容,这时我们就称之为缓存命中。在这种情况下,CDN将向客户端设备分发缓存内容。

TTL( Time to Live):CDN不会无限期地缓存视频分片或者其他媒体内容。它使用一个名为TTL(Time to Live)的变量来丢弃和刷新那些不被频繁请求的视频内容。这种缓存刷新可以为新内容腾出空间并智能管理磁盘空间。

使用CDN的优势

在视频流服务(直播或者点播)中使用CDN有很多好处,让我们来看下:

  • CDN减少源服务器上的负载, CDN的快速响应能确保播放器在其带宽良好时,请求高码率的视频块能够及时接收到,避免缓冲区数据不足的情况。
  • 减少源服务器基础设施的压力,因为大部分的负载被CDN承担。除此之外,还会降低源服务器的带宽消耗。
  • 由于CDN接入点(Points of Presence,PoPs)分散各地, 所以更容易为广阔的地理区域或者不同地理位置提供服务
  • 安全:因为用户可以自行设置规则并拒绝来自客户端或者IP地址的请求,所以CDN可以有效保护源服务器不受DDoS攻击。因此,在遭受DDoS攻击时,CDN可以充当第一道防线。

总 结

我希望本篇文章能帮助你理解CDN、它的工作原理以及使用CDN的优势。包括Akamai、Fastly、Cloudflare、KeyCDN、LimeLight和Medianova等在内的CDN厂商在向用户交付内容及改善视频观看体验方面都做得非常出色(不同的用例、架构和预算)。

在未来的系列文章中,我们将学习CDN技术中的Multi-CDN、边缘缓存(Edge Caches)和边缘计算(Edge Computing)等概念。

致谢

本文已获得作者Krishna Rao Vijayanagar授权翻译和发布,特此感谢。

原文链接:

https://ottverse.com/what-is-a-cdn-content-delivery-network-live-vod/

0 人点赞