Каков предпочтительный способ написания моих демонов Linux? - PullRequest
4 голосов
/ 08 января 2011

Привет всем

У меня есть веб-сайт PHP, который должен использовать некоторые кэшированные данные (например, хранящиеся в Memcache). Данные должны храниться в кеше демонами, извлекающими их из веб-сервисов, а некоторые из них также должны храниться на сервере MySQL.

Демоны должны делать следующее:

  1. Получение курсов валют, их анализ и сохранение в базе данных, а также в двух отдельных memcache на отдельных машинах.
  2. Получать финансовые показатели и хранить их в отдельных memcache.
  3. Получать большие XML-данные и сохранять их в двух отдельных кэш-памяти.

Я могу написать эти демоны на C / C ++ / Perl / PHP / Python.

Я должен решить, какой язык / сценарий выбрать для реализации этих демонов. Преимущество использования PHP для этого заключается в том, что я могу использовать API, используемый самим приложением веб-сайта. Еще одним преимуществом является то, что PHP прост, и все это знают, поэтому я не буду привязан к поддержке этих демонов, но с другой стороны, PHP медленнее и потребляет гораздо больше ресурсов.

Основной недостаток использования языка, отличного от PHP, заключается в том, что сложнее поддерживать код, написанный на C / C ++ / Perl. В настоящее время, я думаю, что такие задачи не распространены с использованием C / C ++ / Perl. Я ошибаюсь, говоря это?

Что бы вы порекомендовали мне сделать в этом случае?

Ответы [ 5 ]

4 голосов
/ 09 января 2011

Perl и Python являются ответами по умолчанию для написания таких скриптов. Но не имеет значения (много), какой язык вы используете, если вы пишете хороший код. Еще важнее то, как вы справляетесь со сценарием в случае неудачи.

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

У меня есть несколько сценариев Perl, которые делают то же, что и вы. для меня сложнее всего было убедиться, что мои сценарии не потерпят неудачу на долгое время, потому что я не хотел пропустить кусок живых потоковых данных.

И для этого я использовал monit . Отличный инструмент.

4 голосов
/ 08 января 2011

Лучшим выбором, вероятно, будет PHP для простоты / повторного использования кода.

PEAR System Daemon
Создание демонов в php

EDIT
Из того, что я могу сказать, это просто передача данных, не стоит беспокоиться о производительности. А что касается использования ресурсов, просто убедитесь, что max_memory не исчерпан (возможно, с помощью потоковой передачи или с большим количеством настроек). Прервите и зарегистрируйте операции, которые занимают слишком много времени. Повторное подключение к базе данных в цикле при сбое операции SQL и т. Д.

ПРИМЕЧАНИЕ ОСТОРОЖНО
Программирование демонов сложно, и многое может пойти не так. Учитывайте все точки отказа.

Также обратите внимание, что Perl гораздо больше разбирается в демонах, чем PHP. Я пропустил c / c ++, так как производительность (передача данных) не является проблемой, и программирование демонов достаточно сложно, зачем добавлять беспокойство по поводу утечек памяти, сбоев и т. Д.?

3 голосов
/ 09 января 2011

Лучше всего использовать любую технологию, которую вы знаете лучше всего. Вы будете:

  • Реализуйте решение быстрее
  • будет лучше отлаживать проблемы, с которыми вы столкнетесь
  • легче оценивать библиотек (или даже знать о них), которые могут снять часть работы за вас
  • проще поддерживать и расширять код

Реально, скорость и использование ресурсов будут относительно незначительными, если у вас нет реальных требований к производительности.

2 голосов
/ 09 января 2011

короткий: Я бы использовал Python.

больше Я пробовал PHP в режиме cli, я испытал много утечек памяти , конечно, из-за плохих библиотек PHP или библиотек PHP, которые никогда не были предназначены для чего-то другого, кроме быстрой смерти в режиме веб-запроса (например, я подозрительно отношусь к PDO).

В мире python , который я недавно видел, фрагмент кода из shinken , это хороший nagios, переписанный в виде демонов python, очень умный. См. http://www.shinken -monitoring.org / the-global-Architecture / & http://www.shinken -monitoring.org / wiki / official / development-hackingcode . Поскольку это инструмент мониторинга, вы, безусловно, можете найти там несколько очень хороших идей для некоторых задач повторения демонов.

Теперь я могу сделать предложение? Почему бы не использовать Shinken или Centreon в качестве планировщика для задач извлечения данных? (А может быть, скоро Centreon с двигателем с галькой вместо двигателя nagios, я надеюсь)? Это может быть полезно для обнаружения изменений во внешних данных, проблем в выборках и т. Д.

Затем для задач, которые должны быть выполнены (извлечение данных, преобразование данных, сохранение данных и т. Д.), Это задача ETL . Одним из хороших инструментов с открытым исходным кодом является Talend ETL ( Java ). Для Talend есть некоторые инструменты планирования и мониторинга, но не с открытым исходным кодом (вроде open-source-where-you-must-pay-a-license). Но добавить внешний планировщик, такой как Nagios, для задач должно быть легко (я надеюсь). Вам нужно убедиться, что memcached доступен как механизм хранения для talend ETL или закодировать ваш плагин.

То есть, вместо вместо языка, который вы, возможно, должны подумать об инструментах . Или нет, в зависимости от сложности, которую вы можете предположить, каждый инструмент добавляет свою сложность. Однако, если вы хотите перестроить все с нуля, Python - это быстро и эффективно.

0 голосов
/ 09 января 2011

Вы должны использовать тот же язык, на котором написана остальная часть вашего приложения. Таким образом, вы можете более легко повторно использовать код и навыки разработчика.

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

Так что я бы запускал эти задачи в задании "cron", которое периодически (повторно) запускалось, но убедитесь, что вы не запускаетебольше копий задач, чем вы намереваетесь.

Задания Cron более устойчивы, чем демоны.

  • Задание Cron, которое завершается ошибкой и завершается, запускается снова при следующем планировании
  • Задание cron, которое содержит утечки памяти, освобождает свою память, когда оно все равно завершает свой запуск.
  • Задание cron, в котором установлено программное обеспечение (библиотеки и т. Д.), Автоматически выбирает новые версии при последующем запуске без
  • «cron» уже предоставляет сценарии запуска / выключения, которые ваша команда Ops может использовать для управления им, поэтому вам не нужно переписывать их.Ваша оперативная группа уже знает, как работать с «cron», и знает, как комментировать записи в crontab, если они хотят временно отключить его.
...