目录
1.引言
2.后端基础设施
3.为何需要 Vitess
3.1 主-从副本
3.2 分片
3.3 灾难管理
4.Vitess:用于水平扩展 MySQL 数据库集群的系统
5.部署到云中
6.CDN
7.数据存储:YouTube 是如何存储如此巨大的数据量的呢?
7.1 即插即用的商用服务器
7.2 为数据中心设计的存储磁盘
首页 后端开发 Python教程 YouTube 是如何保存巨量视频文件的?

YouTube 是如何保存巨量视频文件的?

Apr 10, 2023 am 11:21 AM
文件 视频 存储

大家好,我是不才陈某~

YouTube 是仅次于谷歌的第二大热门网站。在 2019 年 5 月,每分钟会有超过 500 小时的视频内容上传到该平台。

该视频共享平台有超过 20 亿的用户,每天有超过10亿小时的视频被播放,产生数十亿的浏览量。这些都是令人难以置信的数字。

本文会对 YouTube 使用的数据库和后端数据基础设施进行深入讲解,它们使得该视频平台能够存储如此巨量的数据,并能扩展至数十亿的用户。

那我们就开始吧。

1.引言

YouTube 的旅程开始于 2005 年。随着这家由风险资本资助的技术初创公司不断取得成功,它于 2006 年 11 月被谷歌以 16.5 亿美元收购。

在被谷歌收购之前,它们的团队由以下人员组成:

  • 两名系统管理员
  • 两名可扩展性软件架构师
  • 两名特性开发人员
  • 两名网络工程师
  • 一名 DBA

2.后端基础设施

YouTube 的后端微服务是由Python、数据库、硬件、Java(使用了Guice框架)和 Go 编写的。用户界面是使用JavaScript编写的。

主要的数据库是由 Vitess 支撑的 MySQL,Vitess是一个数据库集群系统,用于 MySQL 的水平扩展。另外,使用 Memcache 实现缓存并使用 Zookeeper 进行节点的协调。

图片

流行的视频通过 CDN 来提供,而一般的、较少播放的视频则从数据库中获取。

每个视频在上传的时候,都会赋予一个唯一的标识符并且会由一个批处理 job 进行处理,该 job 会运行多个自动化的过程,比如生成缩略图、元数据、视频脚本、编码、设置货币化状态等。

VP9 & H.264/MPEG-4 AVC 高级视频编码(Advanced Video Coding codecs)会用于视频压缩,它能够使用其他编码器一半的带宽来编码 HD 和 4K 质量的视频。

视频流则是使用基于HTTP协议的动态自适应流(Dynamic Adaptive Streaming),这是一种自适应比特率的流媒体技术,能够从传统的 HTTP Web 服务器上实现高质量的视频流。通过这种技术,内容可以按照不同的比特率提供给观众。YouTube 客户端会根据观看者的互联网连接速度自动适应视频渲染,从而尽可能减少缓冲时间。

我曾经在一篇专门的文章中讨论过 YouTube 的视频转码过程,参见“YouTube是如何以低延迟提供高质量视频的”。

所以,这里对平台的后端技术有一个快速的介绍。YouTube 主要使用的数据库是 MySQL。现在,我们了解一下 YouTube 的工程团队为什么觉得有必要编写 Vitess?他们在最初的 MySQL 环境中面临的问题是什么,使他们在此基础上实现了一个额外的框架?

3.为何需要 Vitess

网站最初只有一个数据库实例。随着网站的发展,为了满足日益增长的 QPS(每秒查询次数)需求,开发人员不得不对数据库进行水平扩展。

3.1 主-从副本

副本会添加到主数据库实例中。读取请求会被路由到主数据库和副本上,以减少主数据库的负载。添加副本有助于缓解瓶颈,增加读取的吞吐量,并增加系统的持久性。

主节点处理写入的流量,主节点和副本节点同时处理读取流量。

图片

但是,在这种场景中,有可能会从副本中读取到陈旧的数据。如果在主节点将信息更新到副本之前,一个请求读取了副本的数据,那么观看者就会得到陈旧的数据。

此时,主节点和副本节点的数据是不一致的。在这种情况下,不一致的数据是主节点和副本节点上特定视频的观看次数。

其实,这完全没有问题。观众不会介意观看次数上略微有点不一致,对吧?更重要的是,视频能够在他们的浏览器中渲染出来。

主节点和副本节点之间的数据最终会是一致的。

因此,工程师们觉得非常开心,观众们也非常开心。随着副本的引入,事情进展顺利。

