Ваш сайт растёт, увеличивается объем продаж, добавляются новые товары, реклама приносит больше трафика, все это очень хорошо, но в один момент сайт может перестать работать, это связано с перегрузкой сервера. Что бы этого не произошло, заранее нужно мониторить скорость работы сайта и всеми средствами оптимизировать её.
Пример. Имеем интернет магазин с более 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].