Как избежать перегрузки node js?

У меня есть телеграм бот, при вводе команды он может думать секунд 10 из-за того, что на сервере в этот момент может обрабатываться несколько тысяч объектов. В файле бот подключен через require.
file.js <- тут обработка тысяч объектов и тут же подключен бот, чтобы отсылать сообщения.
  • Вопрос задан
  • 1622 просмотра
Пригласить эксперта
Ответы на вопрос 7
Epsiloncool
@Epsiloncool
Программер, веб-девелопер, гейм-девелопер
Обработку объектов (если она фоновая) вынести в отдельный поток. Если не фоновая - серьёзно думать над архитектурой.
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Нужно создать асинхронную архитектуру.
Ответ написан
ovalenko
@ovalenko
O mne
Для запуска Node используйте PM2

В конфигурации важные параметры:
"instances": "max" - максимальное число потоков;
"exec_mode": "cluster" - работа в кластере;
"node_args": "--max-old-space-size=512" - ограничение памяти, чтобы Node не выходил за ее пределы.
Ответ написан
megafax
@megafax
web-программист
Учим мат часть. NodeJS выполняется в event-loop, что предполагает под собой некую однопоточность с "разрывами" и составление очередей обработки. Если Вы не делаете прерывания - то у Вас долго выполняется какая либо операция - значит Вы неправильно используете nodejs - он не предназначен для выполнения ресурсоемкий задач в ощем потоке. Если же у Вас превышает очередь выполнения критический для бизнес-логики уровень - тогда Вам необходимо распараллеливать обработку входящих сообщений. А для контроля этого всего - использовать очереди сообщений, организованные на любом ПО (хоть та же нода / редис / рабит / натс). Вам же нужно выяснить где у Вас узкое место из вышесказанного
Ответ написан
@AntowaKartowa
PM2 --- инструмент который позволяет запускать несколько экземпляров приложения, какая-то базовая система балансирования нагрузки.

Для работы со сторонними сервисами с которыми может возникнуть задержки и фейлы выделяют в отдельные процессы (воркеры). А иногда не только те что работают со сторонними сервисами. В общем есть воркер который просто принимает какие-то запросы и помещает их в очередь. За очередью следят другие воркеры каждый со своей специализацией, функционалом и достают задачи из очереди и обрабатывают их. Если воркер упал, то задача возвращается в очередь, вокрер перезапускается. Но основной сервис от этого не падает и вообще на него это не влияет. Организовываются очереди обработки например с помощью инструмента RabbitMQ
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы