Задать вопрос
PankovAlxndr
@PankovAlxndr
Fullstack web developer

Обработка 445 задач в секунду на Laravel?

На работе поручили написать некий сервис, который будет общаться по api с другим, более крупным сервисом и делать какую-то работу.
стек php8.2 + laravel10 + mysql + redis
Сказано что разрабатываю MVP, но есть определенные требования.
а именно спроектировать так, чтобы система держала обработку 1.000 пользователей.

Вообще суть сервиса такая: клиент заполняет какие-то данные, далее сервис раз в 3 минуты ползает куда-то, что-то проверяет, перезаписывает и сохранят историю, где, что и как он поменял. все.

Так вот, я начал считать, и выяснил, что для 1000 пользователей мне понадобится обрабатывать 445 задач за 1 секунду.
Математика такая: 1000 пользователей у каждого по 80 заданий, каждое из который нужно раз в 3 минуты обрабатывать (1000 * 80) / (3 * 60) = 444.444, округляем и получаем 445 бизнес транзакций.

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

В поем понимании это хайлоад, не сталкивался с таким, прошу помощи, подскажите как мне встроить такой процесс, какие технологии и для чего использовать. Какие проблемы ожидать.
Я пока не приложу ума как писать в mysql 445+ данных в секунду..

Сейчас я на локалке запрограммировал бизнес-логику, поднял в докере редис, настроил очередь на работу с редисом (ларавел из коробки), поднял супервизор. Какие-то копеечные данных, которые "пушу" в очередь руками обрабатываются корректно, быстро, но это совсем не 445 в секунду, у меня оперативки столько нет на компе,..
Не могу понять что будет в боевом режиме и как это мониторить, прогнозировать?

Разделил базы на 2, первая для бизнес-моделей (для юзеров, их настроек) вторая для истории, как раз во вторую в максимальной нагрузке ожидается 445 записей в секунду.

В общем, дайте пожалуйста совет, может статьи, ютуб, технологии, как встраивать такую систему на приведенном выше стеке?
  • Вопрос задан
  • 472 просмотра
Подписаться 3 Средний 9 комментариев
Пригласить эксперта
Ответы на вопрос 1
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
Очевидно обработку делать в фоне, используем очереди (queue), можно в том же redis.
Дальше простая математика, например:
Если одна задача из очереди обрабатывается в среднем за 0.5 секунд то вам понадобится минимум 222 обработчика очереди чтобы успевать обрабатывать 445 задач в секунду
Каждый обработчик требует ресурсы сервера (CPU, RAM) и исходя из этого уже можно обозначить требования к машине где это будет крутиться
Желательно БД сервер и redis сервер запускать на отдельных машинах чтобы нагрузка от них не мешала работе приложения.
Ответ написан
Ваш ответ на вопрос

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

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