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

Я не (очень хороший) разработчик бэкенда, который настолько понимающие процессы и память немного о моем ранге оплаты.

Я в настоящее время создаю приложение с помощью стека MEAN. У меня есть отдельный сервер Экспресса, работающий localhost, который является веб-скребком.

Поток, который я имею, - то, что мое Угловое приложение заключает, что пользовательские данные-> отправляют его в СРЕДНИЙ специальный бэкенд->, маршрут Экспресса отправляет a POST запросите к моему веб-скребку, затем скребок делает свою вещь (использование requestjs получить страницу, использование cheerio загружаться в данных и делает некоторый парсинг HTML).

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

  1. Каждые 5 секунд браузер отправляет a GET запросите к моему СРЕДНЕМУ API, прося, чтобы это запросило сообщение обновления от моего веб-скребка
  2. СРЕДНИЙ API отправляет a GET запросите к моему веб-серверу скребка
  3. Веб-сервер скребка проверяет прогресс (просто локальная переменная, которая используется в функции).

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

Node Console Log

Кажется, что мой веб-сервер скребка борется при загрузке из всего запроса 1 пользователя (очищающий приблизительно 1 500 веб-сайтов). Я могу только предположить, что, когда 10, 20, 1 000 пользователей используют сервис затем, все это просто разрушится.

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

Править: Согласно заголовку - действительно ли это - проблема, где я не выделяю достаточно памяти своему серверу Узла/Экспресса или чему-то?

0
задан 29 August 2015 в 16:00
1 ответ

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

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

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

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

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

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

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

0
ответ дан 5 December 2019 в 12:10

Теги

Похожие вопросы