为了账号安全,请及时绑定邮箱和手机立即绑定

YouTube系统设计详解:深入探究视频巨头的架构秘密

🏗 YouTube 的 HLD

YouTube的高层次设计是一种分布式、大规模架构设计,支持数十亿用户,数百万视频上传,以及每天数亿次搜索。YouTube应对了规模挑战、实时视频流传输、数据处理和分布式搜索。

核心高层组件

  1. 内容分发网络(CDN)
  • 为什么: YouTube 使用 CDN 来 减少延迟时间提高性能,通过将视频内容缓存在更接近用户的节点。位于东京的用户应理想地从日本的 CDN 节点流视频,而不是等待来自美国数据中心的数据。

  • 如何工作: CDN 节点(边缘服务器)根据用户位置和需求缓存视频。YouTube 使用 Google CDN,它是 Google 云平台 (GCP) 的一部分。其他商用 CDN,如 AkamaiCloudflare 也是选择,但它们不会提供像 Google 自有基础设施那样深度集成的水平。

  • 为什么不选择其他替代品: 由于其规模,Google (YouTube 的所有者) 构建自己的 CDN 网络是有意义的,并且它允许更 成本效益的管理。虽然可以使用商用 CDN,但在 YouTube 的规模下,成本和效率低下会使其不切实际。

    1. 视频上传和处理服务
  • 为什么: 用户上传的视频需要被存储、处理并转换成多种格式(240p、480p、720p、1080p、4K),以适应不同的用户带宽。

  • 如何工作:

  • 上传: 用户使用 Google Cloud Storage API 以片段形式上传视频数据(多部分上传),以避免大文件的超时,并允许在失败后恢复上传。

  • 转换格式: YouTube 使用 FFmpeg(一个广泛使用的多媒体处理框架)内部将视频转换为多种分辨率。每个上传的视频将被转换成标准化格式,以实现不同设备上的高效播放。

  • 为什么不选择其他替代品: FFmpeg 由于支持几乎所有多媒体格式且效率高,被广泛用于视频处理。虽然有其他选择如 GStreamer,但它们在大规模下缺乏 FFmpeg 的稳定性和功能。

    1. 存储(视频和元数据存储)
  • 视频存储: YouTube 使用 分布式对象存储系统 以及 Google Cloud Storage (GCS) 存储视频数据。GCS 提供高耐久性、高可用性和多区域支持的成本效率。

  • 为什么不选择其他替代品: YouTube 可以使用其他分布式文件系统,如 Amazon S3Azure Blob Storage,但它选择了 GCS,因为 GCS 可与其其它基础设施(网络、CDN 和处理)无缝集成。GCS 提供更好的可扩展性和管理。

  • 元数据存储: 元数据(视频标题、描述、标签)存储在 Bigtable,一种 Google 开发的 NoSQL 数据库。

  • 为什么是 Bigtable? 它针对 低延迟、高吞吐量 操作进行了优化,这对于快速读写视频元数据至关重要。在 YouTube 的大规模(PB 级元数据)下,关系型数据库难以处理如此大的数据量,而 NoSQL 更合适。

  • 为什么不选择其他 NoSQL 数据库? 其他选择如 CassandraDynamoDB 可以使用,但 Bigtable 与 Google 生态系统紧密集成,提供更优越的性能,可以为内部服务提供更优越的性能。

    1. 内容搜索服务
  • 为什么: 用户需要高效地搜索数百万个视频,因此 YouTube 需要能够进行 全文搜索 并根据相关性、受欢迎程度和个人化对结果进行排名的搜索引擎。

  • 如何工作: YouTube 依赖于 Elasticsearch 提供其搜索服务。

  • Elasticsearch 用于索引视频元数据(标题、描述、标签)。它是分布式的,支持多节点集群,并且设计用于处理实时的大规模搜索操作。

  • 为什么不选择其他替代品: 存在像 Solr 这样的选择,但 Elasticsearch 因其 易于扩展性、对分布式架构的更好支持和强大的查询能力而被选择。它还与其他 GCP 生态系统部分的集成良好。

    1. 推荐系统
  • 为什么: 推荐系统是 YouTube 的秘密武器,为用户提供个性化的视频建议,以保持用户参与度。

  • 如何工作:

  • 它使用 机器学习模型(如协同过滤、深度学习和矩阵分解技术),基于用户数据:观看历史、喜欢的内容、搜索行为和人口统计信息来训练。

  • 使用 Apache SparkFlink 构建数据管道,并使用在生产中运行的 TensorFlow 模型提供实时推荐。

  • 为什么不选择其他替代品: 选择 TensorFlow(Google 自有的 ML 框架)而不是像 PyTorch 这样的其他框架,是有战略意义的。TensorFlow 与 GCP 基础设施的深度集成使它成为可扩展 ML 工作负载的理想选择。

    1. API 网关
  • 为什么: YouTube 需要向客户端(网站、移动应用、第三方集成)提供一组定义明确的 API。这些 API 需要将请求路由到适当的微服务(视频、搜索、推荐等)。

  • 如何工作: Google API 网关 处理路由、认证和限流。它将客户端连接到后端服务,同时确保系统保持 模块化可扩展

  • 为什么不选择其他替代品: Google API 网关是这里的显而易见的选择,因为它具备内置的 GCP 服务集成、更好的可扩展性和更简单的安全管理。

