Node.JS Уменьшите нагрузку на процессор, когда слушатель получает много событий - PullRequest
5 голосов
/ 08 января 2020
Приложение

My Node.js имеет 3 прослушивателя событий, которые получают в общей сложности 5-10 тыс. Событий каждую секунду. Эти функции прослушивания включают отправку запросов INSERT в базу данных PostgreSQL. Например,

foo.on('msg', data => sequelize.create(some_processing(data)));

При запуске приложения узла на облачном сервере с 1 виртуальным ЦП и 1 ГБ ОЗУ загрузка сервера почти всегда составляет 100%. Через некоторое время ORM будет жаловаться на истечение времени ожидания соединения. Я предполагаю, что вызовы функций ставятся в очередь до тех пор, пока для выполнения запроса к базе данных не потребуется больше времени ожидания.

Вопрос: Блокируют ли функции прослушивателя? Если да, то поможет ли это снизить нагрузку на процессор, сделав его асинхронным вызовом fire-and-foreget, и как это можно сделать?

Для моей цели нормально вставлять данные не по порядку поскольку каждая вставленная строка имеет временную метку.

Запуск node.js приложения на первом сервере

  • узел v12.14.0
  • Ubuntu 18.04
  • 1 vCPU, 1 ГБ оперативной памяти, 4 ГБ подкачки, SSD

Работает PostgreSQL на секунду сервер

  • PostgreSQL 11,5
  • сервер Ubuntu 18.04
  • 1 vCPU, 1 ГБ оперативной памяти, 4 ГБ подкачки, SSD

Спасибо!

...