内容纲要

YouTube 作为一个几十亿级别流量的视频网站,其站点维护人员却少之又少,这些技术人员是如何设计 YouTube 架构,使其具备如此强大的抗压能力的呢,我们接着往下看。

核心技术要点
1)Apache:站点服务器
2)Python:Web 应用主要是用 Python 搞定的
3)Linux(SuSe):操作系统(笔者:为何选用 SuSe 呢)
4)Mysql:数据库
5)psyco:这是 Python 的一个 C 语言扩展
6)lighttpd:视频服务器没有用 Apache,而是选择用了 lighttpd

Web 服务要点
1)使用 NetScalar 实现负载均衡,以及对静态内容的缓存(笔者:NetScalar 是一个 Web 应用优化的解决方案,常用于 Web 应用加速,负载均衡,Web 安全功能等)
2)Apache 使用 mod_fast_cgi 模式(笔者:fastcgi 是一个进程常驻的 CGI 模型,主要解决传统 CGI 模型令人诟病的 “fork and execute”,模型)
3)由一个 Python 服务专门负责 Web 请求的路由(笔者:那个时候 Nginx 还没有大行其道)
4)CPU 密集型的复杂计算,使用 psyco 用 C 语言搞定(笔者:Python 这个技术选型真的合适么)
5)Web 层做页面缓存
6)数据层做数据缓存
7)对于某些数据,提前计算,并形成本地缓存,但这个优化没有大规模应用

Web 服务效果
1)可以通过增加服务器来进行水平扩展
2)选择 Python,是因为它开发效率高,互联网的时代,快速迭代和频繁发布的能力,你懂的(笔者:为什么不选 php 呢)
3)Python 代码效率不是瓶颈所在,Web 服务的瓶颈在 RPC 请求(笔者:意思就是,Web 应用的瓶颈还是在后端)
4)响应时间基本控制在 100ms 以内(笔者:不评论了)

视频服务要点
1)每段视频不止存储在一个机器上,而是存储在一个小集群上,集群的优势在于 A:更高的读性能 B:可用性高 C:数据在线备份(笔者:那个时代,视频的 replica 是比较先进的技术)
2)使用 lighttpd 作为视频的 Web 服务器,lighttpd 的优势在于 A:Apache 太重 B:有 epoll 模式 C:有多进程模式,无论如何,我们希望同时处理更多的并发连接
3)热门视频放到 CDN 上
4)冷门视频,这里指 PV 低于 20 的视频,使用 XXOO 技术进行优化(笔者:这个地方没有看懂,原文是 “Less popular content uses YouTube servers in various colo sites”,这个“colo” 没懂是什么意思,如果你知道,请发消息给我)
5)由于视频的特殊性,尽量减少服务器与终端用户之间的路由器和交换机等设备
6)采用 SATA 磁盘进行随机寻道优化

视频预览图要点
1)用单独的集群存储预览图(笔者:你猜的没错,预览图就是存在文件系统上的)
2)使用 squid 作为 Apache 的前端(笔者:squid 是一个流行的 Web 服务器反向代理,常用来做静态文件访问加速,理解为一个缓存服务吧)
3)未来准备使用 BigTable 来做预览图的存储

数据库要点
1)数据库使用 Mysql,当然,用它只是来存储元数据
2)和其他站点应用一样,YouTube 走过了单机,主从,水平切分的过程
3)主服务器用硬件条件较好的机器,使用多进程多实例模式;从服务器使用硬件条件差一点的机器,使用单实例模式
4)读写分离

经验教训
1)坚持就是胜利,解决短期问题的创新方案有风险,需要慎重。一直坚持,一定能找到长期方案
2)找到主要矛盾并集中资源解决
3)有选择性合作,不要害怕将项目的关键部分外包,例如 YouTube 的 CDN
4)keep it simple,从简思想,不多说了
5)数据分隔,水平拆分
6)瓶颈的迭代优化,包括软件层,操作系统层,硬件层
7)团队是成功的基石

发表评论

电子邮件地址不会被公开。 必填项已用*标注