Построение масштабируемых PHP-приложений

Мартин Роест (Martin Roest) в статье "Как мы создаём масштабируемые веб-приложения" делится своими взглядами на принципы разработки больших систем.

Мартин приводит такое определение понятия "производительность" - обслуживать большее количество запросов при наименьшем количестве интенсивных операций. Этого он достигает за счёт:

  • Кеширование на всех уровнях. Лучше всего, чтобы в кеш сохранялся уже исключительно статический HTML.
  • Следующий принцип - прокетировать приложения так, чтобы компоненты были минимально связаны между собой. Если придётся разнести их по разным физическим серверам, то проблем возникнуть не должно.
  • Инфраструктура системы должна поддерживаться архитектурой приложения. К примеру, если у вас кластер из нескольких серверов, то нужно позаботиться о единой работе сессий (к примеру на базе решения Zend Platform). Если приложение работает с загрузкой файлов на сервер, то необходимо удостовериться, что эти файлы доступны для всех машин (для этого можно использовать обычный rsync или дорогое SAN решение. Возможно, механизм кеширования стоит вынести так же на отдельный сервер? Использование архитектуры SOA поможет распределить нагрузку.
  • На уровне базы данных можно пойти по пути разнесения разных частей базы данных по разным серверам. Прежде чем приступить к написанию кода, протестируйте архитектуру вашей базы данных, удерживая в голове тот факт, что две записи и миллион - ведут себя совершенно по разному.

В последующих статьях Мартин обещал рассказать о некоторых инструментах более подробно.