网站继续受到欢迎,QPS 继续上升。主-从副本策略现在很难跟上网站流量的增长了。

那现在该怎么办?

3.2 分片

下一个策略就是对数据库进行分片(shard)。分片是除了主-从副本、主-主副本、联盟和反范式化(de-normalization) 之外,扩展关系型数据库的方式之一。

数据库分片并不是一个简单的过程。它大大增加了系统的复杂性,并使得管理更加困难。

但是,数据库必须要进行分片,以满足 QPS 的增长。在开发人员将数据库分片后,数据会被分散到多台机器上。这增加了系统写入的吞吐量。现在,不再是只有一个主实例处理写入,写入操作可以在多台分片的机器上进行。

同时,每台机器都创建了单独的副本,以实现冗余和吞吐。

该平台的受欢迎程度持续上升,大量的数据被内容创作者不断添加到数据库中。

为了防止机器故障或者外部未知事件造成的数据丢失或服务不可用,此时需要在系统中添加灾难管理的功能了。

3.3 灾难管理

灾难管理指的是在面临停电和自然灾害(如地震、火灾)时的应急措施。它需要进行冗余,并将用户数据备份到世界不同地理区域的数据中心。丢失用户数据或服务不可用是不允许的。

在世界范围内拥有多个数据中心也有助于 YouTube 减少系统延迟,因为用户请求会被路由到最近的数据中心,而不是路由到位于不同大陆的原始服务器。

现在,你可以想象基础设施会变得多复杂。

经常会有未经优化的全表扫描导致整个数据库瘫痪。数据库必须进行保护,防止受到不良查询的影响。所有的服务器都需要被跟踪以确保服务的高效性。

开发人员需要有一个系统来抽象系统的复杂性,能够让他们解决可扩展性的挑战,并以最小的成本管理该系统。这一切促使 YouTube 开发了 Vitess。

4.Vitess:用于水平扩展 MySQL 数据库集群的系统

Vitess是一个运行于 MySQL 之上的数据库集群系统,能够使 MySQL 进行水平扩展。它有内置的分片特性,能够让开发人员扩展数据库,而不必在应用中添加任何的分片逻辑。这类似于 NoSQL 的做法。

图片

Vitess 还会自动处理故障转移和备份。它能够管理服务器,通过智能重写资源密集型的查询和实现缓存来提高数据库性能。除了 YouTube,该框架还被业界的其他知名厂商使用,如 GitHub、Slack、Square、New Relic 等。

当你需要 ACID 事务和强一致性的支持,同时又希望像 NoSQL 数据库一样快速扩展关系型数据库时,Vitess 就会大显身手。

在 YouTube,每个 MySQL 连接都有 2MB 的开销。每一个连接都有可计算出来的成本,而且随着连接数量的增加,还必须增加额外的 RAM。

通过基于 Go 编程语言并发支持构建的连接池,Vitess 能够以很低的成本管理这些连接。它使用 Zookeeper 来管理集群,并使其保持最新状态。

5.部署到云中

Vitess 是云原生的,很适合云中部署,因为就像云的模式一样,容量是逐步添加到数据库的。它可以作为一个 Kubernetes 感知(Kubernetes-aware)的云原生分布式数据库运行。

在 YouTube,Vitess 在容器化环境中运行,并使用 Kubernetes 作为容器编排工具。

在如今的计算时代,每个大规模的服务都在分布式环境的云中运行。在云中运行服务有许多好处。

Google Cloud Platform是一套云计算服务,它的基础设施与谷歌内部的终端用户产品(如谷歌搜索和 YouTube)所用的基础设施是相同的。

每个大规模的在线服务都有一个多样化(polyglot)的持久性架构,因为某一种数据模型,无论是关系型还是 NoSQL,都无法处理服务的所有使用场景。

在为本文展开的研究中,我无法找到 YouTube 所使用的具体谷歌云数据库的清单,但我非常肯定它会使用 GCP 的特有产品,如 Google Cloud Spanner、Cloud SQL、Cloud Datastore、Memorystore 等来运行服务的不同特性。

这篇文章详细介绍了其他谷歌服务所使用的数据库,如Google Adwords、Google Finance、Google Trends等。

6.CDN

YouTube 使用谷歌的全球网络进行低延迟、低成本的内容传输。借助全球分布的 POP 边缘点,它能够使客户能够更快地获取数据,而不必从原始服务器获取。

所以,到此为止,我已经谈到了 YouTube 使用的数据库、框架和技术。现在,该谈一谈存储问题了。

