Новая платформа

В своем предыдущем посте я обещал своим клиентам, что в 2008 году я приступлю к разработке новой платформы и поэтому мне хотелось бы немного о ней рассказать. Думаю, что профи в области парсинга и граббинга информации это будет интересно.

Как вы уже могли видеть, основным языком, которым я пользовался ранее для разработки парсеров и грабберов был PHP. Язык на удивление простой, хорошо документированный и достаточно мощный. На начальных порах, когда в месяц обрабатывалось порядка 500к-800к страниц мне его было достаточно, но с увеличением объемов я начал ощущать, что он не совсем подходит для выполнения подобной работы. Что меня в нем не устроило:

  1. Постоянное “вываливание” Apache по segmentation fault (segfault), что приводило к рестарту Apache и соответственно к перезапуску с САМОГО НАЧАЛА всех скриптов.
    Проблема достаточно дотошная, потому что бороться с segfault очень сложно. И методы борьбы так или иначе влияют на производительность, что в нашем деле, как вы сами понимаете, очень плохо. Возникает данная проблема в результате быстрого нарастания используемой Apache’ем памяти, что понятное дело является следствием “течки” (простите за выражение) PHP.
    Я временно решил данную проблему написав контроллер процесса выполнения, но он увеличивал продолжительность сбора информации в среднем на 8-10%, что мало приятно.
  2. Ограничения Apache.
    Тут есть целый ряд проблем. Сначала Apache не давал мне запускать более 4х пауков, потом некоторые процессы он убивал считая их висячими и т.п…. Данные проблемы удалось решить перейдя на CLI версию PHP, но и с ним пришлось возиться еще больше.

Одним словом, PHP ввел достаточно много ограничений в мою работу, обход которых вводил другие ограничения и так до бесконечности. Я не преуменьшаю достоинств PHP, но для задач парсинга и граббинга информации он не достаточно гибок.

Поэтому я решил обратить взоры на некогда мной любимый Perl. Он быстрее работает с регулярными выражениями, что является основой любого парсера, более умно управляет памятью и имеет намного более гибкий синтаксис, что помогает решать сложные задачи простыми методами. Поэтому в этом году я начну переносить всю свою платформу именно на Perl.

Конечно же постоянные рабочие проекты и проекты “под заказ” будут крутиться на PHP, но все новые проекты я буду стараться реализовать на новой платформе. Я надеюсь получить увеличение производительности на 40-70% в результате переноса.

Так что лучше, выше, быстрее!

