LINUX.ORG.RU

Платформы выбора тред

 , , , ,


1

5

Нужно выбрать платформу для написания сервиса по управлению ip-камерами.

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

Нужно:

  • развитая платформа, удобные библиотеки
  • адекватное потребление ресурсов
  • простое развёртывание с точки зрения пользователя. В идеале человек должен получить более-менее готовый к продакшену сервис просто склонировав реп, скомпилировав и запустив.

Взял бы сразу Rails, ибо удобная и развитая платформа. Но у Ruby (и Rails в частности) очень серьёзные проблемы с памятью, один свежий инстанс приложения занимает где-то 80 Мб, а в процессе работы отжирается где-то до 200-300. Соответственно нужно караулить и рестартовать. Сложно и неудобно.

Erlang/Cowboy — всё отлично с потреблением ресурсов, с развёртыванием, вроде библиотек более-менее. Однако, как мне кажется, неудобен для такого проекта. Нам нужно очень много всяких мелочей, всякой логики и кастомизации, хотелок.

Возможно Rails обернуть в докер-контейнер, и весь цирк-деплой делать внутри, но мне эта идея как-то не по-душе.

Смотрю на связку Python/Flask: вроде и платформа более-менее развитая, и вроде как с потреблением получше.

У JVM-based языков те же проблемы с памятью что и у Rails, подскажите? Я имею ввиду всякие скалы и clojure.

★★

Последнее исправление: CYB3R (всего исправлений: 2)
Ответ на: комментарий от Deleted

Golang?

Мне самому нравится Go, но к примеру, с базой в Golang работать не сильно удобнее чем в Erlang.

Штуки вроде ActiveRecord и SQLAlchemy нужны.

vladimir-vg ★★
() автор топика
Последнее исправление: vladimir-vg (всего исправлений: 1)

самый удобный деплой имхо - erlang в стиле flussonic. скомпилировал, поправил конфиг, запустил, заработало. даже nginx не нужен.

ruby и python требуют дополнительных танцев с application server и nginx. контейнер - неплохая идея, может сильно упростить жизнь.

и да, про жрет память - у людей тыщи инсталляций в продакшне, и всем норм. ты же не на raspberry хоститься собрался?..

nwalker
()

1) Мне не кажется проблемой 200-300 мегабайт памяти и куча либ. Всё-таки не шаред-хостинг для PHP-хоумпейджей делаем. К Ruby особо претензий нет, кроме того что я его не знаю, и что язык динамический.

2) Ненависть к Java и .NET тоже не совсем понятна. Это наиболее простые, фичастые языки. С огромной инфраструктурой. Ничего не ломается, всё работает. Статическая типизация. Нормальные IDE (не нужно писать в блокноте). Любой школьник за месяц с ними разберётся. Всё плохо с обфускацией - но для опенсорца это неважно.

3) Playframework тоже отжирает прилично памяти со старта, емнип как раз те 300. А если напихать в него тучу толстых либ - еще больше. На практике я сразу выделял на серваке 2 гига под playframework-сайты.

Делать наоборот - т.е. придумать как уменьшить расход памяти - не пробовал, потому что было тотально незачем.

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

Для Java и Scala есть какие-то lightweight фреймворки, которые жрут меньше памяти, чем Play.

stevejobs ★★★★☆
()
Последнее исправление: stevejobs (всего исправлений: 1)

У jvm-based языков всё ок с потреблением памяти.
Зависит от того, как настроишь jvm. У меня на старте кложурий проект
ест 25мб. Для heap выделяю метров 200. И да, Leiningen богоподобен.

Hertz ★★★★★
()

У JVM-based языков те же проблемы с памятью что и у Rails, подскажите?

Нет. ЖВМ отожрёт своё, а потом потихонечку.

Debasher ★★★★★
()

boost::asio

anonymous
()

адекватное потребление ресурсов

Адекватнее, чем у C и C++ сложно будет найти :)

Если не хочется вручную управлять памятью, то есть еще промышленно стабильные Eiffel и Go. Ну или экзотический D.

eao197 ★★★★★
()
Ответ на: комментарий от eao197

