设计视频网站数据储存怎么解决

发布时间 : 2020/08/05 06:42

youtube怎么存储这么多视频

计划 Youtube(第一部分)

原文: How to Design Youtube (Part I)

译者: 飞龙

协议: CC BY-NC-SA 4.0

自豪地接纳 谷歌翻译

系统计划面试问题最常见的种类之一,是计划一个现有的盛行系统。 比方,已往我们已经讨论过怎样计划 Twitter,计划 Facebook 聊天功能等等。

部分缘故是这个问题通常充足广泛,以是有许多范畴需要讨论。 别的,假如候选人一样平常有好奇心,他们更有大概去探索现有产品的计划。

以是这个礼拜,我们将讨论怎样计划 Youtube。 这是一个广泛的问题,由于构建 Youtube 就像是重新构建一座摩天大楼,有太多工具需要思量。 因此,我们将从面试官的角度,涵盖大部分“重要”组件,包括数据库模型,视频/图像存储,可扩展性,建议性,安全性等。

概述

面对这个问题,大多数人的脑筋都是空的,由于这个问题太广泛了,他们不知道从那里开始。仅仅是存储本身并不重要,由于无缝地向数亿用户提供视频/图像是很庞杂的。

《系统计划面试之前需要知道的八件事》中提议,最好先从计划的提要描述入手,然后再深入探究全部细节。对于这样的问题,尤其如此,有无数的事情要思量,你永久无法澄清所有。

基本上,我们可以将系统简化为几个重要组件,如下所示:

  • 存储。你怎样计划数据库纲领?使用什么数据库?视频和图像可以是一个子话题,由于它们的存储非常特别。
  • 可扩展性。当你有了数百万甚至数十亿用户时,你怎样扩展存储和整个系统?这大概是一个非常庞杂的问题,但我们至少可以讨论一些提要头脑。
  • 网络服务器。最常见的布局是前端(移动和网页)与 Web 服务器通讯,Web 服务器处置用户认证,会话,获取和更新用户数据等逻辑。然后服务器连接到多个后端,如视频存储,建议服务器等等。
  • 缓存是另一个重要组件。我们之前已经具体讨论过缓存,但是这里还是有一些区别。我们需要多层缓存,像 Web 服务器,视频服务器等。
  • 另有建议系统,安全系统等其他重要组件。正如你所看到的,每个功能都可以作为一个独立的面试问题。

存储和数据模型

假如你正在使用像 MySQL 这样的关系数据库,那么计划数据模型大概很easy。实际上,Youtube 从一开始就使用 MySQL 作为主数据库,而且工作得很好。

首先,我们需要定义用户模型,它可以存储在一个表中,包括电子邮件,名称,注册数据,设置文件信息等等。另一种常见的方法是将用户数据保存在!两个表中 - 一个用于与电子邮件,密码,姓名,注册日期等身份验证相关的信息,另一个用于附加的个人信息,如地点,年纪等。

第二个重要模型是视频。一个视频包含了大量的信息,包括元数据(标题,描述,大小等),视频文件,评述,察看次数,计数等等。显然,基本的视频信息应该保存在差别的表格中,这样我们才能有视频表。

作者与视频的关系将是另一张表,将用户 ID 映射到视频 ID。用户与视频的嘻歡关系也可以是一个单独的表格。这里的想法是数据库规定化 - 组织!列和表来淘汰数据冗余并进步数据完备性。

视频和图像存储

提议将大型静态文件(如视频和图像)离开存储,由于这样性能更好,而且更轻易组织和扩展。 Youtube 有更多的图像而不是视频,这是很不直观的。想象一下,每个视频在差别屏幕上都有差别大小的缩略图,其结果是比视频多出四倍的图片。以是我们不应该忽视图像存储。

最常用的方法之一是使用 CDN(内容交付网络)。简而言之,CDN 是在多个数据中心摆设的环球分布式代理服务器网络。 CDN 的目的是向最终用户提供高可用性和高性能的内容。这是一种第三方网络,很多公司正在 CDN 上存储静态文件。

使用 CDN 的最大好处是,CDN 可以在多个地方复制内容,因此内容离用户更近,跳数更少,内容将通过更友爱的网络运行。别的,CDN 负责处置可扩展性等问题,你只需要为服务付费。

盛行 VS 长尾视频

假如你以为 CDN 是最终的解决方案,那么你是完全错误的。思量到今日 YouTube 的视频数目(819,417,600 小时的视频),将它们全部放在 CDN 大将是很昂贵的,特殊是大多数视频是长尾的,这些视频天天只有 1-20 次观看。

然而,互联网最风趣的事情之一通常是那些吸引了大多数用户的长尾内容。缘故很easy - 那些盛行的内容到处可见,只有长尾的工具才能使产品变得特殊。

回到存储问题。一个简单的方法是,在 CDN 中托管盛行的视频,而不太盛行的视频则根据位置存储在我们自己的服务器中。这有两个好处:

  • 盛行的视频由差别所在的大量观众观看,这是 CDN 善于的。它在多个地方复制内容,以便更大概从靠近和友爱的网络提供视频。
  • 长尾视频通常由特定的人群消耗,假如可以预先猜测,则可以高效地存储这些内容。

总结

对于“怎样计划 Youtube”这个问题,我们想讨论的话题太多了。 在下一篇文章中,我们将更多讨论可伸缩性,缓存,服务器,安全性等等。

