Я разрабатываю веб-сайт для очистки, чтобы найти доступные рестораны доставки. Веб-сайт выполняет поиск на самых популярных порталах доставки и показывает результат, агрегированный на одной странице.Scale web scraping site with node.js
Сайт размещен на Heroku с 4 динамиками.
http://deliveria.net/#05409-002
Когда пользователь делает запрос на веб-сайте, он делает около 30 HTTP запросов для получения результата.
Проблема заключается в производительности, запросы не быстрые, и каждый поиск может сделать 30 из них, блокируя приложение во время выполнения поиска для одного пользователя.
Я попытался увеличить Heroku динамометрические стенды:
heroku scale web=10
И я не чувствую ощутимое усиление.
Каков наилучший подход к масштабированию такого приложения?
(я не могу использовать кэш-память, как поиски должны быть в режиме реального времени)
Текущий стек:
- Heroku
- Node.js
- выразить
- запрос модуль
- EJS
- Pusher
- Redis
Я попробовал socket.io раньше, но он не очень хорошо работал на героку, теперь я использую Pusher, чтобы дать пользователям ответ как можно скорее. О рабочих ... Это может быть хорошей идеей, я могу создать рабочих для веб-соскабливания и поддерживать основной дино только для Интернета. Tks. –
Да, это самое главное. Если вы просто создадите основное приложение, вы не почувствуете улучшения. Нерезидентные работники для этого обеспечат лучшую производительность и не будут блокировать ваше основное приложение. – alessioalex
Как я могу ping (ajax call) рабочий на Heroku? Могу ли я запустить экспресс-сервер у рабочего? Будет ли это видно? Я использую толкатель. Теперь, когда пользователь отправляет запрос на поиск, браузер ping (совершает вызов ajax), чтобы выразить, тогда приложение начинает отправлять сообщения на канал/событие (частный чат).Пользовательский браузер прослушивает один и тот же канал/событие. Мне нужно перенаправить этот «пинг» на рабочего, это возможно? –