LINUX.ORG.RU
ФорумAdmin

mod_php - fastCGI - необходим ответ знающего человека


0

0

Доброго дня всем.

Ну вот смотрите - если мы собираем php, с опцией --with-apxs2, то php сделает 
модуль для апача. В таком случае, загружаясь, апач будет подгружать so файл от php.
 Это первый вариант.

Другой - fastCGI (апач и php общаються через TCP/IP).

Что-то мне сильно кажется, что вариант mod_pm быстрее будет работать:
рассмотрим что будет происходить на запрос клиента (пусть даже mpm=prefork)

mod_pm:
----------------------------------------
* fork() - свободных уже нет
* обработка запроса, потому что mod_php уже был загружен parent процессом
* выдаем ответ клиенту

fastCGI:
----------------------------------------
* fork() - свободных уже нет
* открываем сокет
* пишем в сокет
* читаем из сокета
* выдаем ответ клиенту

сейчас часто вижу слова fastCGI рядом с nginx, и поэтому решил спросить здесь про 
эти особенности (пусть даже не про nginx, хотя мне и это интересно, а прочто про 
апач).

заранее спасибо за содержательные ответы.

http://ru.wikipedia.org/wiki/FastCGI - имхо, лаконично и содержательно.

от себя добавлю, что лайти/фастцыг по производительности в реальных условиях среднего размера веб кластера уделывают апач/мод_пых - апач выедает всю память ноды на 300 одновременных активных коннектах примерно. лайти с фастцыгом спокойно держат пару тысяч на кластере с тем же кол-вом нод/железом.

bsh ★★★
()
Ответ на: комментарий от bsh

да, вы правы: кластерные решения, перенести FastCGI программы на другую машину - вот где выиграет FastCGI.

однако что насчет одного сервера - как там быть ? быстрее ли будет FastCGI работать чем mod_php ?

nial
() автор топика
Ответ на: комментарий от nial

это конечно лучше всего проверить практически - у меня кстати как раз скоро должна представиться такая возможность :)

думается, что ответ на вопрос зависит ещё и от того, что понимается под "быстрее" - имхо, скорее всего скорость открытия/закрытия сетевых соединений с клиентом веб-сервера будет более-менее одинаковой (не знаю даже что быстрее - передача данных от мод_пхп апачу через пайп, или от фастцыга лайти через файловый дескриптор unix domain soket'a), в то время как общая производительность сервера, т.е. способность к одновременной обработке большого кол-ва соединений в связке фастцыг/лайти явно выше, за счёт меньшего расхода памяти, т.к. порождается гораздо меньше процессов.

bsh ★★★
()

В моей практике nginx + php-cgi не блестал стабильностью
под большей нагрузкой. Приходилось запускать в цикле:

while true; do php-cgi -b localhost:9000; sleep 3; done

php5-cgi 5.2.*

rm
()
Ответ на: комментарий от bsh

странно, получается, когда апач получает запрос на php ресурс, он делает вызов функции из mod_php (которая как so-шка уже подгружена к нему в память), эта функция делает fork(), открывает pipe, и общается с родительским процессом (апачем)

так что-ли ?

nial
() автор топика
Ответ на: комментарий от nial

вот хз, не уверен.. похоже что так, и через пайп быстрее, но общая производительность на загруженном кластере снижается из-за постоянного выделения памяти на процессы апача, ведь каждый префорк сьедает порцию памяти, и в итоге вариант с лайти/фастцыгом оказывается оптимальнее на нагрузках больше определённой величины. Но, думается, если сервер не слишком нагружен, apache/mod_php наверное всё таки будет быстрее.

bsh ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.