Жизнеспособность Apache (MPM Worker), FastCGI PHP 4/5.2/5.3 и MySQL 5
На моем сервере будут размещаться многочисленные веб-приложения на PHP, начиная с Joomla, Drupal, и некоторые устаревшие (читай: PHP4), а также другой пользовательский код, унаследованный от клиентов. Это будет машина разработки, используемая примерно дюжиной веб-разработчиков, и такие проблемы, как колебания нагрузки или особенно высокие ожидания нагрузки, не важны.
Теперь мой вопрос: есть ли какие-либо проблемы, о которых я должен знать при использовании Apache w/ MPM Worker, PHP 4/PHP 5.2/PHP 5.3 (все через FastCGI) и MySQL 5 (с кешем запросов 64 МБ)?
Я не тестировал различные приложения всесторонне, и только недавно я узнал, как установить PHP и использовать его через FastCGI (а не mod_php, что в этом случае казалось невозможным (учитывая несколько версий PHP и желание использовать MPM Worker поверх MPM). Prefork)).
Я пришел к выводу, что могут возникнуть проблемы с XCache и APC, а именно с проблемами, не связанными с безопасностью потоков, когда данные повреждаются, а возможность использовать MPM Worker становится недействительной. Это действительная проблема?
Я использую свой личный сервер тестирования (на Ubuntu Server Edition 10.04 в VirtualBox), на котором доступно 2 ГБ оперативной памяти.
Вот используемая конфигурация (реальный сервер, скорее всего, будет использовать конфигурацию, более приспособленную для своих целей):
Apache:
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./configure (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/
2 ответа
Единственное, что вы должны спросить себя: действительно ли вы ожидаете, что такой большой трафик на вашем сайте потребует такой сложной и рискованной настройки (в отличие от "обычного" prefork + php в качестве модуля).
Я запустил несколько тяжелых php-сайтов с максимальной скоростью 10 млн. Обращений в день, и мне не пришлось переключаться на многопоточную модель. PHP сам по себе является беспорядком, поэтому его нужно перепрыгивать через обручи.
Я не могу согласиться с ответами выше. Это не имеет ничего общего с тем, какой объем трафика вы ожидаете, но сколько трафика кто-то может создать. Если вам не нравится услуга, которую любой злоумышленник может отключить по своей прихоти, вы должны спроектировать ее так, чтобы она выдерживала большую нагрузку, чем может создать средний злоумышленник.