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

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

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

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

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

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

Спасибо.
  • Вопрос задан
  • 10044 просмотра
Решения вопроса 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
Ответ написан
afiskon
@afiskon
Думаю, вам подойдет Perl или Erlang. Perl очень легко учится после PHP, на нем без труда пишутся демоны, есть замечательный ORM (DBIx::Class). Erlang прекрасен неизменяемыми переменными, функциональным стилем, многопоточностью и автоматической сборкой мусора. Есть замечательный веб-сервер (не фреймворк) Cowboy. Правда, с ORM у него не все гладко, как и с дровами для СУБД (в emysql есть известные незакрытые баги, в epgsql — проблемы с производительностью, если запросов очень много). Обо многом из перечисленного я когда-то писал у себя в бложике, можете по нему поискать.
Ответ написан
kamiram
@kamiram
питон достаточно удобен и популярен для таких задач. но следует учесть что жруч, например, до памяти.
демон демону люпус эст.
смтря какой демон. разные требования бывают.
Ответ написан
@lsf
На твоем месте я бы остановился на PHP. Попутно разобрался бы с тем что такое crontab. Если этого тебе будет мало, будешь думать о чем то ещё.
Ответ написан
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, например.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы