LINUX.ORG.RU

Golang vs Kotlin [бюджетная выбор под VPS]

 , , , ,


0

4

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

Golang

Мне показалось жрет значительно меньше ОЗУ и в целом нет никакой виртуальной машины (что дополнительное ОЗУ). Компиляция в бинарник со всеми зависимостями (да и сам бинарник это плюс). Асинхронное программирование под капотом, пишешь как обычно и сразу все асинхронно и нет никаких бестолочных калбэков, промиссов или асинков (или упаси такой бред мозга, как реактивное программирование). Ну и конечно возможность писать процедурный код со структурами с небольшими возможностями работы с объектами, то есть никакого поражения ООП мозга (алгоритмы отдельно, данные отдельно). Язык созданный чисто под веб (где радует своими батарейками для этого), в отличие от котлина, где начиная гуглить попадаешь в какой-то андроид ад. Нет какой-то привязки к одной IDE. Библиотеки чаще представляют решения какой-то одной задачи, а не попытку сделать из всего фреймворк (не щадя память, ведь в кровавом она не важна)

Kotlin

Дженерики. Наследие джавы и миллион готовых решений (чаще продуманных и не редко кривых, но все же их очень много, это плюс). Так же есть устоявшиеся стандарты в либах (например логер, менеджер зависимостей), в общем, огромнейшая инфраструктура. Более приятный синтаксис, хотя го настолько печален, что тут даже у джавы дизайн синтаксиса по-лучше будет (хотя местами котлин то же вызывает WTF-эффект, но все же разработка под всем этим удобнее). Мне думается, чисто субъективно, jvm производительнее и имеет кучу рычагов чтобы поиграть с этой производительностью, для каждого приложения индивидуально. У джавы более адекватное сообщество (хоть иногда с поражением мозга спрингом), а вот у котлина беда какая-то (из-за засилья андроид-малолеток, которые просто оккупировали его, как в свое время в веб в php).



Последнее исправление: wist512 (всего исправлений: 2)

Выбор языка из-за бомжевости хостинга

Лол пиши сразу на php. Будет работать на шаред хостингах за 20 центов.

жрут тучу памяти, да еще и клонируются по процессам

Если асинхронно писать - не особо. Всё равно в БД упрешься, а если числодробить собрался пиши сразу на си.

pawnhearts ★★★★★
()

Пока облачные маркетологи заливают радугу в уши пользователей, VPS-решения до сих пор остается самым дешевым и бюджетным способом реализовать «сайт на коленке».

Маркетологи уже поразили твой мозг, разницы между облаком и VPS никакой

Мне думается, чисто субъективно, jvm производительнее

Смешно

Мне показалось жрет значительно меньше ОЗУ

Оперативка в VPS обычно самый дорогой ресурс.

derlafff ★★★★★
()

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

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

micronekodesu ★★★
()

Что для тебя значит «бюджетная платформа» в плане оперативки? Сейчас у большинства провайдеров минимальный объем начинается от 1Гб (не рассматриваем тарифы «на-пощупать», там и 256Мб могут дать).

Для Java можно получить решение, приемлемое по потреблению памяти и быстродействию, но скорее всего придется отказаться от спринга как минимум. Spring Boot вообще прожорливая тварь, его даже рассматривать не стоит. В целом, если готов потратить время на работу напильником, то я бы посмотрел на WildFly. Полноценный EE AS, из коробки есть web-профиль, в котором отключены такие вещи как JMS, зато есть DI, контейнерные транзакции и прочие вкусности. В гигабайт оперативки вполне впишется.

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

разницы между облаком и VPS никакой

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

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

Ну у меня на небольшом проекте, правда на full-профиле, потребление оперативки плавает в диапазоне 250-700 Мб, в зависимости от нагрузки и аптайма.

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

Вот прям сейчас у меня spring boot сожрал гигабайт оперативки. Это бекэнд для SPA, отдает данные из БД в JSON, нагрузка - ну как я успеваю по кнопкам тыкать, т.е. даже 10 rps нет.

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

Вот прям сейчас у меня spring boot сожрал гигабайт оперативки

Там вроде по-умолчанию в jvm один гигабайт оперативы, может быть просто съело сколько положено (чтобы реже GC дергать)? Или гигабайт реал данных?

wist512
() автор топика

где начиная гуглить попадаешь в какой-то андроид ад.

