Быстрая социальная сеть или новый взгляд на этот вопрос

Прошло уже достаточно много времени с момента моих публикаций по оптимизации системы для быстродействия социальной сети на базе 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 оперативной памяти — потянет очень серьезный проект! Обещаю 😉

Google

CMS, HTTP