Назад | Перейти на главную страницу

Как выделить больше ресурсов процессу Node.JS?

Я не очень (очень хороший) back-end разработчик, поэтому понимание процессов и памяти немного влияет на мою оценку.

В настоящее время я создаю приложение с использованием стека MEAN. У меня есть отдельный сервер Express, работающий на локальном хосте, который представляет собой парсер.

Поток, который у меня есть, заключается в том, что мое приложение Angular собирает данные пользователей -> отправляет их в бэкэнд MEAN express -> маршрут Express отправляет POST запрос к моему парсеру, тогда парсер сделает свое дело (использует requestjs чтобы получить страницу, использует cheerio для загрузки данных и некоторого анализа HTML).

Процесс очистки может занять некоторое время (до 5 минут), поэтому я хочу отправлять сообщения об обновлении в браузер. В настоящее время я делаю это:

  1. Каждые 5 секунд браузер отправляет GET запрос к моему MEAN API с просьбой запросить сообщение об обновлении от моего парсера
  2. MEAN API отправляет GET запрос к моему серверу парсера
  3. Сервер веб-парсера проверяет прогресс (только локальная переменная, которая используется в функции).

Это работает, но пока работает парсер, ответы на обновления ОЧЕНЬ медленные. См. Журнал ниже:

Похоже, мой сервер веб-парсера испытывает трудности при загрузке всего из-за запроса одного пользователя (очищая около 1500 веб-сайтов). Я могу только представить, что когда 10, 20, 1000 пользователей используют сервис, все это просто рухнет.

Мой поток здесь совершенно неправильный? Я чувствую, что немного не в себе, но я хотел бы узнать и отладить, где мой парсер отстает, и посмотреть, что я могу сделать, чтобы его оптимизировать!

РЕДАКТИРОВАТЬ: Согласно названию - это проблема, когда я не выделяю достаточно памяти для моего сервера Node / Express или что-то в этом роде?

Это старый пост, но я подумал, что могу помочь кому-нибудь с этим постом.

Во-первых, снимок экрана - это только ответы сервера парсера, который, с моей точки зрения, не поможет, но я был там раньше.

Я предполагаю, что ваш узел / экспресс-скребок и ваше приложение node / express / angular находятся на одном оборудовании / общем сервере (оборудование, а не экземпляр сервера).

Если это так, вы можете запустить 32-битный скребок python и отрегулировать среднюю настройку, если ваш скребок зацикливает запросы и ответы так быстро, насколько позволяет провод.

Скорее всего, вы захотите сделать № 1 - регистрировать успешность и количество отказов парсера на разных базовых URL-адресах, чтобы убедиться, что вы не попали в черный список. # 2 - ждать каждый цикл скребка, пусть даже миллисекунды. # 3 - и это самое главное, пожалуйста, снимите скребок с углового оборудования.

Мы устанавливаем 10 виртуальных рабочих столов и 10 физических рабочих столов, на всех запущенных парсерах - и это все, что они делают. Проблема заключается в том, что HTTP-запросы и ответы, а также очистка сайтов (особенно если выполняется асинхронно) будут облагать налогом оборудование и соединение на этой машине. У меня обычно есть веб-приложение, поскольку единственное, что работает на этом сервере, на котором оно находится, базы данных находятся на разных серверах, CDN отдельный, а хранилище документов / изображений даже отличается от этого. Я знаю, что сначала это звучит немного сложно или пугающе, но разделение проблем облегчает отладку узких мест.

Надеюсь, это поможет продвинуться вперед.