# WordPress.com 使用 NGINX 服务 70,000 req / sec 和超过 15 Gbit / sec 的流量

> 原文： [http://highscalability.com/blog/2012/9/26/wordpresscom-serves-70000-reqsec-and-over-15-gbitsec-of-traf.html](http://highscalability.com/blog/2012/9/26/wordpresscom-serves-70000-reqsec-and-over-15-gbitsec-of-traf.html)

*这是 [Barry Abrahamson](http://barry.wordpress.com/) ，Automattic 的 Chief Systems Wrangler 和 *Nginx 的共同创始人* Andrew Alexeev 的特邀帖子。*

[WordPress.com](http://wordpress.com/) 每月服务超过 3300 万个网站，吸引了 3.39 亿人和 34 亿页。 自 2008 年 4 月以来，WordPress.com 的页面浏览量增长了约 4.4 倍。 [WordPress.com VIP](http://vip.wordpress.com/) 托管了许多受欢迎的网站，包括 CNN 的政治通讯器，NFL，Time Inc.的 The Page，People Magazine 的 Style Watch，Flickr 和 KROQ 的企业博客，等等。 Automattic 在全球分布的十二个数据中心中运行两千台服务器。 WordPress.com 客户数据可立即在不同位置之间复制，从而为数亿访问者提供极其可靠和快速的 Web 体验。

### 问题

WordPress.com 始于 2005 年，始于共享托管，就像所有 [WordPress.org](http://wordpress.org/) 网站一样。 很快将其移至单个专用服务器，然后移至两个服务器。 2005 年底，WordPress.com 向公众开放，到 2006 年初，它已扩展到四个 Web 服务器，并使用循环 DNS 分配了流量。 此后不久，WordPress.com 扩展到第二个数据中心，然后扩展到第三个数据中心。 很快，轮询 DNS 不再是可行的长期解决方案。

虽然像 F5 BIG-IP 这样的硬件设备提供了 WordPress.com 所需的许多功能，但由 5 名成员组成的自动系统团队决定评估基于现有开源软件构建的不同选项。 在商品硬件上使用开源软件可以提供最高的灵活性，并且还可以节省成本。*“为单个数据中心在故障转移配置中购买一对有能力的硬件设备可能会有点昂贵，但是购买和维修 10 套 10 个数据中心的 10 套很快变得非常昂贵。”*

最初，WordPress.com 团队选择 Pound 作为软件负载平衡器，因为它易于使用且内置 SSL 支持。 在使用 Pound 大约两年后，WordPress.com 需要其他功能和可伸缩性，即：

*   快速重新配置功能，而不会中断实时流量。
*   更好的运行状况检查机制，允许从后端故障平稳逐步恢复，而不会因意外负载而使应用程序基础结构过载。
*   更好的可伸缩性-每秒请求数和并发连接数。 庞德基于线程的模型无法在每个负载均衡实例每秒可靠地处理超过 1000 个请求。

### 解

在 2008 年 4 月，Automattic 将所有 WordPress.com 负载平衡器从 Pound 转换为 [NGINX](http://nginx.com/) 。 在此之前，Automattic 工程师一直在将 NGINX 用于 [Gravatar](http://gravatar.com/) ，并且对其性能和可伸缩性印象深刻，因此自然而然地下一步就是迁移 WordPress.com。 在将 WordPress.com 切换到 NGINX 之前，Automattic 评估了其他几种产品，包括 HAProxy 和 LVS。 选择 NGINX 的原因如下：

*   简单，灵活和合理的配置。
*   能够即时重新配置和升级 NGINX 实例，而无需删除用户请求。
*   通过 FastCGI，uwsgi 或 SCGI 协议路由应用程序请求； NGINX 还可以直接从存储中提供静态内容，以实现其他性能优化。
*   唯一经过测试的软件能够每秒可靠地处理从单个服务器到 WordPress 应用程序的 10,000 个实时流量请求。
*   NGINX 的内存和 CPU 占用空间极小且可预测。 切换到 NGINX 之后，负载平衡服务器上的 CPU 使用率下降了三倍。

总体而言，WordPress.com 的峰值负载来自 NGINX 负载均衡器，服务于大约 70,000 req / sec，超过 15 Gbit / sec 的流量，还有很大的增长空间。 硬件配置是运行 Debian Linux 6.0 的具有超线程功能的 Dual Xeon 5620 4 核 CPU，8-12GB RAM。 作为高可用性设置的一部分，WordPress.com 以前使用 Wackamole / Spread，但最近开始迁移到 Keepalived。 跨入基于 NGINX 的 Web 加速和负载平衡层的入站请求的平均分配基于 DNS 轮询机制。

### 参考资料

*   [关于黑客新闻](http://news.ycombinator.com/item?id=4578258)
*   [WordPress 上的 Barry。 负载均衡器更新](https://barry.wordpress.com/2008/04/28/load-balancer-update/)
*   [WordPress 上的 Barry。 磅](https://barry.wordpress.com/2007/11/01/static-hostname-hashing-in-pound/)中的静态主机名哈希
*   [WordPress 上的 Barry。 WordPress.com 的新服务器](https://barry.wordpress.com/2007/01/31/new-servers-for-wordpresscom/)
*   [WordPress 上的 Barry。 负载均衡器测试](https://barry.wordpress.com/2006/08/30/load-balancer-testing/)
*   [由 Matt Mullenweg 打开](http://en.blog.wordpress.com/2005/11/23/opening-it-up/)
*   [Quantcast 提供的 WordPress.com 流量和人口统计](https://www.quantcast.com/wordpress.com)

NGINX 自几年以来进展顺利。 每秒的请求量和最小的硬件使我印象深刻。

我希望有一天能看到某种适用于.Net 的轻型服务器，并具有这种结果。

他们的数据库系统如何工作？

@Seun。 我无法想象平台的大部分将需要提供需要数据库命中的动态数据。 博客文章发布后，它基本上是静态的。 提供静态文件/数据非常容易，而且成本也不高。 这种模式的难点在于增加每台服务器的密度，但这实际上只是为了大规模地降低成本，并且只有当站点达到 wordpress 拥有的规模时才值得付出努力。 总之，如果提供静态数据是他们的问题，那么扩展数据库很容易，不需要任何特殊操作。 主从服务器或将表移动到专用服务器的基本内容。

应用程序更具动态性，难以扩展数据层。

我会对数据库分片更感兴趣。

您是否真的需要 2000 台服务器来处理这么多的静态流量？ 还是它们还充当自托管 CDN，包括备份和冗余？

看看 Barry 的博客。 他（和其他人）分享了很多有关 WordPress.com 环境的信息。

WP.com 似乎在 550 台 mySQL 服务器上使用了 HyperDB 复制（截至 2011 年 7 月）-[链接](https://barry.wordpress.com/2011/07/20/hyperdb-lag-detection/)

嗨，达里安，

您想特别了解数据库分片什么？ 很乐意对此发表评论。

是的，我们需要所有服务器。 流量通常不是静态的。 请记住，从 WordPress.com 提供的图像中有 85％是动态转换的-即时进行的。 相信我，如果我们不需要那么多服务器，我会很乐意摆脱它们；）

哇！ 这非常好。 我认为 Apache 基金会现在需要改进 Apache。

WordPress.com 使用 WordPress-multisite。
WordPress-multisite 通过 PHP 处理静态文件，可以减少您使用 Nginx 的麻烦。

因此，要获得像 wordpress.com 一样的性能，请在 nginx 的前面放置清漆以缓存静态内容，或者使用 [nginx-maps 指令](http://rtcamp.com/tutorials/nginx-maps-wordpress-multisite-static-files-handling/)。

这也是我最喜欢的有关可伸缩性的视频之一-http://2011.sf.wordcamp.org/session/ask-barry/。
谢谢 Barry！

他们用什么来运行实际的 WordPress 应用程序？ 我曾经在 nginx 后面尝试过 PHP-FPM，但取得了一些成功，但我想知道他们是否在 nginx 后面有完整的 Apache 堆栈。

我们在 Web /应用程序服务器上使用 Nginx + PHP-FPM。

您为什么不赞成使用 haproxy，而选择 nginx 代替 LB？
您对 GSLB 使用什么？

只是一个问题：WordPress 是否使用 nginx 作为负载均衡器，并且背后是 Apache，还是 nginx 是本机？

谢谢

@ Lord2y：请阅读 Barry 的答案，在您的上方仅两篇文章：）

@Rahul Bansal：为什么要在 nginx 前面使用清漆？ 您可以使用 nginx 缓存...

@Barry：“请记住，从 WordPress.com 提供的图像中有 85％是动态转换的-即时进行的。” ：我不明白。 什么是动态转换的？ 无论如何，如果您需要对图像做一些事情（例如缩放，压缩），则可能是在第一次调用图像时完成了，然后将结果缓存了，还是我错过了一些东西？