Ммм? Я вот недавно начал котлин осваивать, гуглую жабу, котлин прозрачно ложится на жабу.

(хоть иногда с поражением мозга спрингом)

Могу скинуть минималистичный тестовый проект, spring-webmvc 5.0 + kotlin 1.2 + gradle + embedded jetty без spring-boot.

Aber ★★★★★
()

Kotlin

Я так и не понял зачем он нужен, если есть жава. Оттуда по сути только ";" в импортах поубирали.

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

Лучше расскажи как в рамках VPS все это укладывается (например 512мб ОЗУ на базу, 512мб на spring-webmvc... в таком духе)

wist512
() автор топика
Ответ на: комментарий от Siado

Оттуда по сути только ";" в импортах поубирали.

Чтобы добавить ":" в типах.

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

Да, похоже, он сразу откусил себе весь хип, какой смог.

Посмотрел в профайлере, used heap скачет как пила, от 200 до 600 Мб, притом что никаких запросов нет. Я просто сижу и смотрю на график хипа, а он себе так раз и еще 200 Мб скушал, потом его GC подобрал, стало меньше, потом опять - раз и скушал.

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

Если запросов нет и приложение реально ничего не делает в этот момент - то может это данные профайлера? Помню была какая-то особенность в VisualVM, он так же лесенкой тоже свои данные плодил и потом же собирал.

wist512
() автор топика
Ответ на: комментарий от hippi90

Жесть. У меня проект на aspnet core жрет меньше сотни, при этом это с активным использованием EF.
Конечно в работе оно будет подниматься где-то до 300, но по блин что они там такого наворотили что элементарная крудня жрет так в простое.

ritsufag ★★★★★
()

1. JVM вряд ли будет работать быстрее Go. Может на какие-то проценты в некоторых случаях.

2. Памяти JVM однозначно будет жрать больше.

В целом главный вопрос это память. Я бы закладывал 200 MB как некий статичный расход памяти под JVM. Т.е. если виртуалка на 256 MiB, то смысла в JVM ровно 0. Если 512, то считай, что твоему приложению доступно около 200 MB, если не стесняться в Фреймворках, в общем-то не очень много. Тут тоже Go поинтересней выглядит. А вот от 1GB в памяти вопрос уже так сильно стоять не будет.

В плане удобства разработки Kotlin на порядок удобней.

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

Что для тебя значит «бюджетная платформа» в плане оперативки? Сейчас у большинства провайдеров минимальный объем начинается от 1Гб (не рассматриваем тарифы «на-пощупать», там и 256Мб могут дать).

Ну вот у меня VPS на 256 MB. Учитывая, что там крутится несколько сетевых сервисов, свободной памяти там мегабайт 50 может будет. Я бы не стал в таких условиях писать на Java. А на Go вроде проблем не должно быть.

Посоветуешь VPS от 1 GB за $1/месяц?

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

На C, видимо. Strongswan, Postfix, Dovecot, Nginx, Dnsmasq и всякая мелочёвка.

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

Не понравились результаты (я конечно понимаю разницу между синхронного и асинхронного i/o, но все равно): https://www.techempower.com/benchmarks/#section=data-r14&hw=ph&test=p...

Ну, а так же вопрос распространенности, не хочется быть альфа-бета-тестером.

wist512
() автор топика
Ответ на: комментарий от EternalNewbie

Потому что как vibe.d так и сам Д, нинужно и нет ни одного туториала. Я щитаю , для небольших проектов помимо python/aiohttp, больше ничего не нужно. Не понимаю че люди морщаться.

Хотя Юмпутюн из радио-т, хорошо рекомендовал Голанг, он со своим китайцем, по 1 стартапу в ниделю запускают на Го, даже на диджитал оушене дроплетов не хватает для этого

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

Спринг бут же, абстрактные фабрики фабрик, over 100500 слоев абстракции, пару десятков бинов и проксей для них на каждый чих и прочие интересности.

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

Ну вот у меня VPS на 256 MB.

А у меня мейнфрейм от IBM. И я даже хз, сколько там оперативки.

Но мы же тут не об этом, правда?

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

Какие фабрики, spring-boot сделан тупо, я не смог найти точки где бы сделать нужное мне конфигурирование в бинах которые он инициализирует.

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

107, могу запустить дебаггер и проверить.

