Назад | Перейти на главную страницу

Жизнеспособность 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 Префорк)).

Я пришел к выводу, что могут возникнуть опасения относительно 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/

Я не могу согласиться с приведенными выше ответами. Это не имеет никакого отношения к тому, сколько трафика вы ожидаете, а к тому, сколько трафика кто-то может создать. Если вам не нравится служба, которую любой злоумышленник может закрыть по своей прихоти, вы должны спроектировать ее так, чтобы она выдерживала большую нагрузку, чем может создать средний злоумышленник.

Единственное, что вы должны спросить себя: действительно ли вы ожидаете, что такой объем трафика на вашем сайте будет оправдать такую ​​сложную и рискованную настройку (в отличие от «обычного» prefork + php в качестве модуля).

Я запустил пару сайтов с тяжелым php с пиком более 10 миллионов обращений в день без необходимости переключаться на многопоточную модель. PHP сам по себе представляет собой беспорядок, и он требует этого.