Tiger blog

Блог тигра

Как ускорить сайт путём перенастройки сервера

При работе с сайтом, который растет от увеличения количества товаров или трафика с рекламы в скором времени придется перейти в режим работы под названием highload из-за высоких нагрузок на сервер. Но может произойти и такое, что Ваш сайт не растет, а сервер все чаще перегружается с последующей блокировкой данных. Именно с такой проблемой мы столкнулись, пока дорабатывали сайт для интернет-магазина светового оборудования, у которого в ассортименте имеется более 100 тысяч товаров.

Исходная ситуация

Данный проект располагался на сервере, у которого был высокий потенциал ресурсов, чтобы обеспечивать быструю и бесперебойную работу сайта даже при высоких нагрузках. Но происходило так, что сервер не отвечал на действия пользователей либо реагировал с очень большой задержкой при возрастающей посещаемости сайта.

Поиск проблемы

Проведя аудит настроек сервера и сайта, мы разделили работу на 2 этапа: анализ back-end и front-end. При этом удалось выявить низкую скорость загрузки страниц на back-end’e – около 80 секунд на самых популярных страницах. И как следствие, это приводило серьезному снижению конверсии.

Решение

Шаг №1: настройка баз данных.

Первым шагом являлась настройка баз данных MySQL, при этом, не меняя системы хранения и исходя только из доступных источников и нагрузки проекта. Данные действия были направлены на оптимизацию потребления ресурсов оперативной памяти, что в последствии позволило не уходить с сервера в SWAP, когда, исчерпав все свои ресурсы оперативной памяти, он начинал работать из файла подкачки и тормозил работу сайта.

Шаг №2: смена типа хранения на InnoDB.

Причина выбора именно InnoDB.

В InnoDB все данных хранятся в больших файлах, которые используются вместе, в отличие MyISAM, к помощи которого прибегали раннее. В нем для конкретной таблицы создается отдельный файл данных. InnoDB надежно хранит данные, благодаря их блокировке на уровне строки и транзакционности.

У InnoDB есть одно главное преимущество – скорость работы. Делая запрос в базу InnoDB, блокируется только строка, в отличие от MyISAM, где происходит блокировка целой таблицы. Получается так, что пока запрос не выполнится, то никакие другие обращения к таблице или строке будут не осуществимы. Так как строки по объему меньше таблиц, то InnoDB справляется с поставленными задачами лучше.

Помимо всего вышеперечисленного была осуществлена оптимизация работы базы данных InnoDB. К примеру, оптимизации подверглись следующие параметры:

# InnoDB parameters

innodb_file_per_table

innodb_flush_log_at_trx_commit

innodb_flush_method

innodb_buffer_pool_size

innodb_log_file_size

innodb_buffer_pool_instances

innodb_file_format

innodb_locks_unsafe_for_binlog

innodb_autoinc_lock_mode

transaction-isolation

innodb-data-file-path

innodb_log_buffer_size

innodb_io_capacity

innodb_io_capacity_max

innodb_checksum_algorithm

innodb_read_io_threads

innodb_write_io_threads

Предварительные результаты

Благодаря выполнению шагов 1 и 2, количество одновременных соединений с веб-сервером уменьшилось, так как запросы и подключение к базе данных начали быстрее обрабатываться, что снизило нагрузку на оперативную память.

Шаг №3: Перенастройка Nginx и установка модулей кэширования brotli, pagespeed, proxy_buffering.

Nginx представляет собой быстрый и надежный сервер без лишних функций. Уже на протяжении длительного времени Nginx обслуживает таких российских IT-гигантов, как Яндекс, Рамблер  и ВКонтакте. Nginx поддерживает буферизацию (proxy_buffering) и кеширование (proxy_cache), если использовать дополнительные сервера. Этим преимуществом мы и воспользовались.

Не обошлось и без казусов при настройке Nginx. У клиента обычный интернет-магазин товаров, но настройки буферизации, которые нам удалось найти во время аудита, могли сделать его стриминговым сервисом. При значительном уменьшении значения в client_max_body_size, это помогло нам уменьшить объем потребляемой памяти.

Шаг №4: Оптимизация настроек PHP-FPM и Memcache и отключение Apache.

PHP-FPM часто используют в паре с Nginx. Обработкой скриптов занимается PHP-FPM, а Nginx обрабатывает статистические данные. Это позволяет быстрее работать, чем модель Nginx + Apache.

У Apache скорость обработки запросов ниже. К примеру, Apache приходится постоянно считывать несколько конфигурационных файлов на сервере, при этом тратя время и ресурсы системы. По итогу, мы приняли решение отключить Apache, который только потреблял ресурсы, не принося никакой пользы.

Важным моментом стал перевод работы PHP-FPM на unix socket. Сделать это нужно было потому, что Nginx довольно быстрый веб-сервер, который не в состоянии самостоятельно обрабатывать скрипты. Для этого требуется бэкенд в виде PHP-FPM. Для того, чтобы данная связка работала без потери скорости, мы решили использовать unix socket. Это способ подключения к PHP-FPM, который позволяет исключать сетевые запросы и дает заметный прирост в скорости работы сайта.

Результаты работ

  1. Благодаря вышеперечисленным действиям, время отклика главной страницы снизилось с 24 секунд до 3, а внутренних – до 5.
  2. Потребление ресурсов сервера уменьшилось.
  3. Сервер стабилизировался – зависания прекратились.
  4. Увеличилась глубина просмотров на 30%, что смогло дать улучшение в SEO и в последующих продажах: рост поведенческих показателей → рост позиции сайта в выдаче → рост трафика → рост продаж.
  5. Для клиента были написаны рекомендации по оптимизации front-end части сайта для ускорения работы ресурса.

    Например:
  • Оптимизация графиков и настройка выдачи изображений в формате webp;
  • Настройка lazyload – загрузки данных;
  • Вынос всех некритических для отображения страницы скриптов в конец страницы.

Вывод

У нас удалось ускорить сайт и устранить проблемы с его загрузкой, не меняя код. Скорость сайта влияет на многие показатели: начиная удобством пользователей и оканчивая ранжированием сайта в поиске, что значительно сказывается на конверсии.

tiger blog
блог тигра
Все статьи
Начнем охоту
Нацарапайте свои контакты, мы свяжемся с вами в ближайшее время.
Ваше имя
Телефон
Царапнуть заявку
Нажимая на кнопку «Царапнуть заявку», вы соглашаетесь с правилами сайта.
T i g e r
h u n t i n g