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