首页
关于
标签合集
友情链接
Search
1
一些简单方面的Linux生产随机密码shell
382 阅读
2
美超微主板IPMI使用教程
350 阅读
3
Ubuntu系统开启root登陆权限
278 阅读
4
linux下502自动重启脚本
269 阅读
5
利用廉价VPS做反代,保护你的真实服务器
216 阅读
OS
促销资讯
管理系统
网站运维
网文资讯
登录
Search
标签搜索
网站架构
linux
网站运营
centos
mysql
google
nginx
ssh
apache
服务器
kloxo
vps
架构分析
PHP
特价VPS
xen
shell
数据库
lamp
vpn
装逼爱好者
累计撰写
163
篇文章
累计收到
20
条评论
首页
栏目
OS
促销资讯
管理系统
网站运维
网文资讯
页面
关于
标签合集
友情链接
搜索到
1
篇与
的结果
2011-07-10
YouTube架构分析
YouTube的成长速度惊人,目前每天视频访问量已达1亿,但站点维护人员很少。他们是如何管理,以实现如此强大供应能力的?被Google收购后,又在走什么样的发展道路呢?转载一些相关的文章,参考学习一下原文: YouTube ArchitectureYouTube发展迅速,每天超过1亿的视频点击量,但只有很少人在维护站点和确保伸缩性。平台ApachePythonLinux(SuSe)MySQLpsyco,一个动态的Python到C的编译器lighttpd代替Apache做视频查看状态支持每天超过1亿的视频点击量成立于2005年2月于2006年3月达到每天3千万的视频点击量于2006年7月达到每天1亿的视频点击量2个系统管理员,2个伸缩性软件架构师2个软件开发工程师,2个网络工程师,1个DBA处理飞速增长的流量Java代码 while (true) { identify_and_fix_bottlenecks(); drink(); sleep(); notice_new_bottleneck(); } while (true) { identify_and_fix_bottlenecks(); drink(); sleep(); notice_new_bottleneck(); }每天运行该循环多次Web服务器1,NetScaler用于负载均衡和静态内容缓存2,使用mod_fast_cgi运行Apache3,使用一个Python应用服务器来处理请求的路由4,应用服务器与多个数据库和其他信息源交互来获取数据和格式化html页面5,一般可以通过添加更多的机器来在Web层提高伸缩性6,Python的Web层代码通常不是性能瓶颈,大部分时间阻塞在RPC7,Python允许快速而灵活的开发和部署8,通常每个页面服务少于100毫秒的时间9,使用psyco(一个类似于JIT编译器的动态的Python到C的编译器)来优化内部循环10,对于像加密等密集型CPU活动,使用C扩展11,对于一些开销昂贵的块使用预先生成并缓存的html12,数据库里使用行级缓存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还有从DBA Notes看到过的一些:一、系统主要用Python开发,用psyco提高性能看到这个我总算知道Google为什么要收购YouTube了,都喜欢用Python嘛,本 来就有缘。用Python开发的速度显然比用C/C++、 Java等高不少,这一点eBay就比较传统,用C++/Java来写,结果落得需要几百个工程师,编译一次很久。最感兴趣的是用了psyco这个东西,所说这玩意相当于Java中的JIT编译器,通常能将Python代码的执行速度提高4倍,对于算法集中的代码甚至能提高10到100倍。二、使用lighttpd给视频内容本身提供服务时用了lighttpd,不能Apache,据说性能提高不少,但有了说这个还不好,应该用nginx,俄罗斯人写的一玩意。三、最流行的内容自己不管,放在CDN上YouTube很会享受,最常访问的内容自己的系统不管,放在运营商和Google(估计是被Google收购之后吧?)的内容分发网络上。他们自己的服务器只要处理一些不常访问的漏网之鱼就可以了,负载大大减轻。四、缩略图是最大的问题,自己搞不定,最后用Google的BigTable搞定俗话说人小鬼大绝对是有道理的,那么大的视频没什么问题,小小的缩略图却是个大问题。原来YouTube的开发人员用lighttpd,发现效果不太好,就改了代码,但效果还是不行。最后被Google收购后用了BigTable才算搞定这个问题。五、MySQL swap问题,把swap关掉就行了YouTube用MySQL存元数据,结果在Linux上swap颠簸很厉害,解决的方法也简单,把swap关掉就好了。而且人家胆子大,服务还在那里跑,这边就把它关了。六、MySQLYouTube 用MySQL也是摸着石头过河,一开始只用一个主服务器和replication,显然过一阵子这个方法就不行了。后面他们尝试把视频和非视频业务分开处 理,但这个方法也顶不了多久。最终还是走到数据分区这条正道上来。对数据库服务器的磁盘系统的选择也很有意思,最早是用10块盘做RAID 1+0,但发现盘太多了也使不上劲,所以后来改后一堆RAID 1。
2011年07月10日
23 阅读
0 评论
0 点赞