Оптимизация веб приложения — процесс построения инфраструктуры и отладка кода под каждый веб-проект индивидуально с учетом особенностей его работы.
Любой проекта за редким исключением изначально целесообразно запускать на сервере с минимальной расчетной конфигурацией. Для крупных ресурсов она подбирается на этапе тестирования. Об архитектуре и развитии задумываются обычно тогда когда популярность проекта возрастает и серверу не хватает ресурсов для работы.
Оптимизация веб приложения за счет настроек сервера
Для приложений на PHP классической является связка Nginx+Apache, при росте проекта от последнего часто отказываются. В качестве сервера баз данных применяют обычно MySQL.
Nginx+Apache
Максимальную производительность можно получить используя Nginx с PHP-FPM, но такая конфигурация менее устойчива и сложнее поддерживается ввиду невозможности использования файлов .htaccess .
Nginx с PHP-FPM — лучшее решение для сервера, с которого работает один сайт и который постоянно поддерживается профессионалами.
Веб-сервер — только один из элементов системы, обслуживающей приложение. Ниже приведены основные принципы работы, которые применимы к приложению в целом.
Как контролировать ситуацию когда проект растет
При росте ресурса архитектуру системы следует совершенствовать — делается это за счет тюнинга ПО и заточки для работы с учетом выделенных серверу ресурсов (особенно это актуально для MySQL), и масштабированием — вертикальным или горизонтальным.
Вертикальное масштабирование — увеличение количества ресурсов.
Горизонтальное масштабирование — вынос части проекта на отдельные сервера.
Для того чтобы проверить как существующая конфигурация сервера поведет себя при возникновении высокой нагрузки можно сымитировав такие условия используя ab или Siege.
Для обеспечения быстродействия используется Memcached и нереляционные СУБД такие как MongoDB и Redis. Также часто создается несколько бэкенд и фронтэнд серверов запросы между которыми распределяются по предусмотренной заранее логике для того чтобы уменьшить нагрузку на инфраструктуру.
Нагруженные веб-проекты существуют на выделенных серверах или в облаке. Облачные технологии становятся все дешевле и избавляют от необходимости иметь свой физический сервер. Арендовать мощности у специализированной компании, которая занимается поддержкой железа значительно выгоднее.
Вертикальное масштабирование осуществляется изменением количества доступных машине ресурсов на стороне провайдера.
Когда увеличивать ресурсы более некуда (возможности аппаратного обеспечения и бюджеты на него ограничены — начинается масштабирование горизонтальное — перенос частей проекта на другие машины.
Хорошее архитектурное решение помимо решения основной задачи позволит увеличить отказоустойчивость, скорость работы.
При планировании архитектуры окажутся полезны статьи категории HIGHLOAD.
Прежде всего читайте про тонкую настройку Nginx. Он используется в абсолютном большинстве проектов.