Я не (очень хороший) разработчик бэкенда, который настолько понимающие процессы и память немного о моем ранге оплаты.
Я в настоящее время создаю приложение с помощью стека MEAN. У меня есть отдельный сервер Экспресса, работающий localhost, который является веб-скребком.
Поток, который я имею, - то, что мое Угловое приложение заключает, что пользовательские данные-> отправляют его в СРЕДНИЙ специальный бэкенд->, маршрут Экспресса отправляет a POST
запросите к моему веб-скребку, затем скребок делает свою вещь (использование requestjs
получить страницу, использование cheerio
загружаться в данных и делает некоторый парсинг HTML).
Процесс очистки может взять некоторое время (до 5 минут), таким образом, я хочу отправить сообщения обновления в браузер. В настоящее время я делаю это:
GET
запросите к моему СРЕДНЕМУ API, прося, чтобы это запросило сообщение обновления от моего веб-скребкаGET
запросите к моему веб-серверу скребкаЭто работает, все же в то время как скребок работает, ответы обновления являются ОЧЕНЬ медленными. Посмотрите ниже для журнала:
Кажется, что мой веб-сервер скребка борется при загрузке из всего запроса 1 пользователя (очищающий приблизительно 1 500 веб-сайтов). Я могу только предположить, что, когда 10, 20, 1 000 пользователей используют сервис затем, все это просто разрушится.
Мой поток полностью неправильно здесь? Я чувствую, что нахожусь в немногим выше моей головы, но я хотел бы изучить и отладить, где мой веб-скребок отстает, и посмотрите то, что я могу сделать для оптимизации его!
Править: Согласно заголовку - действительно ли это - проблема, где я не выделяю достаточно памяти своему серверу Узла/Экспресса или чему-то?
Это старый пост, но я решил, что смогу помочь кому-нибудь с этим сообщением.
Во-первых, снимок экрана - это только ответы сервера парсера, который, с моей точки зрения, не поможет мне ответить, однако, я был там раньше.
Я так понимаю, что ваш парсер node / express и ваше приложение node / express / angular находятся на одном и том же оборудовании / общем сервере (оборудование, а не экземпляр сервера).
Если это так, вы можете запустить 32-битный скребок python и дросселируйте среднюю настройку, если ваш скребок зацикливает запросы и ответы настолько быстро, насколько позволяет провод.
Скорее всего, вы захотите №1 - регистрировать успехи парсера и частоту отказов на разных базовых URL, чтобы убедиться, что вы не попали в черный список. №2 - ждать каждый цикл скребка, пусть даже миллисекунды. # 3 - и это самое главное, пожалуйста, снимите скребок с углового оборудования.
Мы настраиваем 10 виртуальных рабочих столов и 10 физических рабочих столов, на всех запущенных парсерах - и это все, что они делают. Проблема в том, что HTTP-запросы и ответы, а также очистка сайтов (особенно если выполняется асинхронно) будут облагать налогом оборудование и соединение на этой машине. У меня обычно есть веб-приложение, поскольку единственное, что работает на этом сервере, на котором оно находится, базы данных находятся на разных серверах, CDN отдельный, а хранилище документов / изображений даже отличается от этого. Я знаю, что сначала это звучит немного сложно или пугающе, но разделение проблем облегчает отладку узких мест.
Надеюсь, это поможет продвинуться вперед.