You TuBe 总来来说就是一个视频网站,从全球网站来看,它仅次于母公司 Google,全球排名位列第2。每天超过5亿以上视频播放量,平均每个用户点击10-15个视频。
这个平台是基于Apache、Python、Linux(SuSe)、MySQL、psyco,一个动态的Python到C的编译器、ighttpd代替Apache做视频播放
You TuBe 当前的状态可谓是超级强大。支持每天超过5亿的视频点击量、由美籍华人陈士骏(生于1978年)创立于2005年2月、于2006年3月达到每天3千万的视频点击量、于2006年7月达到每天1亿的视频点击量、于2016年3月达到每天5亿+的视频点击量、2个系统管理员,2个伸缩性软件架构师、2个软件开发工程师,2个网络工程师,1个DBA以(在2010年左右的人数)。
其用到的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对象(类似于php中的OpCode或Java的ByteCode)
14、有些数据被计算出来并发送给各个程序,所以这些值缓存在本地内存中—注:这个策略有些使用不当。
这个平台的视频服务在技术上也有很多的不同于其他平台的技术;
1,花费包括带宽,硬件和电力消耗
2,每个视频由一个小的服务器集群来处理,每个视频都是多机机器提供数据
3,使用一个集群意味着:
更多的硬盘来保存视频内容,提高更快的速度
高可用与灾难恢复。或一台机器出现故障,其它机器可以继续服务
在线备份
4,使用lighttpd作为Web服务器来提供视频服务:
Apache开销太大
使用epoll来等待多个FDS
从单进程配置转变为多进程配置来处理更多的连接
后来从lighthttpd之后换为Nginx,显示为YouTubeFrontEnd,具体是什么未知
5,大部分流行的内容转移至CDN:
CDN在多个地方缓存内容,这样内容离用户更近的机会就会更高
CDN机器经常内存不足,因为内容读取频繁,会出现内存与外存的交换瓶颈,即内存颠簸
6,一些较冷的内容(每天1-20浏览量),外部链接使用YouTube服务
长尾效应。一个视频可以有多个播放,但是许多视频正在播放。随机硬盘块被访问
在这种情况下缓存不会很好,所以花钱在更多的缓存上可能没太大意义。
调节RAID控制并注意其他低级问题
调节每台机器上的内存,不要太多也不要太少
在数据库方面:
1,早期
使用MySQL来存储元数据,如用户,标签(tags)和视频文字介绍、评论信息
使用一个RAID 10的磁盘阵列来存储数据
YouTube经过一个常见系统的架构演进:
从单服务器开始,然后单master和多read slave,接着做数据库partition分区,然后再hash sharding方式
备份慢的痛苦。master数据库是多线程的并且运行在一个大型机上,可以处理许多工作;slave是单线程的且运行在小一些的服务器上,备份是异步的,所以slave会远远慢于master主机
更新引起缓存失效,硬盘的I/O缓慢导致备份迟延
使用备份架构花费不少钱来增加写的性能
YouTube解决方案把数据分成两个集群来将传输分出优先次序:一个视频查看的数据库集群,另一个是处理其它业务的集群。
2,后期
数据库分区
分成shardings,不同的用户被分发到不同的sharding
扩散读写
更好的缓存位置意味着更少的I/O
硬件设备减少30%
备份延迟降低到0
到现在,可以任意提升数据库的伸缩性
总的来说;
1、Stall for time。创新和敢为让你在短期内解决问题,需要找到长期的解决方案
2、Proioritize。找出你的服务中核心的东西,并对资源拆分,划分优先级
3、Pick your battles。无需担心将核心服务分出去。
Youtube使用CDN来分布最流行的内容。如果都多地自建IDC机房,将需要很长时间和较高的花费
4、Keep it simple。保持简单,以此原则迭代架构,来响应出现的问题
5,ShardIng。分布式架构帮助我们隔离存储,CPU,内存和IO设备的负载,不仅仅是获得更多写的性能。
6,系统瓶颈的持续迭代:
软件:DB,缓存
OS:硬盘I/O
硬件:内存,RAID
文中部分内容摘自原文专业术语及其描述,如有不适,请联系15227013954