Черная пятница уже скоро, а там  и кибер понедельник не за горами, а Вы до сих пор не уверены переживет Ваш магазин наплыв посетителей? Нужно действовать уже сегодня. Конечно мы можем предложить миграцию на микросервисную инфраструктуру, в облако или другой вариант, но за день его не реализовать. Поэтому мы расскажем, что можно сделать быстро уже сегодня для оптимизации интернет магазина. Рассмотрим классический вариант работы сайта на nginx, apache, mysql, php и подготовим его к нагрузке.

1. Анализ инфраструктуры и мониторинг

Что бы оптимизировать инфраструктуру нужно следить хотя бы за базовыми показателями работы системы (память, ввод-вывод, ЦПУ, канал и т.п.) иначе оптимизация будет производится наугад.

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

Таким образом, собирая статистику можно будет понять какая часть нуждается в оптимизации. А также минимизировать отказ в обслуживании, и выдавать информационные сообщения в случае окончания ресурсов.

Как реализовать. Проще всего использовать open source решение zabbix, которое позволит получать оперативную статистику, графики и системные показатели. Систем мониторинга множество, выбирайте что по душе и по функциональности. Если не хотите заморачиваться с установкой мониторинга можно использовать онлайн решение, но за них приведется платить, например okmetr.

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

2. Нагрузка

Мониторинг настроили теперь можно его и потестить. Проведите нагрузочное тестирование. Можно использовать разные системы для решения такой задачи, например простенькое ab или более функциональное Apache JMeter.

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

3. Просмотрите статистику

Например, Вы увидите, что все запросы обслуживает Apache. Да не удивляйтесь такое действительно бывает, тогда вам нужно срочно добавить перед ним фронтенд, самый популярный и легковесный это nginx, он поможет выполнить более быструю отдачу статики.

Изучите логи apache, возможно не вся статика отдается nginx, это приводит к тому, что растет число процессов апача и может приблизится к лимиту MaxClients. Обратите внимание и на тот момент, несмотря на хороший пропускной канал и доступные ресурсы, графику все же лучше оптимизировать и уменьшить js/css файлы. Выявить такие проблемы можно с помощью Google PageSpeed Insights.

4.Поиск узких мест

Нужно найти проблемы в работе веб приложения. Легкий путь использовать триал версию New Realic (недели), необходимо установить клиента на веб сервер для сбора статистики. Желательно сделать заранее, но если времени в обрез можно провести нагрузочное тестирование, для получения данных для анализа.

Здесь нужно искать медленные и часто повторяющиеся транзакции. И разобраться, если это обращение к внешнему серверису, постараться отказаться от него, или кешировать запросы, если sql- то нужно разбираться с БД.

5. Оптимизация веб сервера

Есть методы, которые помогут ускорить работу веб сервера. Например, использование PHP акселератора, они помогают кешировать скомпилированный код. Для PHP5.x можно использовать APC, для более новых версий PHP 7.х — opcache. Не забываем не только включить акселератор, но и настроить его. Поработайте над конфигом php, кэширование файлов сессий в файлы не добавить вам производительности, попробуйте использовать memcached для этих целей.

Можно и радикально решить вопрос с оптимизацией, кэшировать страницы. Обратите внимание, что такое актуально для страниц, которые редко изменяются. Такой кэш можно включить в nginx, но лучше использовать для этого Varnish HTTP Cache.

6. Ускоряем БД

Оптимизировать БД можно по двум направления: подбор оптимальных параметров сервера БД и оптимизация схем и запросов.

В первом случае работа для администратора, настроить буферы и глобальные настройки верно.

Во втором, для начала необходимо отследить медленные запросы или использовать new realic как говорилось выше для выявления проблем. Бывает, так что добавив несколько индексов, проблема тут же исчезает.

Можно еще кэшировать результаты sql запросов, которые выполняют часто или сложные операции.

7. Оптимизировать cms

Если Вы используете стандартные фреймворки или популярные движки, то в сети можно найти «бест практик» для оптимальной настройки. Такие рекомендации могут содержать важную информацию как настроить сам движок или инфраструктуру для его быстрой работы.

8. Обновить железо

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

9.Заглушка

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

10. Обратитесь к профессионалам

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

Обращайтесь к нам [email protected], наши администраторы помогут вам справится с высокой нагрузкой и получить максимум прибыли.