Долгосрочные запросы в nodejs - PullRequest
0 голосов
/ 17 марта 2020

Мне было интересно, есть ли хорошая практика, как использовать долгосрочные запросы в nodejs? Я использую Express. js и мне было интересно, есть ли какой-нибудь способ, я не знаю, переместить один из express запросов в другой экземпляр узла или что-то еще?

Причина, по которой меня интересует, заключается в том, что если сильно использовать процессор, блокируя в то же время событие l oop в узле. Основная проблема заключается в том, что сначала я выбираю некоторые данные, затем вычисляю и вставляю недостающие данные в БД, затем извлекаю другие данные в зависимости от результата, а затем снова вычисляю и обновляю другие данные в БД.

У меня есть не заметил этой проблемы, так как пока я был единственным, кто использовал этот запрос. Но сейчас я тестирую его с другими пользователями, и если немногие из них используют этот запрос, все приложение останавливается на несколько секунд. И на моих инструментах мониторинга я вижу огромное использование процессора (100% -200% lol)

Так что я пробовал кластеризацию, но, похоже, она не работает. Я использовал pm2 и запустил приложение на всех ядрах моего процессора. Из-за сложности моего алгоритма я пытался переместить несколько функций в рабочие потоки, но похоже, что эти потоки будут использоваться очень и очень часто, и я боюсь сбить весь экземпляр узла.

Я понятия не имею, какое решение было бы лучшим, и не знаю, есть ли какие-нибудь хорошие инструменты для Express, которые помогли бы мне разгрузить / использовать эти запросы? Я еще не погрузился в разделение, но, похоже, это может сработать. Кто-нибудь использовал это для более крупных проектов и знает, может ли это быть решением для распределения одного запроса на несколько тиков?

А как насчет очереди заданий, как Bull или Kue? Было бы хорошей идеей поместить эти задачи в очередь? Я никогда не использовал такие инструменты, и я спрашиваю, поскольку я понятия не имею, имеет ли это смысл.

Приветствия

1 Ответ

1 голос
/ 17 марта 2020

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

И вам нужно выполнить расчет и вставить недостающие данные, используя службу очереди. bee-queue хороший вариант.

Используйте redis с bee-queue для ускорения фоновых заданий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...