系统设计实例(三)Youtube视频分享平台

设计类似Youtube的视频分享平台

三个部分组成:

  • 客户端:你可以在电脑、手机和智能电视上观看YouTube。
  • CDN:视频存储在CDN中。当你按下播放键时,视频将从CDN中流出。
  • API服务器:除视频流外的所有其他事情都通过API服务器。这包括推荐提要,生成视频上传URL,更新元数据数据库和缓存,用户注册等。

主要有两个流程:视频上传流程视频流式传输流程

视频上传流程
1. 视频被上传到原始存储。
2. 转码服务器从原始存储中获取视频并开始转码。
3. 一旦转码完成,以下两个步骤并行执行:
3a. 转码的视频被发送到转码存储。
3b. 转码完成的事件被排入完成队列。
3a.1. 转码的视频被分发到CDN。
3b.1. 完成处理器包含一群持续从队列中拉取事件数据的工作人员。
3b.1.a. 和 3b.1.b. 当视频转码完成时,完成处理器会更新元数据数据库和缓存。
4. API服务器通知客户端视频已成功上传并准备好进行流媒体播放。

image-20230525204553936

  • 用户:用户在电脑、手机或智能电视等设备上观看YouTube。

  • 负载均衡器:负载均衡器在API服务器之间均匀分配请求。

  • API服务器:除视频流外,所有用户请求都通过API服务器。

  • 元数据数据库:视频元数据存储在元数据数据库中。为了满足性能和高可用性的要求,它被分片和复制。

  • 元数据缓存:为了更好的性能,视频元数据和用户对象被缓存。

  • 原始存储:使用一个blob存储系统来存储原始视频。blob存储:“二进制大对象(BLOB)是数据库管理系统中作为单一实体存储的二进制数据集合”。

  • 转码服务器:视频转码也称为视频编码。它是将视频格式转换为其他格式(如MPEG,HLS等)的过程,这些格式为不同的设备和带宽能力提供最佳的视频流。

  • 转码存储:它是一个存储转码视频文件的blob存储。

  • CDN:视频被缓存在CDN中。当你点击播放按钮时,视频将从CDN中流出。

  • 完成队列:它是一个消息队列,存储关于视频转码完成事件的信息。

  • 完成处理器:这包括从完成队列中提取事件数据并更新元数据缓存和数据库的工作列表。

视频流媒体播放流程
  • 流媒体播放表示设备不断从远程源视频接收视频流。观看流媒体视频时,客户端一次只加载一小部分数据。
  • 视频是直接从CDN流媒体播放的。离你最近的边缘服务器将会传送视频。
视频转码
1. 有向无环图(DAG)模型

为了支持不同的视频处理流程并保持高并行性,重要的是增加一些抽象层次,并让客户端程序员定义要执行的任务。模型在阶段中定义任务,因此它们可以顺序执行或并行执行,通过DAG模型来实现灵活性和并行性。

image-20230525204747146

  • 检查:确保视频质量好且格式正常。
  • 视频编码:将视频转换以支持不同的分辨率、编解码器、比特率等。图14-9显示了一个编码视频文件的例子。
  • 缩略图。缩略图可以由用户上传,也可以由系统自动生成。
  • 水印:视频顶部的图像叠加层,包含关于你的视频的识别信息。
  1. 视频转码架构

image-20230525204821824

预处理器
  • 视频分割:视频流被分割或进一步分割为更小的图像组(GOP)对齐。GOP是一组/一块按照特定顺序排列的帧。每块都是一个可以独立播放的单元,通常长度为几秒钟。
  • DAG生成:处理器根据客户端程序员编写的配置文件生成DAG。
  • 缓存数据:预处理器是分段视频的缓存。为了提高可靠性,预处理器将GOP和元数据存储在临时存储中。如果视频编码失败,系统可以使用持久化数据进行重试操作。

image-20230525204856379

DAG调度器

DAG调度器将DAG图分割为任务阶段,并将它们放入资源管理器的任务队列中。

image-20230525204922154

资源管理器
  • 任务调度器从任务队列中获取最高优先级的任务。
  • 任务调度器从工作队列中获取最优的任务工作者来运行任务。
  • 任务调度器指示选定的任务工作者运行任务。
  • 任务调度器将任务/工作者信息绑定,并将其放入运行队列。
  • 一旦任务完成,任务调度器会从运行队列中移除该任务。

image-20230525204946262

任务工作器

任务工作器执行在DAG中定义的任务。如图14-19所示,不同的任务工作者可能会执行不同的任务

临时存储

这里使用了多种存储系统。选择哪种存储系统取决于数据类型、数据大小、访问频率、数据寿命等因素。例如,元数据经常被工作者访问,数据大小通常较小。因此,将元数据缓存在内存中是个好主意。对于视频或音频数据,我们将它们放入Blob存储中。一旦相应的视频处理完成,临时存储中的数据就会被清理掉。

系统优化
速度优化:并行化视频上传

这样可以在之前的上传失败时实现快速可恢复的上传。由客户端实现通过GOP分割视频文件的工作,可以提高上传速度,

image-20230525205050100

速度优化:将上传中心设置得靠近用户

在全球范围内设置多个上传中心(图14-24)。美国的人可以将视频上传到北美的上传中心,中国的人可以将视频上传到亚洲的上传中心。为了实现这一点,我们使用CDN作为上传中心。

速度优化:消息队列解耦
  • 在引入消息队列之前,编码模块必须等待下载模块的输出。
  • 在引入消息队列之后,编码模块不再需要等待下载模块的输出。如果消息队列中有事件,编码模块可以并行执行这些任务。

image-20230525205122600

安全性优化:预签名上传URL

客户端向API服务器发起HTTP请求,以获取预签名URL,该URL给予访问URL中标识的对象的访问权限。
API服务器返回一个预签名URL。
一旦客户端收到响应,它就可以使用预签名URL上传视频。

成本的优化
  • 只从CDN提供最热门的视频,其他视频从我们的高容量存储视频服务器提供。
  • 对于不太热门的内容,我们可能不需要存储许多编码后的视频版本。短视频可以按需编码。
  • 一些视频只在某些地区受欢迎。没有必要将这些视频分发到其他地区。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值