趁便提一下,假如你想得到资深的面试官的更多引导,可以察看 Gainlo,以便与 Google,Facebook 等公司的工程师进行模仿面试。

克日,视频网站YouTube公布,其环球视频日播放量已经超越10亿小时的里程碑,每分钟新上传视频400小时,相当于1天有65年时长的节目内容更新。这无疑是一个非常巨大的数据,穷我们一生不吃不喝,也不外能看完其一天的视频上传量。

这还仅仅是YouTube一家视频网站,环球范畴内全部的视频网站加起来,其数据量已经大到我们无法想象,那么问题来了,这么多的视频,是怎样存储的,那得几多硬盘来装啊?

海量硬盘加压缩去重来解决大量数据存储

首先说明一个问题,来遍及一下数据量级的问题。1MB=1024KB,1GB=1024MB,1TB=1024GB,1PB=1024TB,1EB=1024PB,1ZB=1024EB,1YB=1024ZB,1BB=1024YB,1NB=1024BB,1DB=1024NB。此中我们手机拍摄一张照片约3M,一个高清影戏约2G,1TB的硬盘,可以存储500部高清影戏。

许多大型网站实在是有自己的专属机房,也就是如今动辄占地几千亩的大型数据中心。如百度已经在山西阳泉建了云盘算中心了,占地2000多亩,基本都是存储。我们日常用的百度网盘,内里的数据都存储在了百度的机房里。

大型的企业网站如爱奇艺、腾讯等公司,都有专有机房,这些机房内具有大量硬盘。毕竟相对来说,硬盘的价格真实是太低了。想想我们只需求四百块钱就能购买1T的硬盘资源,对于大型公司来说,完备有预备大量硬盘的能力。

在用户上传文件要么视频之后,一样平常会有专门的转码紧缩效劳器。用来把上传的文件进行压缩,以是偶然可以看到,本人上传的高清视频,在停止察看时,明了度并不是很高,这是由于停止压缩的效果。

而在真正保管到硬盘之前,需求对上传的文件去重。检测硬盘中是会否曾经有相关的文件了。如果有的话就直接指定已往了。这也就是为什么许多网盘上面,会有秒传的功用,好几G的文件,几面就能上传完成绩是这个原理。

缓存热门数据来保证数据高效分发

对于视频网站来说,绝大部分视频都是冷门资源,用户观看带有非常强的选择性。如当前正在热播的《人民的名义》,在肯定的时间段类,大概用户都去看这部电视剧,对于这种热门数据,存储上重要运用散布式存储加散布式文件系统,保证高并发高带宽,存储底层会选用分层技能。

许多视频点击量爆高,此时系统会鉴别此类数据,并存储到大容量缓存中,外加外置UPS维护,那么当视频没人看的时分,就主动迁徙到便宜的7200转或5400转的HDD存储层中。现在的硬盘最大做到60TB了,企业级大容量氦气盘曾经有10TB、12TB了。特殊老的视频文件且为普通用户上传的会被!后台分析平台挑选出来删除来开释空间。

大概热门数据在视频网站巨大的存储资源库中,只占据了不到1%的比重,这个时间,网站只需要将高质量带宽分派给这些热门数据即可,并不会显着影响到用户的实际使用。如《人民的名义》如今是绝对热门,大概有1000万人同时观看;而BBC记录片《地球脉动》在刚推出时是绝对热门,如今随着大家都看过了,天天只有很小一部分人观看。网站根据数据请求量,来酌情分派带宽,并会将热门数据缓存起来,甚至分发到离你家很近很近的机房,这样速率会很快,保证精良的用户使用体验。

可以明白为,有许多货品需要运输,但网民常常购置的物品带有肯定的规律性,好比冬天北京雾霾天的时间,买空气净化器的人非常多,这个时间,网站会在仓库里放许多空气净化器,一旦有人购置就可以直接运输出去;而到了春天空气非常好,买空气净化器的人锐减,仓库就会只放很少的库存。通过对于热门的把控,可以高效地提高整个系统的运行服从和用户体验。

总结起来就是,网站会连续购置大量硬盘来存储源源不停的数据,但数据毕竟是有限的,通过压缩、去重等本领,可以有用减轻存储压力;再通过对于热门内容的缓存,来提高用户的实际使用体验。大数据年代,大家都知道数据就是金钱,和将来可以赚到的钱相比,面前几百块钱一个的硬盘,网站还是舍得费钱买的。

YouTube没猜错的话应该也是Cluster集群技能,第一个问题,服务器硬盘肯定是在无时无刻的在加,也无时无刻的在不停弃掉旧的硬盘,不外变更的是储存集群的容量罢了。类比一下吧,这货就像你网上邻人共享的一个文件夹,你内网的每台盘算机都能访问上面的资源,只不外详细实现起这个来要庞杂得多罢了。别的,你的数据哪怕再旧都不会被删除,由于文件的归宿权是版权拥有者而不是Google,而且视频站存在的另一个意义!就是永世储存你的记忆。至于那些旧文件,也就是死文件,我的做法一样平常就是移出主力的储存集群,并将其放到一个储存本钱比较便宜而且!仍旧带有冗余多地备份的超级数据仓库罢了,数据仍能保证底子的访问,只不外访问起来相对来说比较慢罢了。至于有钱任性的Google它的方案就不懂了

本文网址: http://www.fifispa.com/p/20207572721_8346_102432735/home