大型视频网站YouTube架构学习笔记

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

YouTube发展迅速,每天超过1亿的视频点击量,但只有很少人在维护站点和确保伸缩性。这点和PlentyOfFish类似,少数人维护庞大系统。是什么原因呢?放心绝对不是靠人品,也不是靠寂寞,下面就来看看YouTube的整体技术架构吧。
平台
1、Apache
2、Python
3、Linux(SuSe)
4、MySQL
5、psyco,一个动态的Python到C的编译器
6、lighttpd代替Apache做视频查看

状态

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

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 Architecture,GoogleTalk Architecture和BigTable

数据库

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-10 09:09:10

大型视频网站YouTube架构学习笔记的相关文章

转:大型网站架构学习笔记

前言 最近一直在拜读两本书: 1.李智慧老师的<大型网站技术架构 核心原理与案例分析> http://www.linuxidc.com/Linux/2015-11/125137.htm 2.曾宪杰老师的<大型网站系统与Java中间件实践> http://www.linuxidc.com/Linux/2015-11/125138.htm 看了并结合自己目前的工作进行了思考,感觉获益匪浅.受益良多,自己对大型网站的理解又有了不少的加深,下面分享一下自己的学习笔记. 学习笔记 1.大型网

大型网站架构学习笔记

前言 最近一直在拜读两本书: 1.李智慧老师的<大型网站技术架构 核心原理与案例分析> 2.曾宪杰老师的<大型网站系统与Java中间件实践> 看了并结合自己目前的项目进行了思考,感觉获益匪浅.受益良多,自己对大型网站的理解又有了不少的加深,下面分享一下自己的学习笔记. 学习笔记 1.大型网站架构的发展史(红字就是每一步发展历程的关键) (1)从一个小网站发展起来,一台服务器,应用程序.数据库.文件等所有资源都在一台服务器上 (2)网站业务的发展,一台服务器逐渐不能满足需求,因此要将

优酷、YouTube、Twitter及JustinTV几个视频网站的架构

  优酷视频网站架构 一.网站基本数据概览据2010年统计,优酷网日均独立访问人数(uv)达到了8900万,日均访问量(pv)更是达到了17亿,优酷凭借这一数据成为google榜单中国内视频网站排名最高的厂商.硬件方面,优酷网引进的戴尔服务器主要以 PowerEdge 1950与PowerEdge 860为主,存储阵列以戴尔MD1000为主,2007的数据表明,优酷网已有1000多台服务器遍布在全国各大省市,现在应该更多了吧.二.网站前端框架从一开始,优酷网就自建了一套CMS来解决前端的页面显示

大型网站技术架构读书笔记目录

这是一本什么样的书籍 <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计案例,为读者呈现一幅包括技术选型.架构设计.性能优化.Web安全.系统发布.运维监控等在内的大型网站开发全景视图.虽然没有相关的细节内容,不妨碍一览众山小大型网站的各个方面. ? 为什么会读此书 为以后有机会做大型网站做技术储备,深入了解大型网站建设的各个方面.以此形成笔记,方便以后复习和查阅,必经书读一遍是远

《大型网站技术架构》笔记

最近又把<大型网站技术架构>看了一遍.而中间读了一本<计算机操作系统>的教材后,感觉对大型网站的技术架构有更深的了解.在此结合对这两本书的理解做一些笔记 传统的OS(Operator System)有四个基本的功能: 处理机管理:以进程为基本单位,对其创建和撤销 a)         进程控制 b)         进程同步 c)         进程通信 d)         调度 存储器管理 a)         内存分配 b)         内存保护 c)         

大型网站技术架构 读书笔记1 大型网站架构模式

架构,又名软件架构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计. 关于什么是模式,这个来自建筑学的词汇是这样定义的:"每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心.这样,你就能一次又一次地使用该方案而不必做重复工作".模式的关键在于模式的可重复性,问题与场景的可重复性带来解决方案的可重复使用. 针对现在的高并发访问,海量数据处理,高可靠运行等一系列问题,众多大型互联网公司提出了各种系统解决方案.这些优秀可靠的方案又被别的网站重复使用

大型网站技术架构 读书笔记2 大型网站核心架构要素

通常情况下,一个网站的架构出来功能性需求外,还应该考量以下五个方面: 性能 可用性 伸缩性 扩展性 安全性 性能 性能的官方解释,我就不说了.对用户来说,就是系统的反应速度是否快. 对网站来说,性能问题是无处不在的,继而,我们优化性能的手段也有很多. 我们从前到后一个一个来说 在浏览器端,可以通过浏览器缓存,页面压缩,合理布局页面等方式 还可以使用cdn,让一些静态文件放在网络服务商的机房,这样离用户近一些. 也可以使用反向代理,把静态文件存在反向代理服务器上,例如apache 服务器端就是缓存

web前端之网站seo优化学习笔记

这两天因为一些公司业务上的原因,学习了一些关于网站seo优化的方法和技巧. 之前在码代码的过程中其实还没有考虑过对于网站导流和优化网站关键字搜索排名的问题. 在了解了一些这方面的资料之后,觉得这是一个很有意思的领域.把这几天的学习笔记记下来. 个人理解是在一个项目基本上完成主要需求后需要运营需求加入的时候,此时seo优化就非常重要.所以在网站开发的最开始有经验的前端coder们在搭架子的时候就应该提前把以后运营汪们可能会提出的运营需求,特别是一些针对影响关键字排名和与搜索引擎相关的部分就可以考虑

优酷网的架构学习笔记

记得以前给大家介绍过视频网站龙头老大YouTube的技术架构, 相信大家看了都会有不少的感触,互联网就是这么一个神奇的东西.今天我突然想到,优酷网在国内也算是视频网站的老大了,不知道他的架构相对于 YouTube是怎么样的,于是带着这个好奇心去网上找了优酷网架构的各方面资料,虽然谈得没有YouTube那么详细,但多少还是挖掘了一点,现在总结 一下,希望对喜欢架构的朋友有所帮助. 一.网站基本数据概览 据2010年统计,优酷网日均独立访问人数(uv)达到了8900万,日均访问量(pv)更是达到了1