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