Адекватнее, чем у C и C++ сложно будет найти :)

Автоматическое управление памятью — давно победившая норма. Не знаю зачем ты это здесь приводишь.

Eiffel, ..., Ну или экзотический D.

Я же писал в первом посте: «развитая платформа, удобные библиотеки». Go ещё туда-сюда, а эти два мимо.

vladimir-vg ★★
() автор топика
Ответ на: комментарий от vladimir-vg

А как же проблемы что я описал в первом посте?

Это не проблемы, это системные требования.

special-k ★★★★
()

Если отталкиваться от эрланга и руби, то есть Elixir. Простой и понятный, вроде бы. Видел штуки, которые собирают весь проект в rpm пакет. Ещё есть орм, почти в stdlib.

vertinsky
()
Ответ на: комментарий от Deleted

ормы какие-то странные там. кажется, завязаны на reflex, т.к. типы для sql описываются с помощью уродливых structure tag.

msgascii
()
Ответ на: комментарий от vladimir-vg

Автоматическое управление памятью — давно победившая норма. Не знаю зачем ты это здесь приводишь.

Тогда не нужно вписывать пункт про адекватное управление ресурсами. Да и про развертывание

:)

eao197 ★★★★★
()
Ответ на: комментарий от eao197

Тогда не нужно вписывать пункт про адекватное управление ресурсами.

Ты бы стал писать интернет-магазин или блог на C++, с ручным управлением памятью? Ты бы назвал это адекватным?

Проект — управление всякой фигней в базе, очень похоже на все эти сайтики.

vladimir-vg ★★
() автор топика
Ответ на: комментарий от vladimir-vg

Ты бы стал писать интернет-магазин или блог на C++, с ручным управлением памятью?

Смотря какого размера магазин :) И какую именно часть магазина :)

Ты бы назвал это адекватным?

Напомню, что речь шла об «адекватное потребление ресурсов». Нативные языки вроде C и C++ адекватно потребляют ресурсы, как память, так и процессор. Языки с GC требуют от 2-х до 4-х раз больше памяти. Языки с VM (да еще и без JIT/HotSpot) работают в несколько раз медленнее.

Или речь шла о таком ресурсе, как разработчики? Если так, то да, C/C++ для целого ряда предметных областей потребляют этот ресурс неадекватно.

Проект — управление всякой фигней в базе, очень похоже на все эти сайтики.

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

eao197 ★★★★★
()
Ответ на: комментарий от eao197

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

Тогда понятно.

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

Языки с VM (да еще и без JIT/HotSpot) работают в несколько раз медленнее.

Несколько раз — это если матрицы перемножать. На обычных же повседневных задачах это не так явно. Обычная же задача такова: получить/разобрать запрос, сходить к базе, записать в базу, отрендерить.

vladimir-vg ★★
() автор топика

развитая платформа, удобные библиотеки

Java, .net возможно еще python. Все остальное либо крайне неразвито либо неудобно и требует кучи времени разработчиков на ваяние велосипедов.

адекватное потребление ресурсов

Все кроме нативного жрет ресурсов порядком, особенно если без настройки. А если денек погуглить, то у меня на виртуалке с MemTotal: 1718620 kB вполне себе жило 5 инстансов jvm.

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

Клонировать, компилировать... Это теперь называется простым развертыванием? Имхо максимум что пользователь должен сделать - это либо нажать next->next->ok, либо распаковать zip в папку и пустить start.sh

Nagwal ★★★★
()

Erlang

вроде библиотек более-менее

это так, но большинство из них недоделаны так или иначе. с другой стороны, это частично компенсируется (и, похоже, является причиной недоделанности) большей лёгкостью написания помянутых библиотек :)

Нам нужно очень много всяких мелочей, всякой логики и кастомизации, хотелок.

если я вас правильно понял, erlang здесь вне конкуренции.

littlechris ★★★
()
Ответ на: комментарий от littlechris

антилорчую обоих. еликсир тот ещё конь в пальто.

+1 Erlang.

anonymous
()

