DoctorX
@DoctorX
Веб разработчик

На чём лучше писать большого демона?

Задача написать большую сложную систему которая будет стабильно работать в фоновом режиме длительное время.

Сам я специализируюсь на PHP но понимаю что он под эту задачу не очень подходит.

Что посоветуете? Руби, питон, с фреймворком или чистый.

Хотелось бы иметь удобною работу с бд (ORM?), http.

Спасибо.
  • Вопрос задан
  • 10369 просмотров
Решения вопроса 1
giner
@giner
Небольшая история.
— Первый свой демон писал на Питоне (это был питон 2.6 или 2.7, не помню уже). Работал но кушал много памяти, при чём со временем кушал всё больше. Разлюбил.

Затем начал писать на perl. Всё было хорошо, до тех пор пока демон должен был работать на Linux. Когда понадобилось перенести на Windows, обнаружились проблемы (форки рождались, но не убивались), которые так и не удалось решить. Возможно perl сильно полагается на архитектуру Linux.

Затем я решил попробовать ruby и обнаружил скриптовый рай. Демон, который прежде был написан на perl был легко перенесён на ruby, при чём код сократился раза в два. Под Windows не пришлось допиливать вообще ничего. Работает одинаково везде.
— В конце концов я для себя решил, что если писать скрипты-утилиты, то и perl и bash подойдёт, а если демоны, то ruby.
Производительность я не беру в учёт, т.к. никогда не требовалось, а вот по простоте и переносимости ruby на высоте.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 14
Zerstoren
@Zerstoren
Автор, понимаю вас. Когда-то я имел неосторожность написать демона на PHP, о чем жалею. Хоть работал стабильно, но меня он харил.

Python — замечательный язык для такой задачи, те кто пишут про утечки памяти, не сильно помогали сборщику мусора.
Я пишу демонический вебсокет сервер, при тысяче входов и выходов, на протяжении нескольких дней, утечки не зафиксированы. Как код жрал 7мб оперативки, так после отключения всех юзеров и продолжал жрать 7мб оперативки. Отличия сводились на килобайты.

Если вы решите написать на пайтоне, то пара рекомендаций:
— Под каждую итерацию обработки данных, создавайте экземпляр класса, в который войдут другие под классы, которые будут проводить обработки данных. Не складируйте ссылки на объекты в модулях или не уничтожаемых классах. Классы после каждой итерации должны уничтожаться.
— Идите ближе к функциональному стилю. Вы дали какой-то функции данные, она вернула результат.

Ничего не оставляйте без присмотра.
Ответ написан
jetman
@jetman
Большая и сложная система? Прорекламирую ключевые особенности Golang применительно к вашему случаю:
— статическая типизация
— легковесные потоки «из коробки»
— обширная стандартная библиотека
— встроенная система юнит-тестирования
— прост в изучении для PHP программистов

golang.org
Ответ написан
TyShkan
@TyShkan
Рекомендую посмотреть в сторону phpdaemon
Ответ написан
Комментировать
afiskon
@afiskon
Думаю, вам подойдет Perl или Erlang. Perl очень легко учится после PHP, на нем без труда пишутся демоны, есть замечательный ORM (DBIx::Class). Erlang прекрасен неизменяемыми переменными, функциональным стилем, многопоточностью и автоматической сборкой мусора. Есть замечательный веб-сервер (не фреймворк) Cowboy. Правда, с ORM у него не все гладко, как и с дровами для СУБД (в emysql есть известные незакрытые баги, в epgsql — проблемы с производительностью, если запросов очень много). Обо многом из перечисленного я когда-то писал у себя в бложике, можете по нему поискать.
Ответ написан
Комментировать
kamiram
@kamiram
питон достаточно удобен и популярен для таких задач. но следует учесть что жруч, например, до памяти.
демон демону люпус эст.
смтря какой демон. разные требования бывают.
Ответ написан
@lsf
На твоем месте я бы остановился на PHP. Попутно разобрался бы с тем что такое crontab. Если этого тебе будет мало, будешь думать о чем то ещё.
Ответ написан
vsespb
@vsespb
Perl отлично подойдёт.
Ответ написан
Комментировать
B7W
@B7W
Если вам надо серьезное большое многопоточное приложение — лучше смотреть в сторону java. Тамошняя библиотека, да и виртуальная машина, наиболее предпочтительней подходят под такие задачи.

Python, Ruby имеют GIL. И серьезных инструментов для многопоточности в них нет.
В python есть обход GIL — пакет multiprocessing, если смотреть то на него. ORM — SQLAlchemy, http — есть базовый и другие библиотеки.

А вообще надо смотреть задачи, а то может вам и php хватит.
Ответ написан
Комментировать
DrNemo
@DrNemo
в первую очередь все зависит от задач демона!
приведу пример: у меня есть демон собирающий много статистики с моих проектов и контролирующий их доступность. проекты на контроле разные, есть и средненагруженные.
так вот, демон написан на питоне и работает на моем старом десктопе на базе intl celeron 1,7 с 2 гигами оперативы(DIMM)
комп под управлением ubuntu server
железо вполне вытягивает решаемые демоном задачи.
Ответ написан
Комментировать
Ogoun
@Ogoun
Programmer
C# отлично подойдет, делаю на нем невыгружаемые приложения, стабильно работают месяцами, память не протекает.
Ответ написан
Комментировать
sylord
@sylord
Один большой лучше не делать. А написать несколько, которые выполняют различные задачи. А тут уже решать на чем писать. Где то хватит и Bash, где то необходим (либо быстрее) тот же PHP. Если грамотно писать никуда ничего не течет. Еще обязательно на демон повесить что то типа monit.
Ответ написан
Комментировать
@porzione
Выше уже сказали про требования, поэтому важно знать
1. критично ли потребление памяти? надо ли уложиться в 50 мб, 100 мб, 200 мб?
2. нужно ли отвечать параллельно на несколько запросов и нужна ли реальная многопоточность?

Если на второй вопрос ответ «да», то Erlang, например.
Ответ написан
@plutov
Я пишу на PHP, работает стабильно, но хочется перейти на Go plutov.by/post/php_daemons
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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