

Оптимизация
произво-
дительности
Заставим твой сайт работать быстро!
Оптимизация производительности
Заставим твой сайт работать быстро!
Диагностика - бесплатно
Нужна оптимизация, пиши нам в Телеграм
Услуги по оптимизации

Базы данных MySQL, PostgreSQL
Чаще всего приложения падают из-за высокой нагрузки на базу данных, ведь именно из нее каждый раз приложение достает всю нужную для интерфейса информацию. Чтобы ее убрать, нужно оптимизировать запросы и добавить индексы в Базу Данных.

Утечки памяти
Или memory leaks. Возникают из-за неправильно написанного кода, который в результате своей работы съедает много опреативной памяти и/или ресурсов процессора.
Найдем и поправим кривой алгоритм, чтобы устранить утечку.

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

Очереди
Тяжелые задачи или задачи связанные с работой других сервисов, которые нужны для работы приложения в реальном времени, лучше перенести в очередь.
Даже если они не сильно нагружают приложение, то они увеличивают время ожидания пользователя, а пользователи ждать не любят.
Что это могут быть за задачи: отправка триггерного письма пользователю через сервис рассылок или передача заказа из магазина в 1С.
Задачи в очереди выполняются в порядке их поступления. Если что-то пошло не так, например сторонний сервис не ответил на наш запрос - задачу можно повторить несколько раз, прежде чем залогировать ошибку. Они выполняются параллельно работе основного приложения и поэтому не влияют на время ожидания пользователя.

Задачи на Cron
Тяжелые задачи можно выполнять по расписанию не трогая сам веб-сервер, а напрямую обращаясь к интерпретатору.
Это подходит не для всех задач, а только для тех, которые можно отложить и от которых не зависит работа приложения в реальном времени.
Задачи на Cron можно объединить с очередями, если требуются частые запуски и время обработки варьируется.

Тюнинг сервера
Когда-то приложение было маленькое и его развернули с настройками по-умолчанию. Что правильно. Потому что и мощности сервера были ограничены.
Если приложение обросло посетителями и нагрузкой, то нужно поправить настройки самого стека: например количество соединений, которые может единовременно поддерживать веб-сервер или сколько памяти может использовать База Данных для кеширования запросов.
Ты можешь купить дополнительную память или процессоры в облаке, а они не будут использоваться, потому что в конфигах прописаны старые настройки.
Технологический стек
- PHP (включая Laravel, Symfony и другие фреймворки
- Базы данных MySQL и PostgreSQL
- Задачи для Cron на PHP или Python
- Кеширование в Redis, в некоторых случаях – файловое кеширование
- Очереди с использованием баз данных, Redis или RabbitMQ