Graid
@Graid

На чем выполнять множество параллельных запросов?

Необходимо выполнять множество параллельных запросов. Сейчас вся реализация держится на php multicurl, но к сожалению с переходом на ssl пришлось уменьшить кол-во запросов т.к. время ответа сильно увеличилось (даже с отключенной верификацией сертификатов). Так же не устраивает нагрузка на CPU. В качестве теста набросал небольшой аналог на Node.js. Скорость получения страниц заметно порадовала, но прежде чем переписывать систему хотел бы услышать несколько советов.
Какую технологию и язык для этого лучше выбрать. Важны скорость получения страниц, потребление CPU и памяти при разборе DOM, но возможно разделение на загрузку и разбор в разных приложениях. На вскидку из потенциальных кандидатов мне близки node.js, python, perl. Смотрел Erlang, но он показался слишком непривычным, стоит ли пытаться новичку? Что еще посоветуете?
  • Вопрос задан
  • 1532 просмотра
Решения вопроса 1
mr_T
@mr_T
Web-разработчик
Node.js должна идеально подойти судя по описанию. С другими языками не думаю, что будет лучше. Может быть, так же, но не лучше. Тем более раз вы уже что-то писали на ноде, то зачем переходить на что-то еще.
Ответ написан
Пригласить эксперта
Ответы на вопрос 7
mututunus
@mututunus
Backend developer (Python, Golang)
begemot_sun
@begemot_sun
Программист в душе.
На Erlang конечно.
Ответ написан
akubintsev
@akubintsev
Опытный backend разработчик
На php отлично подходит реализация через асинхронный фреймворк ReactPHP. Однако, не факт, что это решение вам подойдет, т.к. я не знаю баланса между кол-вом соединений и ресурсоёмкостью парсера в вашем случае.
Я в недавнем прошлом баловался с такой задачей, можно посмотреть мой форк тут https://github.com/kryoz/homer
Ответ написан
un1t
@un1t
Принципиально есть два способа
1) парллельно в несколько воркеров
python-rq, celery
2) асинхронно
aiohttp, twisted

node.js тоже подойдет, но на нем довольно плохо с библиотеками для парсинга html/xml, т.е. у них либо интрефейс корявый, либо большая нагрузка на CPU, т.к. написаны на голом JS
Ответ написан
Комментировать
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
multicurl плохое решение, т.к multicurl завершается когда завершатся все параллельные запросы.
Думаю что тормоза у Вас именно из за этого.
Попробуйте использовать форки вместо этого.
У нас много всяких историй по парсерам, внешним апи - и скорее ляжет чужой сервер, чем мы упремся в процессор.
Ответ написан
Комментировать
He11ion
@He11ion
PHP-monkey
php + gearman/любой другой мультипотоковый исполнитель.
Как уже верно написали - проблема не в php , а в отсутствии многопоточности.
Ответ написан
@skynetdev
Go получше будет чем Node.js не мало встречал статей на эту тему но если смотреть что есть лучше GO то это два языка Rust и Haskell но Rust будет лучше и свежей. Все сравнения вычитывал из статей, но передать сюда вряд ли смогу.
Что выбрать вам, выбирать вам, мы лишь можем подсказать что попробовать
Go думаю будет проще для изучения
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы