# YouPorn-每天定位 2 亿次观看

> 原文： [http://highscalability.com/blog/2012/4/2/youporn-targeting-200-million-views-a-day-and-beyond.html](http://highscalability.com/blog/2012/4/2/youporn-targeting-200-million-views-a-day-and-beyond.html)

![](img/05b77736b31c0df92d092c23258b4c43.png)

**更新**：这是演讲的[视频。](http://www.youtube.com/watch?v=RlkCdM_f3p4)

YouPorn.com 的首席开发人员 [Erick Pickup](https://twitter.com/#!/EricPickupYP) 在 [建立可扩展规模的网站](https://joind.in/6123) 的演讲中介绍了其架构。 HTG8] ConFoo 会议。 如您所料，YouPorn 是一头野兽，每秒流传输三张完整的 DVD 视频，每秒处理 300K 查询，每小时产生多达 15GB 的日志数据。

不幸的是，我们只有演讲的幻灯片，因此本文并不像我想的那么技术性，例如在视频处理方面完全不可见，但我们确实得到了一些有趣的细节 。

最有趣的方法是，YouPorn 是一个非常传统的 LAMP 堆栈，具有 NoSQL 的功能，因为 Redis 现在在实时数据路径中替换了 MySQL。 简单地让我想起 [YouTube](http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html) 。

第二个最有趣的收获是**出色的转换**。 众所周知，永远不要重写，但在 2011 年，YouPorn 重新编写了整个站点，以使用 PHP + Redis，而不是基于 Perl + MySQL 的复杂体系结构。 所有人都认为切换非常顺利。 该站点的速度提高了 10％，他们迁移了 6 年的旧数据，没有停机时间。

继续阅读以了解有关 YouPorn 架构的更多信息...

## 统计信息

*   于 2006 年推出，于 2011 年被收购。
*   2008 年每天 1 亿次页面浏览
*   30 万个查询/秒
*   100 Gb / s-每秒流传输 3 张完整 DVD
*   每小时记录 8GB-15GB 数据

## 堆栈

*   最初用 Perl 编写（具有 DBIx :: Class 后端的 Catalyst 应用程序）
*   现在 [PHP-FPM](http://php-fpm.org/) （FastCGI 流程管理器）-是另一种 PHP FastCGI
*   HAProxy
*   ActiveMQ
*   清漆
*   Redis
*   Nginx
*   MySQL
*   Syslog-ng
*   [Symfony2](http://symfony.com/) -一个 PHP Web 开发框架。

## 架构

*   **大切换** 。 整个站点在 2011 年进行了重写，以使用 PHP 代替复杂的 Perl 架构，并使用 Redis 代替 MySQL 和 ActiveMQ。
    *   定位到 200+百万的每日请求
    *   移动了 6 年的旧数据而没有停机
    *   新网站的速度提高了 10％。
    *   该过程花费了比预期更长的时间：
        *   必须决定要使用哪些技术
        *   超出预期的学习曲线
        *   将数据从 MySQL 移动和重组到 Redis
        *   人员配备
*   **HAProxy** -提供负载平衡，智能负载分配和运行状况检查
    *   维护两个服务器池：一个具有故障转移到备份主服务器的写池，一个读取池将管理除主服务器之外的服务器。
*   **清漆** -反向代理有助于加快站点速度并减少服务器负载。 还用于缓存管理，边缘包括（ESI）和 Web 服务器上的运行状况检查。
*   **系统记录**-收集页面浏览量数据，并用于查看计数器和相关视频。
*   **Nginx** -高性能 Web 服务器，运行 PHP-FPM，并充当 CSS，图像和 JS 等静态文件的外部 CDN。
*   **Symfony** -快速且功能丰富，带有大量库。
    *   认为 Symfony2 + Redis =快速开发+可扩展网站-一个很好的平衡方程。
    *   喜欢依赖注入。
    *   选择 Web 框架并不意味着要破坏性能，只要您在其前面使用可靠的体系结构即可。
*   **ActiveMQ** -为大型站点设计的消息总线，用于写入 MySQL 和 Redis。
    *   他们发现，对于一个不断变化的站点来说，它太僵化了，所获得的收益不足以维持一个单独的 Java 基础架构。
    *   希望解决问题，因为问题可能更多是开发人员而不是技术人员。
*   **Redis** -一种快速的开源 KV 存储，现在是主要数据源。
    *   实时更新。
    *   已排序的集合用于所有列表
    *   [流水线化](http://rediscookbook.org/pipeline_multiple_commands.html) ，用单个原子命令执行多个 Redis 命令，是提高性能的关键
    *   切换后，添加了其他 Redis 节点，这不是因为 Redis 劳累过度，而是因为网卡无法跟上 Redis 的步伐。
    *   所有读取均来自 Redis
    *   MySQL 用于允许根据需求更改构建新的排序集。
    *   [仅附加文件（AOF）[H​​TG2]](http://redis.io/topics/persistence) 格式用于增量备份，并且无 IO 痛苦
    *   考虑将 Redis 用作 Redis 持久性存储之前的临时缓存，以提高性能和减少负载。
*   **MySQL** -支持 Redis 的支持角色
    *   高度规范化，因为它没有直接用于网站。
    *   一些表有 100+百万行。
    *   用于使用新功能填充 Redis 列表
*   同时使用了 GIT 和 SVN，效果不佳。
*   在其 CMS 中使用 [教义](http://www.doctrine-project.org/) 。 节省了数周开发时间的强大工具。

## 相关文章

*   [什么是 Symfony2？ Fabien Potencier 的](http://fabien.potencier.org/article/49/what-is-symfony2)
*   [Youporn 堆栈上的超级空缺-每天 300K QPS 和 1 亿页面浏览量](http://highscalability.com/blog/2012/2/16/a-super-short-on-the-youporn-stack-300k-qps-and-100-million.html)
*   [在 Reddit 上](http://www.reddit.com/r/programming/comments/rvw6q/youporn_scaling_to_200_million_views_a_day_and/)

演讲视频将很快到来。

我没有太多内容可以讨论。 我的计划是显示可能的结果，并在以后的讲座/文章中介绍细节。 我正在处理这些。

〜埃里克

没有批评的意图，我只是想解释为什么为什么可能没有读者想要的那么多细节。 我知道这需要大量工作，并且期待更多细节。 谢谢。

很棒的文章，很棒的幻灯片。 期待观看视频。
听到有关 svn / git 项目符号的更多详细信息将很有趣。

Youporn 最初是使用 Perl Catalyst 框架开发的（请参阅 http://www.technewsworld.com/story/70236.html?wlc=1276880514）
Manwin 在 2010 年 4 月收购了 youporn。那时，Youporn 已经是一个 BIG 网站。

根据介绍，他们决定将 Perl Catalyst 框架更改为 PHP Symphony 框架的决定并不是为了获得性能，而是为了使新收购方的非 Perl 开发人员获得陡峭的学习曲线。

我似乎认为 MySQL，ActiveMQ-> Redis 更改带来了 10％的性能提升。 即使这似乎不是很大的改进。

不要怪罪 Perl 具有复杂性和低性能。 :)

我很高兴视频播放完了。

在演示过程中的某些时候，埃里克（Eric）曾将 2 个小错误称为 dns 服务器，网络服务器和内存缓存 Redis。

我想知道的部分，视频搜索如何工作？ Redis 有可能吗？ 还是仍然使用 MySQL 文本搜索？

这一切都在什么硬件上运行？ 它是自托管的吗？