我的服务器将托管众多 PHP Web 应用程序,包括 Joomla、Drupal 和一些旧版(如:PHP4)以及从客户端继承的其他定制代码。这将是一台由十几个 Web 开发人员使用的开发机器,负载波动或特别高的负载预期等问题并不重要。
现在,我的问题是:在使用 Apache w/ MPM Worker、PHP 4/PHP 5.2/PHP 5.3(全部通过 FastCGI)和 MySQL 5(带有 64MB 的查询缓存)时我应该了解什么问题?
我还没有广泛地测试过各种应用程序,而且我最近才学会了如何安装 PHP 并通过 FastCGI 使用它(而不是 mod_php,在这种情况下似乎是不可能的(考虑到 PHP 的多个版本以及希望使用 MPM Worker 而不是 MPM Prefork))。
我了解到,人们可能对 XCache 和 APC 存在担忧,即非线程安全问题,即数据损坏,使用 MPM Worker 的能力变得无效。这种担忧合理吗?
我一直在使用我的个人测试服务器(在 VirtualBox 中运行 Ubuntu Server Edition 10.04),它有 2GB 可用 RAM。
以下是所使用的配置(实际的服务器可能会使用更适合其用途的配置):
阿帕奇:
Server version: Apache/2.2.14 (Ubuntu)
Server built: Apr 13 2010 20:22:19
Server's Module Magic Number: 20051115:23
Server loaded: APR 1.3.8, APR-Util 1.3.9
Compiled using: APR 1.3.8, APR-Util 1.3.9
Architecture: 64-bit
Server MPM: Worker
threaded: yes (fixed thread count)
forked: yes (variable process count)
工人:
<IfModule mpm_worker_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxClients 400
MaxRequestsPerChild 2000
</IfModule>
PHP./配置(PHP 4.4.9,PHP 5.2.13,PHP 5.3.2):
--enable-bcmath \
--enable-calendar \
--enable-exif \
--enable-ftp \
--enable-mbstring \
--enable-pcntl \
--enable-soap \
--enable-sockets \
--enable-sqlite-utf8 \
--enable-wddx \
--enable-zip \
--enable-fastcgi \
--with-zlib \
--with-gettext \
Apache php-fastcgi-setup.conf
FastCgiServer /var/www/cgi-bin/php-cgi-5.3.2
FastCgiServer /var/www/cgi-bin/php-cgi-5.2.13
FastCgiServer /var/www/cgi-bin/php-cgi-4.4.9
ScriptAlias /cgi-bin-php/ /var/www/cgi-bin/
答案1
您唯一应该问自己的问题是:您是否真的预计您的网站会有如此大的流量,以至于需要如此复杂和冒险的设置(而不是“常规”的 prefork + php 作为模块)。
我一直在运行几个 php 重度网站,每天的点击量峰值超过 1000 万次,无需切换到线程模型。PHP 本身就是一团糟,让它经历各种考验是自找的。
答案2
我不同意上面的答案。这和你预期的流量大小无关,而是和某人能制造多少流量有关。除非你喜欢拥有一个任何坏人都可以随心所欲关闭的服务,否则你必须设计它来承受比一般坏人能制造的更多的负载。