Архив за месяц: Июнь 2011

Построение архитектуры, заточенной под высокие нагрузки

Если говорить коротко о том, что я услышал на DevConf, то:

1. Возможность горизонтального масштабирования нужно закладывать изначально. Это, разумеется, в первую очередь относится к базе данных. Как сказал Рыбак (если не путаю, не дословно): «Отмасштабировал базу, считай, что отмасштабировал все приложение.» Для этого используем шарды.

2. Использовать следует nginx (или другой «легкого» веб-сервера) и PHP-FPM.

3. Кешируем, кешируем и кешируем! Читать информацию даже из удаленного кеша получается быстрее, чем с локального диска. Объекты из БД кешируем в мемкеше, а файлы из хранилища в кеше файловой системы.

4. В базе данных используем движок InnoDB. Связано с тем, что MyISAM блокирует полностью таблицу, а в InnoDB блокировка строк, что позволяет не создавать длинных «очередей» на чтение/запись. Ну, и транзакций нет, понятное дело, в MyISAM. Рыбак, как я понял, рекомендовал (по собственному опыту) XtraDB (да и вообще Percona Server).

5. Используем очереди. Это позволяет многие затратные операции не делать немедленно, а разнести во времени. (Да и в пространстве тоже, собственно.)

6. Много, очень много внимания следует уделять мониторингу и логам. Логировать нужно все, мониторить тоже :) Для мониторинга рекомендовалась Pinba.

upd. Рыбак также рекомендовал несколько блогов, из которых я запомнил два:
http://highscalability.com и http://jcole.us/blog/

DevConf 2011

Давно мечтал попасть на DevConf (PhpConf), и вот это случилось :) Второй день в самом разгаре, сижу на мастер-классе Алексея Рыбака «[HighLoad] Основы построения масштабируемых высоконагруженных веб-проектов». В целом, довольно интересно, хотя и ничего нового тут пока не услышал, так как по долгу службы приходится работать практически с такой же архитектурой.