приложение , которое тянет с файла скажем так id , и по этим id делает реквесты, там происходят еще некоторые действия и по ссылке которая вытянулась с 1-го реквеста, делается теперь 2-й реквест, всё вроде нормально работает, ну из-за большего количество id, уже не хватает однопоточной мощности, чтоб обработать все id , решил я тут использовать clusterы , кластерами пользовался мало, и пока не особо могу понять как мне решить мою проблему, я так понимаю моё мини приложение нужно require в cluster.isWorker верно? ну тогда моё приложение выполняет код количество раз эквивалентное количеству ядер, И все таки хотел бы узнать как мне правильно сделать, чтоб кластеризовать своё мини приложение, дабы разбить выполнение приложением на воркеры,чтоб обработать большее количество id. Заранее спасибо
1. как поняли что уперлись в однопоточную мощность? какое там количество ID? 2. как реквесты делаются? 3. эту операцию нужно чем быстрее сделать? или +- 10 сек не играют роли?
это текстовые файлы, которые создержат урлы или id для урлов?
1) ну грубо говоря на один id выполняется 2 реквеста , после 50 id оно либо зависает, либо выдает ошибку связанную с памятью. Да и в целом очень долго выполняет эти 50 id 2) реквесты выполняется через модуль request 3) ну думаю чем быстрее чем лучше, я пока на тесте проверяю 100-200-300 , ну по итогу нужно будет свыше 5000.
в текстовом файле содержаться только id , я просто их потом подставляю все, реквест на один хост, только id меняются
request deprecated
тут смотря что отдают эти запросы - обычный html или тяжелые файлы
50 запросов должны думаю где то до 10 сек выполнится если нет проблем на хосте удаленном покажите код
1-й реквест отдаёт ссылку, при помощи cheerio, 2-й отдаёт n-ое количесто строк, от 1 до 2000 +-
Ну они то и выполняются секунд 10, ну мне нужно допустим на 1000 id запросы, и тут уже без кластеров никак не справится , поэтому и прошу совета как правильно реализовать
Попробуйте child_process. Воркеры с очередями может быть оверкилл для вашей задачи
> cheerio Вот и найдена проблема. )
> нужно будет свыше 5000. Какой канал, какой размер страницы?
как вариант n-ное кол-во id складывать в отдельный файл, создавать новый процесс и в нем обрабатывать этот файл
Я думал над этим чтоб разбивать файл на 4 части, и чтоб каждый воркер выполнял 1/4 часть файла, ну пока не до конца понял как это реализовать
мне всё таки нужно попытаться реализовать это на кластерах
лучше совать по отдельным файла и блокировать файл после обработки удалять файл
Вы имеете ввиду, что допустим есть 1000 id , оно допустим брало 1-е 100 записало в другой файл , обработало и удалило файл, и потом так же с остальными*
думаю из 1000 id создавало 10 файлов и каждый поток будет брать свой файл только лучше поискать утечку памяти в проге
разобраться еще как это бы найти , ладно пока и на этом спасибо, дальше гугл)
ключевые слова node js memory leak
const memoryUsage = process.memoryUsage(); console.log('Memory:'); for (let key in memoryUsage) { console.log(`${key} ${Math.round(memoryUsage[key] / 1024 / 1024 * 100) / 100} MB`); }
Спасибо, это оно должно быть в конце моего приложения?
В каждой итерации
А что с cheerio не так?
Если не считать производительности и синтаксиса, то всё нормально.
Как раз с синтаксисом там все норм, хорошая поддержка селекторов, есть тонкости с итерацией, но это прямо в доке сразу указано
Ну тут на любителя. Мне jquery-синтаксис не кажется нормальным. Особенно с оборачиванием постоянно элементов в $().
Не знаю как у вас, но я один раз когда чирио юзал очень сильно намучился, нужно было пройтись по html таблице , и в доке и в гугле 100 способов это сделать, и я так и не смог ничего толкового из этого получить
Обсуждают сегодня