Блог студии 77

Ускорение сайта

16 декабря 2011

Полгода назад я уже вкратце писал об оптимизации скорости сайта, и из чего в целом состоит эта работа. Теперь же хочу рассмотреть процесс ускорения сайта более детально и по шагам. Представим, что у нас есть сайт, который уже не справляется с нагрузкой, клиентов все больше и больше… сервер начинает потихоньку захлёбываться. При первых признаках этого нужно провести проработку уже имеющегося программного кода и внедрить некоторые новые технологии. Эта статья будет интересна разработчикам и не только.

Первым пунктом ускорения является анализ и оптимизация программного кода PHP-скриптов. В некоторых случаях (оптимизация циклов с большим количеством итераций, правильное использование многомерных массивов данных, вывод в консоль или бразуер значительных объемов текстовых данных) может принести до 200% прироста производительности сайта в целом.

Далее следует пошаговая оптимизация работы с базой данных (MySQL) – индексация, уменьшение до минимума количества запросов к БД, денормализация таблиц сложно вычисляемыми данными, поиск и анализ медленных запросов, устранение проблемных запросов путем изменения их логики. Может произвести прирост производительности в разы, в зависимости от начального состояния нашего сайта, объема самой базы данных и логики сайта в целом.

Третьим этапом является применение технологии AJAX. Технология позволяет пользователю получать нужные ему данные на лету, а страница в целом не обновляется. Это удобно и пользователю, который получает данные на лету и не тратит трафик, и серверу – который обрабатывает меньше запросов. Технология не требует длительной и объемной перестройки кода сайта и может принести от 10% до 100% прироста производительности в высоконагруженных проектах. Эти три этапа возможно производить без затрат на увеличение серверных мощностей – то есть даже на простом, недорогом виртуальном хостинге, и выполнять без изменения бизнес-логики сайта.

Четвертым этапом ускорения сайта является настройка кеширования. Для этого уже потребуется покупка или аренда выделенного приватного сервера (VPS), а, следовательно, и деньги: 25–100$ в месяц. Сама по себе покупка VPS может решить проблему загруженности сервера, однако она не создает хорошего запаса прочности у сайта. Кешировать можно и нужно практически все объекты, страницы и запросы к СУБД, которые часто вызываются. Для этого используется технология Memcached. Кеширование следует применять, если сайт действительно высоконагружен, иначе кеш просто будет терять актуальность раньше чем будет хотя бы раз повторно использован. Прирост скорости подсчитать невозможно даже приблизительно, однако с уверенностью можно сказать, что на порядок быстрее выбрать из быстрой оперативной памяти 1000 раз результаты выполнения сложных запросов, чем 1000 раз их выполнить. Кеширование запросов к базе данных и результатов вывода может создать требуемый запас и позволить обрабатывать до 100 клиентских запросов в секунду даже на одном среднепроизводительном сервере.

Пятым этапом является замена привычных реляционных БД на более быстрые хранилища данных, например быстрый Redis. Хранилища данных показали результаты на порядок быстрее, чем MySQL или PostgreSQL за счет быстрейших атомарных операций с данными, находящимися в оперативной памяти сервера. Также хранилища данных легко расширяются (масштабируются) в будущем на 2 и более серверов. Этап требует полной переработки скриптов сайта и переноса данных из текущей БД без потери данных, а, следовательно, огромных трудозатрат программиста. Однако использование хранилищ данных позволяет пропустить этапы сложной оптимизации СУБД и кеширования результатов выборок с помощью Memcached.

Совмещая все эти технологии, можно с уверенностью сказать, что практически из любого сайта, обрабатывающего в среднем не более 3–4 запросов на генерацию страницы в секунду, можно получить мощный высоконагруженный проект, поддерживающий сотни клиентских запросов в секунду и имеющий возможности легкого и быстрого роста.

Экономия налицо – можно купить (арендовать) 1–2 сервера, вместо 10, обслуживающих то же количество клиентских запросов.

Я считаю, что есть 3 основных пути ускорения сайта. Расположу их в порядке сложности и затратности:

    1. Быстрая и недорогая оптимизация предусматривает только проработку программного кода PHP, оптимизацию запросов к базе данных, настройку кеширования html-шаблонов и технологию AJAX. Этот путь не требует установки (аренды) VPS и является быстрым по времени работы программиста. Структура и логика сайта остается неизменной. Ускорение системы в целом может составить до 500–600%
    2. Более продуктивным этапом является дополнительная настройка кеширования данных в ОЗУ с помощью Memcached. Предварительно также выполняются предыдущие этапы. Этап требует материальных затрат на покупку (аренду) серверных мощностей. Однако и прирост производительности может составить до 5000%
    3. Самым существенным введением в плане производительности является замена реляционной СУБД на более быстрое масштабируемое хранилище данных. Хранилище создает запас прочности для приложения в целом. Это требует практически полного переписывания уже имеющегося кода, изменение логики приложения и значительных человеческих ресурсов, однако прирост производительности может составить до 6500%
Ускорение сайта

Другие статьи автора: