FastCGI и оптимизация
02.01.2011 технологии
В голове у меня каша, и вот чтобы привести в порядок разрозненные обрывки знаний ищу и впитываю более-менее структурированную информацию. Процесс не быстрый.
В сети куча всяких мануалов по настройке PHP-FPM и всякого такого, но почти нигде не объясняется, что ж это за хрень такая, как и почему она возникла, как правильно использовать и т. п. А делать что-либо без понимания мне некомфортно.
Но вот сейчас нашёл классную статью от известного всем программистам Дмитрия Котерова (создателя Денвера), которая, похоже, станет неплохим базисом для меня. Статья называется Оптимизируем загрузку PHP-кода в 22 раза, или почему FastCGI не ускоряет PHP.
Если вы читали (или прочитаете) этот материал и у вас возникли свои мысли по теме, не молчите! Напишите в комментариях, пожалуйста.
Комментарии
Комментирование этой статьи закрыто.
Особо сказать нечего. Всё весьмах хорошо разжёвано в статье. Я лишь напомню, что я уже кажется говорил что весь тот геморой который испытывают администраторы серверов с FastCGI – лишён смысла.
Но статья древняя (2008 г.), и я предполагаю, что FPM, который включен в новый PHP 3.3.3 работает как-то иначе. Сейчас буду искать информацию по этой теме.
P.S. Ещё интересное обсуждение с участием Котерова. Правда, тоже не очень-то новое, 2009 г. Пока непонятно, изменилось что-то с тех пор или нет.
bosha, весь тот геморой который испытывают администраторы серверов с FastCGI – лишён смысла — это для PHP лишён, для языков, где либы организованы в классы, а не лежат по 9к в глобал скейпе (извиняюсь за плохие слова), очень даже осмыслен и нужен.
Попытка немного похоливарить под вечер.
Вот смотрите, скрипт выполняется строка за строкой, пока не будет достигнут конец файла. По всем инклюдам, скрипт проходит и там, от начала до конца.
Если у вас код в классе, или как минимум в функции, интерпретатор при подключении такого файлика может даже не заглянуть внутрь функции/класса, максимум проверит синтаксис.
Если же нет, весь код будет выполнен и настанет 3.14159265здец. Я, допустим, хотел подключить либу, которая хеши считает, чтобы md5-хеш высчитать, и вместо того, чтобы загрузить только функцию md5 и зависимых, я подгружаю ещё sha1 и прочих неизвестных мне хешей.
bosha, весь мой геморой выглядит вот так:
cat mysite.pid && rm -rf mysite.pid
kill N && ./start.sh
И это я просто bash не знаю, чтобы слить всю перезагрузку джанго-демона в одну строку.
У тебя вечер, а у меня уже утро, 4:50. Насчёт твоего примера… хм, kill жёстко как-то, неужели нормального способа нет?
Хз ещё, как питоновский скрипт убить нормально, кроме как ещё по сокету сказать, что тебе бы завершиться пора. Да и в доках так указано.
Да и оно не держит открытых файлов или ещё чего, что могло бы повредить, разве что если коннект активный есть в данный момент, но это совсем неудачником нужно быть, чтобы так попасть.
На офсайте php-fpm написано, что выигрыш по сравнению с апачем не в скорости (поскольку это всё-таки не полноценный FastCGI, чего очень хотелось бы), а в объеме используемой памяти, что на мой взгляд тоже немаловажно. Отдельным плюсом php-fpm для меня идет возможность завершить запрос, а уже после этого выполнять «финализирующие» действия (записать +1 в стат, освободить ресурсы, досчитать если что нужно).
А можно подробнее, как именно ты это делаешь и почему такая возможность именно благодаря FPM появляется?
php-fpm предоставляет функцию fastcgi_finish_request(), после вызова которой клиент считает что запрос обработан, но скрипт свою работу не завершает при этом. Более полно вот в этой статье – highload.com.ua/inde…
Спасибо, интересно.
Кстати, этот сайт у меня в закладках, очень толковый ресурс, мне он нравится. Много хороших статей.
Как я и писал, всегда считал fastcgi в случае с пхп злом и дрочем. Про производительность не знал, но гемороя получал тонны из-за fastcgi. Теперь точно знаю что это полный дроч и так делать никогда не надо.
Rulexec, ты не понял что я в контексте php имел в виду. Для django использование FastCGI вполне осмысленно и даже нужно я бы сказал.
Олсо, ты вполне правильно всё убиваешь. И раз не знаешь bash (хотя что там знать не понимаю), то пише скрипты на питоне, вот проблема то ;)
bosha, я вот думаю в ближайшее время с Fabric разобраться и делать всё по-правильному.
По-моему превосходная система.
А какие конкретно проблемы возникали?
nginx + php-fpm.
Никогда не понимал плюсов какого-либо иного решения :)