Dasihub
@Dasihub

Как Node js сможет обрабатывать огромный поток данных?

Добрый день, я frontend разработчик. У меня несколько вопросов
1. Node js однопоточный, использует асинхронную модель ввода/вывода (I/O) и событийный цикл для обработки запросов. Представим такой сценарий есть клиентский часть. Одновременно 10 тыс пользователи делают запрос на node js с огромным массив данных и node js нужно обработать, сделать запрос на базу данных чтобы сохранить данные каждого пользователя. С помощью перебора каждого элемента и сохранить на базу данных, но так как JavaScrtipt однопоточный он может заблокировать поток к примеру в браузере если в консоль запустить вот такой цикл
for (let i = 0; i < 99999999999999; i++) {
    console.log(i)
}
, то браузер заблокирует поток пока не закончится цикл и вовсе может сайт упасть. То как node js со своим однопоточным может обработать такие сложные запросы?

2. Память. Я недавно написал CRUD приложение на nest js. Собрал сервер в docker и вижу что image достигла больше 1 гигабайта памяти, тот же java достигает всего лишь 500 мегабайтов. Почему node js сжирает много памяти?

3. Сможет ли node js хорошо справится с работой сокетом?
  • Вопрос задан
  • 102 просмотра
Решения вопроса 1
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
Как Node js сможет обрабатывать огромный поток данных?

Вот так: https://nodejs.org/api/cluster.html - в документации все есть. Кроме того, рекомендую изучить работу событийной петли в ноде.

2. Память. Я недавно написал CRUD приложение на nest js. Собрал сервер в docker и вижу что image достигла больше 1 гигабайта памяти, тот же java достигает всего лишь 500 мегабайтов. Почему node js сжирает много памяти?

Потому что это вы измеряли память занятую докером, а измерять надо память потребляемую самой нодой. Есть специальные инструменты, которые позволяют делать более точное профилирование работы приложений - используйте их. Кроме того, затраты памяти зависят в первую очередь от кода: если вы/фреймоворк/либа какая-то там на каждый коннект создаете/создает сотни объектов с сотнями килобайт данных в них и оно остается в памяти, то чего удивляться расходу памяти?

Сможет ли node js хорошо справится с работой сокетом?

Да, сможет великолепно справится. И уже давно справляется. IO в ноде сделан качественно. Если надо максимально производительный http/ws сервер, то смотрите в сторону uWebSocket (http + ws).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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