15 комментариев

  1. SHAman:

    Наконец-то!:) А я давно слежу за вами и все время удивляюсь: “чего это он на пхп все парсеры пишет? А Perl на что? Не умеет, может?”. Оказывается, умеете! Очень радует, что вы подошли к делу как профессионал и оценили рентабельность инструмента. Мало того - вы еще выбрали новый инструмент, который отлично подходит под ваши нужды.

    Мои поздравления и бурные восторги:)

  2. admin:

    Мне очень приятно слышать такие комментарии, но я хотел бы заметить, что PHP я изначально выбирал в силу того, что его легко использовать как на публичных серверах, так и делать “заказы на вынос”. Притом я бы на вашем месте не оставлял подобные комментарии, ведь вы знаете как дела обстоят - сейчас набегут сотни фанатов PHP и начнется очередной бой священной войны. И прийдется нам с вами делать десятки тестов, чтобы доказать правильность выбора инструмента. А мне сейчас не до этого :)

    Я не отказываюсь от PHP как от одного из инструментов моей работы. Я продолжу его использование, но на самые крупных проектах я все-таки буду использовать Perl. В связке они чудесно справятся с той работой, что их ждет.

    Большое спасибо за ваш отзыв! ;)

  3. SHAman:

    Ну, холивар тут устраивать - повода нет. Perl работает быстрее почти всегда. Спорить с этим может только фанат. PHP реально удобнее и больше распространен. Но у него свои глюки. У перла тоже глюков хватает. Но профессионализм определяется при выборе нужного инструмента для конкретной задачи. Perl для парсинга текста и граббинга инфы подходит лучше других инструментов.

    Заказы на вынос, действительно, делать все равно нужно на пхп. Иначе поддерживать придется.

    А на счет тестов - я иногда балуюсь у себя на блоге:) Тестилки тестю.

  4. Andrey:

    Здравствуйте, случайно зашел на ваш блог и прочитав тему про переход на новую платформу решил спросить, не рассматривали ли вы Java в качестве альтернативы PHP да и Перлу. Вроде бы и с многопоточностью проблем нет и быстрее она становится от версии к версии , и регулярные выражения имеются. Опишите пожалуйста минусы и плюсы такого подхода лично для вас, если найдете время конечно.

  5. admin:

    Ну, холивар тут устраивать - повода нет. Perl работает быстрее почти всегда.

    Ну ты знаешь, говоря о скорости можно подразумевать два момента: скорость разработки и скорость выполнения самого кода. Так вот если нужно сделать что-то небольшое, то может быть это даже легче сделать на PHP, чтобы уменьшить скорость разработки. Но это так, лирика :)

    Perl для парсинга текста и граббинга инфы подходит лучше других инструментов.

    С этим согласен на все 100%, ведь именно для обработки текста и создавался, а ведь это и есть основой любого парсинга и граббинга информации.

    А на счет тестов - я иногда балуюсь у себя на блоге:) Тестилки тестю.

    Видел! :) Понравилось. Такие тонкие тесты :))))

    не рассматривали ли вы Java в качестве альтернативы PHP да и Перлу

    Не рассматривал. Причина достаточно простая - я его не знаю, но по опыту моих друзей, которые его используют я отчетливо для себя понял, что мощь Java в ее объектной ориентированности. Поэтому мне кажется, что он более применим для крупных проектов, где нужен высокий уровень сопровождения кода. Для моих же нужд это не требуется. Притом по поводу скорости Java лучше вообще не вспоминать - Perl она точно не обгонит еще очень долгое время. И это связано исключительно с логикой построения архитектуры, что как я понимаю в ближайшее время не особо изменится. Так что, как по мне, так Java стоит использовать когда проект надо делать долго и надо делать в команде, но это никак ко мне не относится ;))

  6. SHAman:

    Такие тонкие тесты :))))
    Ну тест про вывод - это забава просто:)

  7. admin:

    Мелочи, а приятно! :)

  8. false:

    странные у тебя проблемы, почему то все связаны с Апачем…
    когда я такого плана работы делал - то сам парсинг вешал на крон, что исключало апач из уравнений, под апачем крутилась только веб-морда
    да и когда нужно парсить несколько суток-месяцев то без крона никак

  9. admin:

    А причем тут крон? Я же писал, что переход на CLI версию принес мне тоже мало приятного. Проблем с cli было еще больше чем с Апачем.
    И зачем мне крон, если я могу тупо выполнить в командной строке php -C /script.php ? Крон нужен когда нужно, что-то с какой-то регулярностью запускать, а не для разового запуска.

  10. продвижение бубном:

    Если “на вынос” будет на перле то тоже закажу парсилку

  11. admin:

    Без проблем! Мне на нем даже лучше работать. Можно реализовать настоящую многопоточность, а не карячится с неблокирующими сокетами и прочим геммором php’шным.

  12. Оптимизатор времени:

    Надеюсь дальше будет больше:)

  13. admin:

    Уже и так много! Куда уже больше :)

  14. конкурсы в интернете с сайтами:

    а можно как то в процентах или в табличной форме узреть прирост производительности для определённых задач. Типа + и - языков для той или иной задачи в цифирях ?

  15. admin:

    Можно. Проведите исследования и получите числа. Тут никто этого не делал и для вас делать также не будет.

Оставить комментарий