YouTube架构

YouTube发展迅速,每天超过1亿的视频点击量,但只有很少人在维护站点和确保伸缩性。 

平台 
Apache 
Python 
Linux(SuSe) 
MySQL 
psyco,一个动态的Python到C的编译器 
lighttpd代替Apache做视频查看 

状态 
支持每天超过1亿的视频点击量 
成立于2005年2月 
于2006年3月达到每天3千万的视频点击量 
于2006年7月达到每天1亿的视频点击量 
2个系统管理员,2个伸缩性软件架构师 
2个软件开发工程师,2个网络工程师,1个DBA 

处理飞速增长的流量 

while (true)
{
  identify_and_fix_bottlenecks();
  drink();
  sleep();
  notice_new_bottleneck();
}

每天运行该循环多次 

Web服务器 
1,NetScaler用于负载均衡和静态内容缓存 
2,使用mod_fast_cgi运行Apache 
3,使用一个Python应用服务器来处理请求的路由 
4,应用服务器与多个数据库和其他信息源交互来获取数据和格式化html页面 
5,一般可以通过添加更多的机器来在Web层提高伸缩性 
6,Python的Web层代码通常不是性能瓶颈,大部分时间阻塞在RPC 
7,Python允许快速而灵活的开发和部署 
8,通常每个页面服务少于100毫秒的时间 
9,使用psyco(一个类似于JIT编译器的动态的Python到C的编译器)来优化内部循环 
10,对于像加密等密集型CPU活动,使用C扩展 
11,对于一些开销昂贵的块使用预先生成并缓存的html 
12,数据库里使用行级缓存 
13,缓存完整的Python对象 
14,有些数据被计算出来并发送给各个程序,所以这些值缓存在本地内存中。这是个使用不当的策略。应用服务器里最快的缓存将预先计算的值发送给所有服务器也花不了多少时间。只需弄一个代理来监听更改,预计算,然后发送。 

视频服务 
1,花费包括带宽,硬件和能源消耗 
2,每个视频由一个迷你集群来host,每个视频被超过一台机器持有 
3,使用一个集群意味着: 
-更多的硬盘来持有内容意味着更快的速度 
-failover。如果一台机器出故障了,另外的机器可以继续服务 
-在线备份 
4,使用lighttpd作为Web服务器来提供视频服务: 
-Apache开销太大 
-使用epoll来等待多个fds 
-从单进程配置转变为多进程配置来处理更多的连接 
5,大部分流行的内容移到CDN: 
-CDN在多个地方备份内容,这样内容离用户更近的机会就会更高 
-CDN机器经常内存不足,因为内容太流行以致很少有内容进出内存的颠簸 
6,不太流行的内容(每天1-20浏览次数)在许多colo站点使用YouTube服务器 
-长尾效应。一个视频可以有多个播放,但是许多视频正在播放。随机硬盘块被访问 
-在这种情况下缓存不会很好,所以花钱在更多的缓存上可能没太大意义。 
-调节RAID控制并注意其他低级问题 
-调节每台机器上的内存,不要太多也不要太少 

视频服务关键点 
1,保持简单和廉价 
2,保持简单网络路径,在内容和用户间不要有太多设备 
3,使用常用硬件,昂贵的硬件很难找到帮助文档 
4,使用简单而常见的工具,使用构建在Linux里或之上的大部分工具 
5,很好的处理随机查找(SATA,tweaks) 

缩略图服务 
1,做到高效令人惊奇的难 
2,每个视频大概4张缩略图,所以缩略图比视频多很多 
3,缩略图仅仅host在几个机器上 
4,持有一些小东西所遇到的问题: 
-OS级别的大量的硬盘查找和inode和页面缓存问题 
-单目录文件限制,特别是Ext3,后来移到多分层的结构。内核2.6的最近改进可能让Ext3允许大目录,但在一个文件系统里存储大量文件不是个好主意 
-每秒大量的请求,因为Web页面可能在页面上显示60个缩略图 
-在这种高负载下Apache表现的非常糟糕 
-在Apache前端使用squid,这种方式工作了一段时间,但是由于负载继续增加而以失败告终。它让每秒300个请求变为20个 
-尝试使用lighttpd但是由于使用单线程它陷于困境。遇到多进程的问题,因为它们各自保持自己单独的缓存 
-如此多的图片以致一台新机器只能接管24小时 
-重启机器需要6-10小时来缓存 
5,为了解决所有这些问题YouTube开始使用Google的BigTable,一个分布式数据存储: 
-避免小文件问题,因为它将文件收集到一起 
-快,错误容忍 
-更低的延迟,因为它使用分布式多级缓存,该缓存与多个不同collocation站点工作 
-更多信息参考Google ArchitectureGoogleTalk ArchitectureBigTable 

数据库 
1,早期 
-使用MySQL来存储元数据,如用户,tags和描述 
-使用一整个10硬盘的RAID 10来存储数据 
-依赖于信用卡所以YouTube租用硬件 
-YouTube经过一个常见的革命:单服务器,然后单master和多read slaves,然后数据库分区,然后sharding方式 
-痛苦与备份延迟。master数据库是多线程的并且运行在一个大机器上所以它可以处理许多工作,slaves是单线程的并且通常运行在小一些的服务器上并且备份是异步的,所以slaves会远远落后于master 
-更新引起缓存失效,硬盘的慢I/O导致慢备份 
-使用备份架构需要花费大量的money来获得增加的写性能 
-YouTube的一个解决方案是通过把数据分成两个集群来将传输分出优先次序:一个视频查看池和一个一般的集群 
2,后期 
-数据库分区 
-分成shards,不同的用户指定到不同的shards 
-扩散读写 
-更好的缓存位置意味着更少的IO 
-导致硬件减少30% 
-备份延迟降低到0 
-现在可以任意提升数据库的伸缩性 

数据中心策略 
1,依赖于信用卡,所以最初只能使用受管主机提供商 
2,受管主机提供商不能提供伸缩性,不能控制硬件或使用良好的网络协议 
3,YouTube改为使用colocation arrangement。现在YouTube可以自定义所有东西并且协定自己的契约 
4,使用5到6个数据中心加CDN 
5,视频来自任意的数据中心,不是最近的匹配或其他什么。如果一个视频足够流行则移到CDN 
6,依赖于视频带宽而不是真正的延迟。可以来自任何colo 
7,图片延迟很严重,特别是当一个页面有60张图片时 
8,使用BigTable将图片备份到不同的数据中心,代码查看谁是最近的 

学到的东西 
1,Stall for time。创造性和风险性的技巧让你在短期内解决问题而同时你会发现长期的解决方案 
2,Proioritize。找出你的服务中核心的东西并对你的资源分出优先级别 
3,Pick your battles。别怕将你的核心服务分出去。YouTube使用CDN来分布它们最流行的内容。创建自己的网络将花费太多时间和太多money 
4,Keep it simple!简单允许你更快的重新架构来回应问题 
5,Shard。Sharding帮助隔离存储,CPU,内存和IO,不仅仅是获得更多的写性能 
6,Constant iteration on bottlenecks: 
-软件:DB,缓存 
-OS:硬盘I/O 
-硬件:内存,RAID 
7,You succeed as a team。拥有一个跨越条律的了解整个系统并知道系统内部是什么样的团队,如安装打印机,安装机器,安装网络等等的人。With a good team all things are possible。

时间: 2024-10-17 11:35:17

YouTube架构的相关文章

交互设计实例:buzz的使用和架构体验

[战略] 在我看来Google最大的优势就是每一个产品都做得很到位,产品间的联系也有机而紧密的联系.放眼现有产品:search,calendar,docments,reader, map,YouTube,Picasa,Android--无论是自己研发还是通过收购的,google都能把他们做得很有特色,成为别人的模仿对象.近期发布的buzz又能发展成什么样的产品,很难预测.但是根据以往的经验,google的强项是在产品功能上,而非社区化上.实际上google以往的产品都是相对独立,虽然说g粉们用各

想染指系统架构?你绝对不可错过的一篇

本文讲的是想染指系统架构?你绝对不可错过的一篇., 系统设计入门 翻译 有兴趣参与翻译? 以下是正在进行中的翻译: 巴西葡萄牙语 简体中文(已完成) 土耳其语 目的 学习如何设计大型系统. 为系统设计的面试做准备. 学习如何设计大型系统 学习如何设计可扩展的系统将会有助于你成为一个更好的工程师. 系统设计是一个很宽泛的话题.在互联网上,关于系统设计原则的资源也是多如牛毛. 这个仓库就是这些资源的组织收集,它可以帮助你学习如何构建可扩展的系统. 从开源社区学习 这是一个不断更新的开源项目的初期的版

