Youp(orn)网站架构

来源:互联网 发布:4g语音与数据 编辑:程序博客网 时间:2024/04/28 22:51

你应该能料到,Youp(orn)是个怪兽,其Alexa世界排名在100左右,目前平均每日PV约4000万,且全球访问分布比较均衡。

一些中国的门户网站或许不屑一顾了,我们这里PV早就上亿。拜托,你那是托了中国人口红利的福,不是技术上有多好。

考虑到全球1/5人口被挡在城墙后面,Youp(orn)能达到这样的访问当量,可见 ‘色即是量,量即是色’乃是和德赛一样的普适价值。

想象一下,Youp(orn)每秒传输3部完整DVD的数据流,每秒处理30万查询,并产生了15gbs日志数据每小时!

Youp(orn)刚开始的技术架构是基于Perl的,后来由于性能问题,转为用PHP重新编写,排名类似的FFN旗下的A(dult)FriendFinder也是这样的技术变迁过程。

Youp(orn)沿袭了传统的LAMP架构,其中MySQL被调整为Redis,Apache调整为Nginx。

下面提供更多的细节:

统计数据

  • 2006年创建,2011年被收购
  • 2008年达到1亿PV每天
  • 每秒300K的查询
  • 100Gb每秒-3部完整的DVD
  • 每小时8GB-15GB的日志

技术堆栈

  • 一开始是Perl(Catalyst
  • 现在用PHP-FPM(FastCGI Process Manager)
  • HAProxy
  • ActiveMQ
  • Varnish
  • Redis
  • Nginx
  • MySQL
  • Syslog-ng
  • Symfony2 - 高性能PHP框架,注意这里Symfony的版本是2,2被重写,性能得到很大的提高

架构

  • 伟大的技术转型. 整个网站在2011年用PHP重写,替代了复杂的Perl架构,使用Redis替换了MySQL,并使用了ActiveMQ.
    • 目标达到 2亿+ 每日请求
    • 迁移了6年的历史数据而没有停机
    • 新网站整体性能提高了10%
    • 转型过程比预期的要长:
      • 必须决定选用什么样的技术
      • 团队学习曲线比预期更长
      • 迁移和重新组织MySQL的数据到Redis
      • 人员变迁
  • HAProxy - 提供负载均衡,智能负载分发,以及健康检查
    • 维护了2个服务器池: 主备故障转移。
  • Varnish - 作为反向代理提高服务速度并降低服务器负载. 也被用作缓存, 边界包含代理(ESIs), 和健康检查.
  • Syslog-ng - 收集PV数据和视频点击数据.
  • Nginx - 高性能WEB应用服务器,并被用作静态资源(css/js/images)的外部CDN.
  • Symfony - 一个快速的,功能丰富,类库众多的开发框架.
    • 考虑使用Symfony2 + Redis = 快速开发 + 可扩展 - 一个很好的平衡.
    • 喜欢依赖注入特性.
    • 使用框架并不意味着牺牲性能,只要你在它前面构建好强大的架构.
  • ActiveMQ - 消息总线, 用来向MySQL和Redis写入数据.
    • 他们发现维护一个单独的Java基础组件对于一个总是变化的网站显得太过僵硬而且收益寥寥。
    • 会重新评估,也许是技术使用的问题而不是技术本身的问题
  • Redis - 一个快速、开源的键值存储。现在已经作为主数据源来使用。
    • 实时更新.
    • 有序集被用于所有的列表
    • Pipelining,  使用一个单一的原子命令来执行多条Redis命令对于性能至关重要。
    • 在技术切换后,使用了更多的Redis节点, 不是因为Redis过载了, 而是因为网卡速度不能跟上Redis.
    • 所有的读操作都放在Redis上
    • MySQL被用来在需求变化时构建新的有序集
    • Append-only-file (AOF) 格式被使用来作增量备份, 没有任何的IO问题
    • 考虑使用Redis放在一个Redis持久存储前面作为临时缓存,这样可以提高性能和减少负载。
  • MySQL - 用于为Redis提供支持数据
    • 没有被网站直接使用,高度标准化
    • 有些表存有1亿条以上的数据行
    • 用来产生Redis列表数据
  • 开发管理工具 - GIT/SVN
  • CMS - CMS中使用了Doctrine. 节约了几周的开发时间。

iefreer