Aber ★★★★★
()

Блин, ну это же основы основ. Java жрёт больше всех. Минимум 150 Мб оперативы на хелловорде. Далее идёт питон. Полноценная Джанга умещается в 30-40 Мбайт рамы. Ну и в конце по потреблению ресурсов D и Go. D + Vibe.D (libevent wrapper) 15 Mb, go со всякими минималистичными фреймверками - от 3 до 9 Мбайт. При этом и D и Golang конечно же делают JVM по производительности минимум в 1.5 раза. А на тесты с этого сраного хелловорда с течпавера смотрят тока нубы. Не нубы проводят сами тесты на текущих потребностях и делают вывод.

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

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

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

Embedded jetty на старте жрет где-то 4-5 метров (если собрать ГЦ, если не собирать ~30). У томката где-то ~15 (точно не помню, правда было еще тогда на 32битной машине). Я так понимаю, «программисты» пишут хеллоу ворд, а потом видит что джава съела 80метров и не понимают что это резервируется хип? Откуда эта цифра 150? Почему вдруг скриптовый язык, который усыпан метаинфой более чем полностью, кушает меньше чем статический язык? Одна только пустая декларация класса в пхп весит 1 киллобайт!

Полноценная Джанга умещается в 30-40 Мбайт рамы

А теперь умножаем это на минимум 10 процессов, где у каждого 30-40мбайт своей не шарэд-памяти.

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

Jvm по-умолчанию высчитывает сама сколько выжрать. У jvm расчет на то, что она на сервере одна. Только с 131 релиза 8 java появилась эксперементальная опция для докера чтобы вычислять размер на основе ограничений cgroups. Поэтому выставляйте размер heap-а руками, господа. И тогда и SpringBoot, и WildFly Swarm, и Payara, и KumuluzEE и даже TomEE можно впихнуть в 400мб. Если там просто пару api с crud-ом то оно 10 запросов в секунду спокойно выдержит. ОП-у я бы советовал попробовать таки go. Kotlin мне не зашел. Если совсем не нравится обычная Java, то пробуй go или scala. Но лучше таки наверное go. Он на 60 мб поедет аж бегом. Я сомневаюсь, что ОП-у реально нужны jmx, агенты-трассировщики, анализировать дамп хипа, jaas, ee, java security policy и прочии кровавые радости. С моей точки зрения писать небольшой проект под jvm это надо её или очень хорошо знать или сильно любить. Но совсем другое дело, если есть планы на будущее стать энтерпрайзным монстром. Ту у jvm-based стека достойных альтернатив - пальцев одной руки хватит пересчитать.

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

z/os или ты as400 по незнанию мейнфреймом считаешь?

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

И какой выбор? Я так понял многие даже не знает как джава работает с хипом (при этом используя джаву) или даже думают что она есть больше чем скриптовые языки (например питон) или даже исполняется так же медленно как питон (речь не про этот форум, а вообще нередко встречаемое мной мнение). Как ведет себя го в среднем-крупном продакшене тоже не известно, может (а основание есть) для своего быстрого GC го резервирует в разы больше памяти, чем нужно и еще не ясно будет - выиграешь ты с этого или нет? Поэтому и спрашиваю.

wist512
() автор топика
Ответ на: комментарий от anonymous

Послушав о том как много джава либы отъедают озу, я скорее уже склоняюсь к го. Но писать на го многолетние проекты будет, мне кажется, неприятно.

wist512
() автор топика
Ответ на: комментарий от Virtuos86

Производительность + статическая типизация. Золотая середина между скриптами и С++

wist512
() автор топика
Ответ на: комментарий от hippi90

Спринг бут же, абстрактные фабрики фабрик, over 100500 слоев абстракции, пару десятков бинов и проксей для них на каждый чих и прочие интересности.

Меня всегда интересовало, зачем люди пишут эти 100500 слоёв абстракции? Им не лень? Или им платят за количество строк?

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

и не морщиться как девочка, что идеешечка не подсказывает методы класса

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

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

Одна только пустая декларация класса в пхп весит 1 киллобайт!

Зато поскольку процесс быстро умирает, то и память возвращается системе

NextGenenration ★★
()

Расскажите мне как там в Golang с дэбагом ? Все так же принтами отладку делают ? Или devle уже готов к продашен использованию ? Или что там у нас еще есть... gdb ?

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