Ваш сайт растёт, увеличивается объем продаж, добавляются новые товары, реклама приносит больше трафика, все это очень хорошо, но в один момент сайт может перестать работать, это связано с перегрузкой сервера. Что бы этого не произошло, заранее нужно мониторить скорость работы сайта и всеми средствами оптимизировать её.

Пример. Имеем интернет магазин с более 100000 товаров, железо изначально запланировано под высокую нагрузку, но сайт в один момент стал тормозить или не отвечать совсем.

Ищем проблему

Изучаем настройки сервера, этот этап разделим на два под этапа: аудит бэкенд и фронтэнд частей. Выявили скорость загрузки страниц снижена на бэкенде, около 80 секунд на популярных страницах. Как результат можно получить снижение продаж.

Определяем причину замедления: не оптимальные настройки БД и кэширование. В итоге провели несколько шагов и решили проблему.

Решение

1.Настройка БД

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

2. Изменения типа данных на InnoDB

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

У InnoDB значительно быстрее в за счет блокировки только строки, а не как в MyISAM всей таблицы. Когда запрос выполняется, все остальные транзакции ждут освобождения строки, а в случае с MyISAM таблицы. Логично, строка меньше таблицы, соответственно работы идет быстрее. Для 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

 

скорость загрузки сайта

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

3. Настройка Nginx и кеширования

Nginx один из самых популярных веб серверов, за счет своей простоты, надежности и скорости работы. Nginx используют Яндекс, Mail.ru, Вконтакте и другие компании. Nginx умеет работать с буферизацией (proxy_buffering) и кешированием proxy_cache). Мы также будем использовать эти возможности. В настройках сервера было установлено значение client_max_body_size как для стримингового сервиса, а не интернет магазина, изменение этого значения привело к уменьшению использования памяти.

оптимизация производительности сайта

4. Переход на PPH-FPM с Apache

Nginx обрабатывает скрипты, а статику обрабатывает PHP-FPM. В такой связке работа быстрее чем Nginx+Apache. Apache медленее, ему необходимо каждый раз, считывать конф. файлы, используя для этого системные ресурсы.

Nginx — быстрый веб сервер, но он нуждается в бэкенде, для этого мы установили PHP-FPM. Установив и настроев PHP-FPM на работу через сокеты unix socket, сайт стал работать еще быстрее.

Результат

Главная страница стала грузиться за 3 секунду, вместо 24, а внутренние до 8 сек.

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

Уменьшение потребления ресурсов

Стабильная работа без зависаний

Быстро работающий сайт, дал увеличение глубины просмотров, в следствии рост продаж.

Если Вы хотите ускорить работу вашего сайта, обращайтесь наши специалисты помогут вам [email protected]