YouTube 是如何存储如此巨大的数据量的呢(每分钟上传 500 小时的视频内容)?

7.数据存储:YouTube 是如何存储如此巨大的数据量的呢?

视频会存储在谷歌数据中心的硬盘中。这些数据由 Google File System 和 BigTable 管理。

GFS Google File System是谷歌开发的一个分布式文件系统,用于管理分布式环境中的大规模数据。

BigTable是一个建立在 Google File System 上的低延迟分布式数据存储系统,用于处理分布在成千上万台机器上的 PB 级别的数据。60 多个谷歌产品都使用了它。

因此,视频被存储在硬盘中。关系、元数据、用户偏好、个人资料信息、账户设置、从存储中获取视频所需的相关数据等都存储在 MySQL 中。

图片

7.1 即插即用的商用服务器

谷歌数据中心拥有同质化的硬件,软件则是内部构建的,管理成千上万的独立服务器集群。

谷歌部署的服务器,能够增强数据中心的存储能力,它们都是商用服务器(commodity server),也被称为商用现成的服务器(commercial off-the-shelf server)。这些服务器价格低廉,可广泛使用和大量购买,并能以最小的成本和代价替换或配置数据中心的相同硬件。

随着对额外存储需求的增加,新的商用服务器会被插入到系统中。

出现问题后,商用服务器通常会被直接替换,而不是进行修理。它们不是定制的,与运行定制的服务器相比,使用它们能够使企业在很大程度上减少基础设施成本。

7.2 为数据中心设计的存储磁盘

YouTube 每天都需要超过一个 PB 的新存储。旋转硬盘驱动器是主要的存储介质,因为其成本低,可靠性高。

SSD 固态硬盘比旋转磁盘具有更高的性能,因为它们是基于半导体的,但大规模使用固态硬盘并不划算。

它们相当昂贵,也容易随着时间的推移逐渐丢失数据。这使得它们不适合用于归档数据的存储。

另外,谷歌正在开发一个适用于大规模数据中心的新磁盘系列。

有五个关键指标可用来判断为数据存储而构建的硬件的质量:

  • 硬件应该有能力支持秒级的高速度输入输出操作。
  • 它应该符合组织规定的安全标准。
  • 与普通存储硬件相比,它应该有更高的存储容量。
  • 硬件采购成本、电力成本和维护费用应该都是可以接受的。
  • 磁盘应该是可靠的,并且延迟是稳定的。

以上是YouTube 是如何保存巨量视频文件的?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它们
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

抖音发布他人视频侵权吗?它怎样剪辑视频不算侵权? 抖音发布他人视频侵权吗?它怎样剪辑视频不算侵权? Mar 21, 2024 pm 05:57 PM

随着短视频平台的兴起,抖音成为了大家日常生活中不可或缺的一部分。在抖音上,我们可以看到来自世界各地的有趣视频。有些人喜欢发布他人的视频,这就引发了一个问题:抖音发布他人视频侵权吗?本文将围绕这个问题展开讨论,告诉大家怎样剪辑视频不算侵权,以及如何避免侵权问题。一、抖音发布他人视频侵权吗?根据我国《著作权法》的规定,未经著作权人许可,擅自使用其作品,属于侵权行为。因此,在抖音上发布他人视频,如果未经原作者或著作权人许可,就属于侵权行为。二、怎样剪辑视频不算侵权?1.使用公共领域或已授权的内容:公共

出现0x80004005错误代码怎么办 小编教你0x80004005错误代码解决方法 出现0x80004005错误代码怎么办 小编教你0x80004005错误代码解决方法 Mar 21, 2024 pm 09:17 PM

在电脑中删除或解压缩文件夹,时有时候会弹出提示对话框“错误0x80004005:未指定错误”,如果遇到这中情况应该怎么解决呢?提示错误代码0x80004005的原因其实有很多,但大部分因为病毒导致,我们可以重新注册dll来解决问题,下面,小编给大伙讲解0x80004005错误代码处理经验。有用户在使用电脑时出现错误代码0X80004005的提示,0x80004005错误主要是由于计算机没有正确注册某些动态链接库文件,或者计算机与Internet之间存在不允许的HTTPS连接防火墙所引起。那么如何

抖音发布视频如何赚收益?新手小白怎么在抖音上赚钱啊? 抖音发布视频如何赚收益?新手小白怎么在抖音上赚钱啊? Mar 21, 2024 pm 08:17 PM

