Прошло уже достаточно много времени с момента моих публикаций по оптимизации системы для быстродействия социальной сети на базе BuddyPress.
В преддверии выхода нового релиза — хочу поделиться приобретенным опытом 🙂
Как всегда мы рассмотрим сервер базы данных, веб-сервер и php, а также сам WordPress и BuddyPress.
Начнем с того, что крайне желательно отказаться от Apache — если готовы использовать Nginx! Главное преимущество перехода на Nginx — это легкие (по использованию ресурсов сервера) процессы! Но сразу хочется предостеречь от всевозможных трудностей при использовании Nginx — все примеры, советы и собственно решения ориентируются на Apache.., но что не сделаешь для увеличения производительности 😉
И так! Мы отказались от Apache? Тогда нам прямой путь в сторону Fast Cgi (Php-fpm или Spawn-fcgi — второй вариант мне кажется куда удобнее..).
Связка в нашем случаи будет выглядеть так Nginx принимает запросы, статику отдает самостоятельно, а в Fast Cgi отдает на выполнение php скрипты, затем Fast Cgi создает запросы к MySQL.
По сути мы уже произвели оптимизацию, — снизили потребление ресурсов (и памяти и процессора). Но это только первая часть..
Как еще можно улучшить ситуацию? Настроив MySQL!
MySQL
Недавно завершил проект по оптимизации сервера с 1000 пользователей, 600 блогами (из которых активных штук 30) + поисковые боты и гости — от 15 до 40 хинтов в сутки и в пики до 400 обращений в секунду…
Мои рекомендации следующие: использовать MyISAM! InnoDB может когда нибудь, но не сейчас! Далее: выделите 60% оперативной памяти для MySQL и из них процентов 20 на query_cache — тем самым вы уменьшите количество обращений непосредственно к базе данных. Не забудьте ограничить размер запросов, которые будут кешироваться (не более 1M).
Php-frm или Spawn-fcgi
Опыта по работе с Php-frm у меня слишком мало.. а вот по Spawn-fcgi есть. Создавайте не менее 2 процессов по 2048 потоков — каждая страница BuddyPress — это порядка 100 запросов или потоков в адрес процесса Spawn-fcgi.. то есть прежде чем создаться новому процессу Spawn-fcgi он успеет обработать 20 «клиентов» и не успеет «скушать» много ресурсов. Вообще настройка количество процессов и потоков — дело практики.. подбирайте!
Кстати, архитектурное решение: если у вас на одном сервере несколько сайтов — создайте для каждого свои процессы php-cgi.. надеюсь не надо объяснять про плюсы данного решения? 😉
Если Вы используете FreeBSD — работайте по сокетам!
Очень интересный момент — кеширование! Применяйте eAccelerator! Тем самым мы создаем две линии кеширования — Php и MySQL — нагрузка на всю цепочку существенно падает 🙂
WordPress MU и BuddyPress
Поставьте WP-Tuner и смотрите сколько же лишних запросов нагружает Вашу систему. Плагин дня рождения — +2000 запросов на фронте BuddyPress при 1000 пользователей.. прежде чем писать плагины — надо уметь их готовить!
Не ставьте плагинов кеширования!!!!! У Вас и так уже две линии созданы! Лучше займитесь темами.. максимально избавьте темы от использования запросов!
Выкладывать «боевые» конфиги.. пока не вижу смысла… все слишком индивидуально! Но я подумаю над такой возможностью 😉
Сервер с двумя процессорами по два ядра с 4Gb оперативной памяти — потянет очень серьезный проект! Обещаю 😉
CMS, HTTP