Необходимо выполнять множество параллельных запросов. Сейчас вся реализация держится на php multicurl, но к сожалению с переходом на ssl пришлось уменьшить кол-во запросов т.к. время ответа сильно увеличилось (даже с отключенной верификацией сертификатов). Так же не устраивает нагрузка на CPU. В качестве теста набросал небольшой аналог на Node.js. Скорость получения страниц заметно порадовала, но прежде чем переписывать систему хотел бы услышать несколько советов.
Какую технологию и язык для этого лучше выбрать. Важны скорость получения страниц, потребление CPU и памяти при разборе DOM, но возможно разделение на загрузку и разбор в разных приложениях. На вскидку из потенциальных кандидатов мне близки node.js, python, perl. Смотрел Erlang, но он показался слишком непривычным, стоит ли пытаться новичку? Что еще посоветуете?
Node.js должна идеально подойти судя по описанию. С другими языками не думаю, что будет лучше. Может быть, так же, но не лучше. Тем более раз вы уже что-то писали на ноде, то зачем переходить на что-то еще.
На php отлично подходит реализация через асинхронный фреймворк ReactPHP. Однако, не факт, что это решение вам подойдет, т.к. я не знаю баланса между кол-вом соединений и ресурсоёмкостью парсера в вашем случае.
Я в недавнем прошлом баловался с такой задачей, можно посмотреть мой форк тут https://github.com/kryoz/homer
Принципиально есть два способа
1) парллельно в несколько воркеров
python-rq, celery
2) асинхронно
aiohttp, twisted
node.js тоже подойдет, но на нем довольно плохо с библиотеками для парсинга html/xml, т.е. у них либо интрефейс корявый, либо большая нагрузка на CPU, т.к. написаны на голом JS
multicurl плохое решение, т.к multicurl завершается когда завершатся все параллельные запросы.
Думаю что тормоза у Вас именно из за этого.
Попробуйте использовать форки вместо этого.
У нас много всяких историй по парсерам, внешним апи - и скорее ляжет чужой сервер, чем мы упремся в процессор.
Go получше будет чем Node.js не мало встречал статей на эту тему но если смотреть что есть лучше GO то это два языка Rust и Haskell но Rust будет лучше и свежей. Все сравнения вычитывал из статей, но передать сюда вряд ли смогу.
Что выбрать вам, выбирать вам, мы лишь можем подсказать что попробовать
Go думаю будет проще для изучения