我将在一个活动中实时发布博客,预计流量会大幅增加。我目前使用的是 apache 和 modphp,去年它在流量过大的情况下崩溃了,我不希望这种情况再次发生。
我正在考虑为这个运行 wordpress 的博客设置一个单独的 VPS。
我应该使用什么 http 服务器?apache、lighttpd 还是 nginx?
在重负载下哪个表现最佳?
通过 AJAX 更新,内容将变得非常动态。
答案1
Lighttpd 或 nginx 可能是正确的选择。就我个人而言,我会选择 nginx。
不要忘记大力优化你的应用程序。使用 memcached 缓存查询结果。
可以通过从以下位置提供图像、js 和 css 来进行进一步优化:单独的无 cookie 域。遵循该指南中的提示也会让你一切顺利。
你可以在你的网络服务器上使用漆缓存静态页面数据。如果您真的想全力以赴,请从 CDN 提供您的图像、js 和 css。
根据您获得的流量(或期望获得的流量);您可能需要考虑多个前端 Web 节点,在这种情况下,Varnish 可以充当相当不错的负载均衡器。
我之前说过,现在再说一遍。如果你预计流量会激增,并且要求正常运行时间且不中断,也许你可以考虑使用 Amazon EC2自动扩展提供。这可能比构建自己的解决方案更有效,特别是如果您不期望流量持续一整年。
另外,您还没有说您使用的是 VPS 还是物理机。我发现 VPS 不适合高流量网站,因为经常存在 IO 争用问题,导致 IOwait 时间过长。对于高可用性,您真的无法超越专用硬件、双 NIC、冗余网络基础设施等。
我想一切都取决于您的预算。
答案2
Nginx 或 lighttpd 是肯定的选择。您可以使用 mpm-worker 模块代替 prefork,以配置 Apache 使其更具竞争力。但是,这需要配置 php 以使用 fastcgi 或类似的东西;这本身可能是一个聪明的想法。
我个人使用带有 php-fpm 的 nginx 运行 wordpress,速度非常快。
无论您选择哪个 Web 服务器,都可以进行一些优化。
- 启用/安装 APC,php 操作码缓存。
- 启用 mysql 查询缓存
- 安装 WP Super Cache 并尽可能提供静态版本。
在模拟负载下测试设置以确保其不会失效。
答案3
我们之前有一个 apache2 设置,其中有大约 200 个 vhost(每个客户端 1 个),代理到 4 个负载平衡后端服务器之一。我们发现,无论是使用 mpm-worker 还是 prefork,Apache2 在每个连接上都使用了大量未共享内存(每个 20-30 mb,总共近 400-500mb,仅用于前端!)(mpm-worker 似乎根据 maxclients 来改变该数字的倍数)我们没有足够的 RAM 来专门用于大量空闲的前端工作者,并且每周都会在我们的机器上不断达到最大负载。
然后我们将前端切换到 nginx。我将其配置为最多接受 4096 个连接(类似于 apache 上的最大客户端),并且它使用 30mb 内存。它在高交换条件下继续运行并提供足够的响应。我们能够将最大同时请求数增加近一倍。我们只在截止日达到最大负载,即使这样,我们也可以调整后端以优先考虑这些客户端。
事后看来,使用 apache2 作为负载均衡器/代理可能并不明智,但经过多年的发展,我们最终还是选择了它。显然,我们已经不再需要它了,而 nginx 可以帮上忙。
请记住,这只是轶事证据,但您会发现任何基于事件的服务器(lighttpd 或 nginx)都有类似的成功案例
答案4
我刚刚通过 fastcgi 从 apache2 prefork 转到 nginx php。这确实没有可比性,nginx 默认设置只是能够处理 apache 使用 prefork 的请求的几倍。我本可以通过 fast cgi 使用 apache2 mpm worker php,但我在同一台服务器上安装了 nginx,但使用了不同的端口,以便在将站点切换到它之前全面测试所有内容。我现在可能会使用 mpmworker 和 fastcgi 重新执行 apache2 并进行比较。
我的总体想法是 apache2 mpm worker fastcgi 对我来说同样适用。
您可以使用以下方式进行一些负载测试http://loadimpact.com,其中我的 apach2 2 设置无法完成 20 个用户,而 nginx 几乎无负载地完成了 50 个用户。顺便说一句,我的设置只有 128MB RAM 和 1GB 交换空间。