🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 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) ![](https://img.kancloud.cn/49/76/497628fda2e27cb2d6a530ad5ef9654d_240x58.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 文本搜索? 这一切都在什么硬件上运行? 它是自托管的吗?