抖音,这个全民短视频平台,不仅让我们在闲暇时间享受到各种有趣、新奇的短视频,同时也给了我们一个展示自我、实现价值的舞台。那么,如何在抖音发布视频赚取收益呢?本文将详细解答这个问题,帮助你在抖音上赚取更多的收益。一、抖音发布视频如何赚收益?发布视频在抖音上获得一定的播放量后,可以有机会参与广告分成计划。这一收益方式是抖音用户最为熟悉的之一,也是许多创作者主要的收入来源。抖音根据账号权重、视频内容以及观众反馈等多种因素来决定是否提供广告分成的机会。抖音平台允许观众通过发送礼物来支持自己喜欢的创作者,

夸克网盘的文件怎么转移到百度网盘? 夸克网盘的文件怎么转移到百度网盘? Mar 14, 2024 pm 02:07 PM

  夸克网盘和百度网盘都是现在最常用的储存文件的网盘软件,如果想要将夸克网盘内的文件保存到百度网盘,要怎么操作呢?本期小编整理了夸克网盘电脑端的文件转移到百度网盘的教程步骤,一起来看看是怎么操作吧。  夸克网盘的文件怎么保存到百度网盘?要将夸克网盘的文件转移到百度网盘,首先需在夸克网盘下载所需文件,然后在百度网盘客户端中选择目标文件夹并打开。接着,将夸克网盘中下载的文件拖放到百度网盘客户端打开的文件夹中,或者使用上传功能将文件添加至百度网盘。确保上传完成后在百度网盘中查看文件是否成功转移。这样就

如何发布小红书视频作品?发视频要注意什么? 如何发布小红书视频作品?发视频要注意什么? Mar 23, 2024 pm 08:50 PM

随着短视频平台的兴起,小红书成为了许多人分享生活、表达自我、获取流量的平台。在这个平台上,发布视频作品是一种非常受欢迎的互动方式。那么,如何发布小红书视频作品呢?一、如何发布小红书视频作品?首先,确保准备好一段适合分享的视频内容。你可以利用手机或其他摄像设备进行拍摄,需要注意画质和声音的清晰度。2.剪辑视频:为了让作品更具吸引力,可以对视频进行剪辑。可以使用专业的视频剪辑软件,如抖音、快手等,添加滤镜、音乐、字幕等元素。3.选择封面:封面是吸引用户点击的关键,选择一张清晰、有趣的图片作为封面,让

hiberfil.sys是什么文件?hiberfil.sys可以删除吗? hiberfil.sys是什么文件?hiberfil.sys可以删除吗? Mar 15, 2024 am 09:49 AM

  最近有很多网友问小编,hiberfil.sys是什么文件?hiberfil.sys占用了大量的C盘空间可以删除吗?小编可以告诉大家hiberfil.sys文件是可以删除的。下面就来看看详细的内容。hiberfil.sys是Windows系统中的一个隐藏文件,也是系统休眠文件。通常存储在C盘根目录下,其大小与系统安装内存大小相当。这个文件在计算机休眠时被使用,其中包含了当前系统的内存数据,以便在恢复时快速恢复到之前的状态。由于其大小与内存容量相等,因此它可能会占用较大的硬盘空间。  hiber

微博发视频怎么不压缩画质_微博发视频不压缩画质方法 微博发视频怎么不压缩画质_微博发视频不压缩画质方法 Mar 30, 2024 pm 12:26 PM

1、首先打开手机微博,点击右下角【我】(如图所示)。2、接着点击右上角【齿轮】打开设置(如图所示)。3、然后找到并打开【通用设置】(如图所示)。4、随后进入【视频随着】选项(如图所示)。5、再打开【视频上传清晰度】设置(如图所示)。6、最后选择【原画质】就能不压缩了(如图所示)。

分享edge浏览器网页视频没有声音的两种解决办法 分享edge浏览器网页视频没有声音的两种解决办法 Mar 14, 2024 pm 02:22 PM

  很多用户都喜欢在浏览器上看视频,如果在edge浏览器上看网页视频发现没有声音,要如何解决?这个问题并不是很难,接下来就让小编告诉大家如何修复edge浏览器网页视频没有声音问题的办法。  edge浏览器网页视频没有声音?  方法一:  1、首先,查看edge浏览器顶部标签页。  2、在标签页左边有一个“声音按钮”,确认它没有静音。  方法二:  1、如果确认没有静音,那么可能是声音设置问题。  2、可以右键右下角的声音设备,选择“打开音量合成器”  3、打

See all articles