`

[转]YouTube架构学习体会

 
阅读更多

原文地址:http://www.itivy.com/ivy/archive/2011/3/6/634350416046298451.html

 

 

这几天一直在关注和学习一些大型网站的架构,希望有一天自己也能设计一个高并发、高容错的系统并能应用在实践上。今天在网上找架构相关的资料时,看到一个被和谐的视频网站YouTube的架构分析,看了以后觉得自己又向架构走近了一步,于是赶快拿出来与大家一起分享。

YouTube发展迅速,每天超过1亿的视频点击量,但只有很少人在维护站点和确保伸缩性。这点和PlentyOfFish类似,少数人维护庞大系统。是什么原因呢?放心绝对不是靠人品,也不是靠寂寞,下面就来看看YouTube的整体技术架构吧。

平台

1
2
3
4
5
6
<strong>Apache
Python
Linux(SuSe)
MySQL
psyco,一个动态的Python到C的编译器
lighttpd代替Apache做视频查看</strong>

 

状态

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

 

Web服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<strong>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,有些数据被计算出来并发送给各个程序,所以这些值缓存在本地内存中。这是个使用不当的策略。
    应用服务器里最快的缓存将预先计算的值发送给所有服务器也花不了多少时间。只需弄一个代理来监听更改,预计算,然后发送。</strong>

 

视频服务

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

 

视频服务关键点

 

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

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 Architecture,GoogleTalk Architecture和BigTable

数据库

 

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

 

 

1
2
3
4
5
6
7
8
9
10
11
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。

分享到:
评论

相关推荐

    YouTube架构.rar

    YouTube架构.rarYouTube架构.rar

    YouTube的网站架构

    YouTube架构 供程序架构设计专用,希望能给大家带来帮助~!

    YouTube技术架构

    YouTube技术架构详解,包括被google收购前及收购后的架构。

    论文研究 - 使用YouTube作为学习社交表达的平台

    这种将ICT和社交媒体平台(YouTube)纳入社交表达教学中的创新可能是一种有效的混合学习方法。 这是因为使用YouTube作为学生中一个著名的社交媒体平台,可以迎合学生的多种智力,从而以更有利的方式触发学生的反应...

    Python-这是SirajRaval在YouTube上如何将文本转换为图像介绍深度学习16的代码

    【标题】:“Python-这是SirajRaval在YouTube上如何将文本转换为图像介绍深度学习16的代码” 涉及的知识点主要集中在使用Python编程语言和深度学习技术将文本转换为图像。Siraj Raval是一位知名的在线教育者,他在...

    youtube系统架构

    youtube系统架构,能学到不少架构的东西。

    Youtube字幕转为srt文件

    将Youtube字幕字幕转换成srt格式 个人开发使用,非喜勿喷,谢谢。

    YouTube-Like-predictor, 使用机器学习的YouTube计数.zip

    YouTube-Like-predictor, 使用机器学习的YouTube计数 YouTube类似计数预测器本文采用了 prediction.A 随机林模型的一种工具,用于大量 ~3,50,000 videos.Feature 工程。数据清理。数据选择和它的他技术。报告Report....

    Python-YouTube8MTensorflowStarterCode

    总之,**Python-YouTube8MTensorflowStarterCode** 是一个全面的实践教程,涵盖了数据处理、模型构建、训练和评估的全过程,是深入学习和理解机器学习在视频分类中的应用的理想起点。通过这个项目,开发者不仅可以...

    商业网站架构演变

    亿万用户网站MySpace的成功秘密、Flickr架构、YouTube网站架构、PlentyOfFish 网站架构学习、WikiPedia技术架构学习笔记。这几个都很典型,我们可以从中获取很多有关网站架构方面的知识,看了之后你会发现你原来的...

    YouTube和PlentyofFish.com网站架构分析

    YouTube和PlentyofFish.com网站架构分析 从服务器选用,网络宽带的选用,对于国外用户访问速度慢的解决方案等。是一份分析透切的好资料。

    Youtube镜像版:YouTube的前端替代产品 它提供了一个独立的前端界面,用户可以在不访问YouTube官方网站的情况

    YouTube的前端替代产品。它提供了一个独立的前端界面,用户可以在不访问YouTube官方网站的情况下浏览和观看YouTube的视频内容。Invidious的性质使得用户可以自由定制和控制他们对YouTube内容的访问和体验。

    知名互联网公司网站架构图

    个人这两天一直在搜集各大型网站的架构设计图,一为了一饱眼福,领略各类大型网站架构设计的精彩之外,二来也可供闲时反复琢磨体会,何乐而不为呢?特此,总结整理了诸如国外wikipedia,Facebook,Yahoo!,YouTube,...

    YouTube深度学习推荐系统中模型serving的问题1

    YouTube深度学习推荐系统是当前推荐技术中的一个经典案例,它涉及到复杂的模型架构和工程实践。在本文中,我们将深入探讨YouTube推荐系统中的模型部署(serving)问题,特别是关于Ranking Model的输出层设计和其预测...

    各互联网公司的网站架构

    在本压缩包中,我们能够了解到包括Facebook、YouTube、淘宝和豆瓣等知名互联网公司的网站架构设计。这些公司的架构设计都是业界的典范,具有很强的学习和参考价值。 1. Facebook的网站架构: Facebook作为全球最大...

    Youtube Video Player+Youtube API Unity播放YouTube视频插件包unitypackage

    Youtube Video Player+Youtube API Unity播放YouTube视频插件包unitypackage 支持Unity版本2019.4.40或更高 在您的游戏或项目中播放 YouTube 视频。适用于台式机、控制台和移动设备。您可以在任意位置播放 YouTube ...

    在FreeCodeCamps youtube上学习Go课程的资产快照.zip

    这个“在FreeCodeCamps youtube上学习Go课程的资产快照.zip”压缩包文件包含了在FreeCodeCamps YouTube频道上学习Go语言的课程资源。FreeCodeCamp是一个广受欢迎的在线学习平台,提供了丰富的编程课程,包括Go语言。...

    大型网站架构技术方案集锦

    YouTube 的架构扩展 WikiPedia 技术架构学习分享 Tailrank 网站架构 LinkedIn 架构笔记 Yahoo!社区架构 Craigslist 的数据库架构 Fotolog.com 的技术信息拾零 Digg 网站架构 Amazon 的 Dynamo 架构 财帮子...

    Deep Neural Networks for YouTube Recommendations论文翻译.pdf

    这个模型通过深度学习架构,能够处理和学习用户历史活动记录等复杂特征,从而实现个性化推荐。 排序模型则专注于对候选集中的视频进行更加精细的排序。它使用丰富的特征集合来描述视频和用户,根据设定的目标函数为...

Global site tag (gtag.js) - Google Analytics