вообще, я всё пишу на кложуре и посоветовал бы её, но для такой задачи - сам понимаешь - вообще не важно что, если цель «просто сделать» а не осилить новое - бери что знаешь. НУ а если осилить - определённо кложуру :3

Debasher ★★★★★
()
Ответ на: Erlang от littlechris

если я вас правильно понял, erlang здесь вне конкуренции.

На самом деле оно сейчас на эрланге, и очень неудобно, в основном из-за отсутствия ORM или чего-нибудь подобного.

И когда для того чтобы сделать какую-нибудь фишку приходится корячить три-четыре запроса текстом, тогда как где-нибудь в рельсах просто используется заготовленный scope и ещё что-нибудь.

vladimir-vg ★★
() автор топика
Ответ на: комментарий от vladimir-vg

На самом деле оно сейчас на эрланге, и очень неудобно, в основном из-за отсутствия ORM или чего-нибудь подобного.

Проблема не в языке кмк.

zz ★★★★
()
Ответ на: комментарий от zz

Проблема не в языке кмк.

Тащемта ты прав. Но непохоже что ситуация с ORM в ближайшее время изменится, посему ищу замену.

vladimir-vg ★★
() автор топика
Ответ на: комментарий от vladimir-vg

Ну вы прикидывали, реально проще все переписать vs сделать чтото для удобных запросов самим?

zz ★★★★
()

Вот не надо go, elixir и всю эту нетривиальщину. В elixir-е жизнь зародилась слишком недавно, go - просто не подходит вообще никак, долго описывать.

Если тебе надо «сходить в базу -> отрисовать» - Python/Ruby, Rails/Django/Flask. Правда, деплоймент не идеально прост, но можно что-нибудь придумать.

Если очень хочется - clojure, но там все альфа-бета и все нужно делать руками. Если очень-очень - можно Scala, но лично я не представляю, как можно классическую вебню писать на статически типизированном языке.

nwalker
()
Ответ на: комментарий от nwalker

как можно классическую вебню писать на статически типизированном язык

а чо такого?

Debasher ★★★★★
()

Go по всем пунктам подходит

umren ★★★★★
()

У JVM-based языков те же проблемы с памятью что и у Rails, подскажите? Я имею ввиду всякие скалы и clojure.

Один инстанс clojure/scala жрёт больше чем один инстанс Rails, но для них достаточно одного инстанса, а для Rails - нет.

Советую django =)

holuiitipun
()
Ответ на: комментарий от nwalker

go - просто не подходит вообще никак, долго описывать.

ну а ты постарайся

dib2 ★★★★★
()
Ответ на: комментарий от vladimir-vg

А что за базу планируется использовать? И ты таки уверен, что тебе в Erlange нужен _Object_ Relational Mapping?

runtime ★★★★
()

Можешь попробовать на clojurescript.

Int0l ★★
()
Ответ на: комментарий от max_lapshin

И Django и Flask - синхронные WSGI фреймворки. Для асинхронности бери tornado, aiohttp или twisted.

proofit404
()
Ответ на: комментарий от max_lapshin

а у django можно в одном процессе запустить какой-нибудь комет-сервер? Гринлеты там уже умеют?

Можно, но лучше так не делать, в flask тоже.

holuiitipun
()
Ответ на: комментарий от vladimir-vg

ORM без ООП сделать можно, http://sqlkorma.com/ тому пример, другой вопрос что на э-ге аналогов ему нет.

на эрланге удобнее чем где-то пилить всякие хитрые нюансы вроде «каждый третий вторник месяца, если луна во второй четверти, напечатать в отчёте сумму поступлений от клиентов, имя которых начинается на «Z»»

littlechris ★★★
()

- эрланг это всегда хорошо с его серверами и нодами, контролируемой бинарщиной, недостаток логики можно компенсировать специфичными языками (python, java, php) главным образом через порты + прикладные протоколы.

Могут быть проблемы у деплойеров при развёртывании: с нодами, мнезией, ребарами, изучением, но это больше от «неосиляторства»...

По определению - кросс-платформенный, но как будет в противоестественной среде, типа винды не скажу.

swwwfactory ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.