来自 Google 的高可用架构理念与实践

在 Google 我参与了两个比较大的 Project. 第一个是 YouTube,其中包括 video transcoding,streaming 等.Google 的量很大,每个月会有 1PB 级别的存储量.存储.转码后,我们还做 Global CDN.到 2012 年的时候,峰值流量达到 10 TBps,全球 10 万个节点,几乎每台机器都是 16/24 核跑满, 10G uplink 也是跑满的状态. 然后我加入了 Google Cloud Platform Team, 也就是 Borg

《高可用架构·中国初创故事(第3期)》一来自Google的高可用架构理念与实践

来自Google的高可用架构理念与实践 CTO @ coding.net .2007 - 2015 年初在 Google 的 Moutain View 担任 SRE (Site Reliability Engineering)职位. 参与了 Google 的两个项目:第一个是 Youtube,工作内容涵盖 Video transfer.Coding.Streaming.Global CDN 等:第二个是 Google Cloud Platform Team,主要工作是管理 Google 全球 1

浅谈Windos Azure架构与存储

 转载请注明出处:http://blog.csdn.net/zbf8441372 写在前面:         Windows Azure是微软发展出来的一套云操作系统,用来提供云联机服务所需要的操作系统与基础存储与管理的平台.我关注Azure这个平台,主要是想了解他的架构,以及他的云计算存储技术.我觉得一个好的操作系统,就是一个好的架构.Windows Azure Platform现阶段提供的是PaaS(平台即服务),但未来可能会开放基础设施即服务(IaaS)的服务项目.         接下来

小米深度学习平台架构与实现

内容来源:2016年12月16日,小米云平台深度学习研发工程师陈迪豪在"GIAC 全球互联网架构大会"进行<支撑百度搜索引擎99.995%可靠名字服务架构设计>演讲分享.IT大咖说作为独家视频合作方,经主办方和讲者审阅授权发布.阅读字数:2783 | 4分钟阅读 嘉宾演讲视频和PPT地址 http://t.cn/R9ONt8f 机器学习与深度学习应用 机器学习是通过机器进行自主学习数据而非以编码的方式:深度学习是机器学习的一个分支,主要包括四种最基本的网络结构. CNN是卷

全解Google(谷歌)基础设施架构安全设计

谷歌的技术基础设施共同构建了搜索.邮件(Gmail).照片等普通用户系统和G Suite .谷歌云存储平台等企业系统,是谷歌数据中心的关键,是整个谷歌网络服务赖以存在的安全基础. 针对谷歌技术基础设施的安全设计作了简要分析与介绍,这些技术基础设施为谷歌全球信息系统提供了一系列安全防护,它们包括运行安全服务.终端用户数据安全存储.服务安全通信.用户安全通信和运维安全管理等. 在介绍中,我们将围绕谷歌数据中心的物理安全.整体软硬件基础安全.技术限制和操作的运维安全进行逐层描述. 底层基础设施安全设计

云计算专家访谈:百度系统架构部技术总监 吕厚昌

中介交易 SEO诊断 淘宝客 云主机 技术大厅 记者:您能先简单的跟我们介绍一下您这个部门在百度中是一个什么样的角色吗? 吕:百度的数据团队属于基础架构部.顾名思义,这个部门是做数据的.百度对数据的重视在业界里面很突出,因为百度一直讲究让数据说话.用数据支持决策,已经是公司文化的一部分.这个团队成立的最主要的目标是要从技术上把数据的应用推动到更高的层次.百度的数据量很大,所遇到的不少难题业界也清楚.有时,需要做复杂的数据挖掘,但有时又会回到原点改善数据收集.数据收集做的不细做不出好东西.这个团队

在线视频王者YouTube的技术哲学

导读:许多团队都使得他们的基础架构越来越复杂,YouTube团队却尽量保持简单的风格.正是凭借简单的技术哲学,才成就了YouTube在线视频王者的盛名. 如果你想构建一个可以承载日访问量40亿次的网站,YouTube有许多值得借鉴的地方.本文是YouTube的工程师Mike Solomon在PyCon(PyCon是Python开源社区的开发者年度盛会)上关于YouTube扩展性演讲的摘要,相信会对大家有所启发. 许多团队都使得他们的基础架构越来越复杂,YouTube团队却尽量保持简单的风格.他们