(……)

🖼 核心组件的HLD示意图

以下是一份更详细的YouTube高级设计图示。

      [Web和移动客户端] --> [API网关(API Gateway)] --> [负载均衡器(Load Balancer)]
                                        |                       |
                          [搜索服务]        [用户服务]      [视频上传和转码]
                                          |                       |
                                    [推荐服务]       [CDN]
                                        |                        |
                               [用于存储元数据的Bigtable] [用于存储视频的Google Cloud Storage]

全屏模式,退出全屏


YouTube低层设计(LLD):核心服务深入解析

现在,我们将更深入地了解每个支撑 YouTube 的核心服务,它们面临的挑战,以及背后的设计理念。

1. 视频上传流程及处理

视频上传过程包括多个阶段,从上传到处理和服务。具体流程如下:

上传步骤:

  • 客户端 分段(多部分)上传视频到 YouTube 的 上传服务
  • 上传服务端 将原始分段暂时存储在 Google Cloud Storage 中。
  • 当所有分段上传完成后,会向一个 Kafka 消息队列发送一条消息,触发视频处理流程。

视频转码处理

  • 转码流程 将上传的原始视频转换为多种分辨率。这是为了根据不同的网速和设备提供视频,至关重要。
  • 视频转码任务能并行处理多个任务。这些任务是无状态的,并且可以水平扩展。
  • 转码后,处理过的视频会被存储在 Google Cloud Storage 中,相关的视频 ID 则存储在 Bigtable 中。

这个流程的好处:

  • 容错能力: 如果任一视频片段上传或转码失败,系统可以重试而无需重新处理整个视频。
  • 并行性: 视频转码在多台机器上并行进行,提升了吞吐量。
  • 可扩展性: Google Cloud Storage 本质上支持可扩展性,并能处理 YouTube 的 PB 级存储需求。

2. 视频流媒体架构

流式:

  • 客户端请求: 用户点击视频请求播放该视频。
  • 负载均衡: 请求被发送到负载均衡,它确定处理该请求的最佳后端节点。
  • 内容分发: CDN(谷歌CDN)负责将实际的视频流传输给用户。离用户最近的边缘服务器提供视频。
  • 自适应比特率流: YouTube 使用MPEG-DASHHLS进行流传输。这些协议支持自适应比特率流,会根据您的网络状况实时调整视频清晰度。

为什么不考虑其他选择

  • MPEG-DASHHLS 是高质量视频流媒体的标准协议之一。它们支持在不同视频分辨率之间无缝切换,从而减少缓冲,提供流畅的观看体验。

3. 搜索体系

搜索过程:

  • 客户端发送一个搜索请求给搜索服务,通过API网关。
  • Elasticsearch: 查询在包含数百万视频元数据的Elasticsearch索引中执行。
  • 排名与相关性: 搜索结果根据视频的相关性、受欢迎程度和个人化数据(例如,观看历史和订阅)进行排序。

Elasticsearch 设计

  • 索引分片到多个Elasticsearch节点上,实现了水平扩展性。
  • 复制分片以确保高可用性。

为什么用 Elasticsearch 而不用 Solr:

  • 可扩展性和分布式搜索 在 Elasticsearch 中支持更好。
  • Elasticsearch 还与其他 Google 服务(例如实时监控工具 Kibana)有更好的集成性。

    • *
🔄 用新技术改造YouTube架构

如果 YouTube 使用最新技术来升级系统,可以做如下改进:

1. 基于服务网格的微服务

  • YouTube 可以利用 IstioLinkerd 来实现 服务网格。这将有助于更好地管理微服务间的通信,同时提升安全性,并比传统的 RPC 机制更加有效监控服务性能。

2. GraphQL 用于 API

  • YouTube 可以用 GraphQL 替代 REST API,实现更灵活高效的数据获取。这将让移动端和网页端用户只获取他们需要的数据,从而减少不必要的数据获取。

3. 实时推荐和Kafka Streams

  • YouTube的推荐引擎可以演进为使用Kafka Streams进行用户行为(如点赞、观看行为等)的实时分析,从而提供更加动态和个性化的推荐。

4. 云原生架构

  • Kubernetes 在 YouTube 架构的多个部分中已经使用,但更深入的集成可以更好地管理和自动扩展容器化微服务,并实现自我修复功能。

    • *
结论:深入总结

我们探讨了 YouTube 的 高层和底层设计,了解了每个组件的技术决策,比如为什么使用 Google Cloud StorageBigtable 等技术来实现可扩展性,Elasticsearch 在视频搜索中的作用,以及 FFmpeg 为何被用作 YouTube 的主要转码工具。我们还讨论了使用 服务网格GraphQL实时流传输 等现代技术来改进 YouTube 架构的潜在改进。

YouTube的架构是一个很好的例子,展示了如何通过恰当的工具和基础设施来应对规模性、延迟性和可用性方面的挑战。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消