大型视频网站 Justin.tv的架构设计

* 每月3000万独立访问者,每月新增注册用户有30w, 每秒钟有近2000个视频上传。
* 整个网站大约200视频服务器,每发送视频1Gbps的能力,大约每周存储100TB的文件。
* 并且在全国建立了4个数据中心,采用Map/Reduce策略对视频存储。
* 并且每个在线观看视频的用户还可以直接在线聊天,虽然提高了用户的体验,但是再次加大了网站的负载和设计的难度。
对于这样的高流量、大文件存储是视频网站与其他门户网站的不同之处,对于Justin.tv来说如果所有的视频存储在磁盘上,Live的视频将不能给用户得到流畅的体验,所以它需要与传统类型的网站具有完全不同的架构。
领跑者 CEO Michael

领跑者 创始人之一 Justin

这个网站也是用他名字来命名的,另外这个网站对中文支持的很不错,这个家伙是不是有点中国血统?
平台
1. Twice – 前端基于python开发web缓存. (http://code.google.com/p/twicecache/) 未公布源码
2. XFS – 分布式文件系统.
3. HAProxy – 软件负责均衡.
4. LVS – 传统的Linux虚拟服务器.
5. Ruby on Rails – 应用服务器
6. Nginx – web 服务器
7. PostgreSQL – 数据库服务器.
8. MongoDB – NoSql数据库,用网站于内部分析工具.
9. MemcachedDB – 数据库缓存.
10. Syslog-ng – 日志系统.
11. RabitMQ – 任务调度系统.
12. Puppet -中心化配置管理系统.
13. Git – 分布式源码版本控制服务器.
14. Wowza – 基于Flash/H.264/Java编写的视频服务器.
15. Usher – 用于客户定义视频播放业务逻辑处理.
H.E.的口水:整个网站采用Python和Ruby语言构建,Java用于视频方面的技术。
系统架构

网站针对了来自不同的国家、地区的用户做了CDN访问策略,比如:中国用户就会自动的跳转到http://zh-cn.justin.tv 网址上,这样不同地区的用户就会访问不同的服务器。用户通过HAProxy进行负载分配,在访问后端的视频服务器,分流、分载是这个架构的主要特点。
前端Web架构

网站采用Ruby on Rails用作前端Web应用程序,缓存策略采用自主研发的产品Twicet,Twicet是系统中一个分布式缓存插件,可以根据每个用户定制化进行缓存服务,在整个系统中有超过95%的网页使用Twicet进行缓存。另外,Twicet还充当反向代理和模板系统。这是为了能让每个页面被缓存后很将来容易的合并。
网站记录用户每一次点击、页面浏览和停留时间来衡量当前服务提供的质量和如何改进日后服务。日志消息从前端通过中间应用层转换成syslog-ngto日志,并通过系统进行转发到一个ngto日志主机。最后存放到MongoDB中提供内部人员进行查询、分析。
PostegreSQL是他们的主数据库。结构很简单设置了主从关系。PostgreSQL数据库结合MemcachedDB用于处理类似浏览计数器。因此网站的写没有超过读,所以可以尽量采用缓存系统处理的内容。
办公环境
上班的时候可以玩玩游戏机,还有超爽的双屏显示器,从图片上能看出那个工程师正在用Ruby语言编写程序,公司的给人感觉氛围不错,是一个很有创造力的公司。
相关文章
大型网站的web服务器
多台服务器数据实时备份
Java+PHP整合=混血新宠儿
当我在编写本文时,因为公司不断停电多次,导致大量编写的内容被“充公”,极度郁闷中。。。
未完,待续。

本文由J2ee企业顾问-黄毅创作,并已采用创作共用署名2.5中国大陆版许可证授权。





