Как увеличить количество запросов в секунду Laravel (PHP)?

Добрый день!
Имеется Laravel приложение, в котором реализованы все эндпоинты, база данных PostgresSQL и сервер на 32 ядра, 32 ГБ оперативной памяти. В базе настроена индексация, настроен fpm, но пропускная способность одного запроса со взаимодействием с базой данных - это 32 запроса в секунду, при этом такие показатели как CPU & RAM загруженны на 10-15%

Как увеличить количество запросов в секунду, обработку всех запросов равномерно распределить по ядрам?
  • Вопрос задан
  • 1485 просмотров
Пригласить эксперта
Ответы на вопрос 6
@Alexandre
1) отключить дебаг на продакшене, сильно тормозит, проверено
2) включить OpCacher, кеширование опкодов увеличивает быстродействие
3) сделать профилирование, определить узкие места кода. Как правило это запросы... По оптимизации и профилировании запросов есть много информации в интернете. Большинство людей во фреймворках используют ОРМ. Надо помнить, что ОРМ как правило делает НЕ оптимальные запросы.
4) Может стоит какие-то данные закешировать или вычислить при старте фреймворка.
5) если проблема в вычислениях, то часть кода вынести в отдельный микросервис и написать его на чем-то более быстром, например golang. Это выносится на отдельный url ( роутер) и разруливается nginx location. Это уже крайняк...
6) Могут быть проблемы в самой архитектуре приложения, может что-то стоит вынести в отдельные части (воркеры) и подтягивать AJAX или WebSocket уже после загрузки страницы: по запросу запускаем подзадачу, которая по готовности оповестит страницу и та уже вытянет оставшиеся данные .

как, врач не сможет поставить правильный диагноз, не осмотрев пациента, так и тут, не покрутив ручки, не изучив код и архитектуру нельзя, что либо-правильно посоветовать
Ответ написан
Комментировать
Fragster
@Fragster
помогло? отметь решением!
А очереди к диску? К сети? А вообще нужно найти долгие запросы: https://pgcookbook.ru/article/slow_queries_search.html и проанализировать план их выполнения с помощью чего-нибудь типа https://explain.tensor.ru/
Ответ написан
Комментировать
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Может пора включить кэширование?
Ответ написан
@Samuel_Leonardo
Проверьте сколько времени занимает генерация одного ответа

Если есть проблемы, добавьте промежуточные замеры и определите тяжелые вычисления для оптимизации
общую картину, как и добавить измерения на timeline можно с тем же Debugbar или clockwork,
так же там можно увидеть время запросов к базе

Если с этим все в порядке
Проверьте параметры пула fpm
pm.max_children
pm.start_servers
pm.min_spare_servers
pm.max_spare_servers
Ответ написан
Комментировать
@Alex-M0
Очень хорошо ускоряет OPcache, рекомендую включить и настроить. По БД необходимо смотреть на запросы возможно стоит оптимизировать их, использовать сырые запросы не используя Eloquent. Закэшировать конфигурацию, роуты (php artisan optimize)
Ответ написан
Комментировать
@LaraLover
Как вариант ещё посмотреть в сторону PgBouncer.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы