LINUX.ORG.RU
ФорумTalks

В чём прикол использования go в качестве серверов (высоконагруженных)?

 , , ,


3

5

Я прочитал статью " Создатель Node.js: «Для серверов я не могу представить другой язык кроме Go» " ( https://habrahabr.ru/post/337098/ ), и у меня создалось ощущение, что чувак умом тронулся. Go - хипстерский язык, на который вообще нет никаких стандартов (в отличии от XEP явы), на котором пишут обычно просто мелкие сервисы и утилиты.

Каким образом на go можно писать нормальные сервера, если:
1. это развивающийся язык => никакого энтерпрайза
2. либы отвратительного качества (и количества) => никакого энтерпрайза
3. go изначально проталкивался одним человеком, который упоролся, а гугл выделил ему ресурсы на создание языка.
4. зачем, если есть java для бизнес-логики?
5. зачем, если есть nodejs для вебни? Причём не знаю, почему автор гонит на производительность, на том же хабре была статья, где на nodejs делали http/https-балансер (прокси с ssl-терминацией и оркестрацией виртуалок в облаке, запуская и останавливая их в зависимости от нагрузки).
6. зачем, если есть rust для быстроты и низкого уровня?
7. зачем, если есть python для админских скриптов с кууууучей либ?

Также язык:
1. Не асинхронен.
2. Не предназначен для энтерпрайза.
3. Бинарный (но при этом нельзя использовать для системного программирования, как rust).
4. Неудобный перехват эксепшенов.
5. Плохо документирован.
6. Нету каких-то киллер-фитч, типа (как в той же nodejs) простая организация очереди, тредов (причём нормальных, а не green), позволяя быстро делать многотредовые прилоежния). Или специализация на определенных задачах (например, как php и nodejs на вебне).

В чём соль? Очередной хипстерский хайп или я, как обычно, не догоняю за современной модой, предпочитая классические решения (типа J2EE на IBM i)?

No trolling.

Перемещено beastie из development



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

это все тебе Рабинович напел ?

Dred ★★★★★
()

Чо, каникулы кончились, снова взялся за тупняк и флеймогон?

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

Тут только один Ктулху. Я бы купил аккаунты нормальные, если бы мне нужны были подпевалы. Плюс у меня осталась старая гвардия.

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

To Pinky: прошу извинить за личные сообщения, просто уже достало.

Почему ты на меня до сих пор агришься? Что плохого в данной теме?

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

А эти го-рутины, на которые так фапают кодеры на го?

Это, по-сути, зелёные треды с кривой очередью. Есть почти в любом языке. Дрочат на них, потому что не осилили нормальные очереди. Мало того, по собственному опыту могу сказать, то обычно проще писать с использованием внешнего брокера очередей, т.к. это: 1. сразу же порождает микросервисную архитектуру 2. любые языки 3. не надо париться с тредами, с тредо-проблемными либами и т.д. 4. тупо создаются процессы на каждый тред 5. дебаг 6. в зависимости от брокера сообщений можно сразу же настроить кластеризацию (причём почти не ограниченную), обязательные ответы при доставке, 7. сохранение сообщений, если все подписчики упали. 8. можно на лету изменять количества воркеров в зависимости от размера очереди, а также держать дежурных воркеров. 9. замена кусков кода прямо в продакшене: выкатываем новую версию микросервиса, перенаправляем роутинг к нему.

Что касается скорости работы: если вопрос не латентности, а в саспуте, то работает всё ок. И масштабируется, что самое важное.

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

Go сейчас это тоже самое, что и ROR в 2013 году для веба. Скоро отпустит. Фундаментальные языки веба не меняются.

fman2
()

Его кстати в основном стартапы и выбирают. Модно же. Как и ноду.

Для серьезных вещей есть Java/Python. Для быстрой разработки есть PHP7/Symfony/Yii2/Laravel...

NodeJS уже рип в принципе, сам автор этого от него отказывается, да и вообще нужно было просто один разок написать нормальный бекенд на ноде, чтобы все понять. Callback-hell и куча прописов обеспечена.

Go популярен, потому что гугл его толкает. Не более.

fman2
()

Каким образом на go можно писать нормальные сервера, если:

1. Язык уже устоялся. Вносящиеся изменения только дополняют язык не ломая совместимость с ранними версиями. То же самое производится и в Java/C#. 2. Стандартная библиотека крайне хороша. С завидной периодичностью оптимизируется ее кодовая база. Но это не изменения в языке.

3. Даже С++ изначально разрабатывался и проталкивался одним человеком и ничего. Сейчас Go проталкивается и используется Гуглом.

4. Вопрос риторический. Не Java единым живет энтерпрайз. В «моем» энтерпрайзе от поделий на Java бегут как от огня.

5. Зачем nodejs, когда большая часть вебни на php-java-c#?

6. В заголовке про высонагруженные сервера, а справшиваем про низкий уровень? Ни к чему. Это не область Go и его не позиционируют таковым.

7. Так же Go не позиционируется как скриптовый язык. Этот удел у питона никто не отнимет (IMHO).

Также язык:

1. Вполне себе асинхронен (потоки и горутины в помощь). Простота реализации асинхронщины радует по отношению к другим языкам.

2. Чисто субъективное мнение. Ostrovok вполне себе пилит на Go всю логику по поиску отелей. Правда если его можно отнести к энтерпрайзу (маленькому если только)

3. Опять же - в заголовке пишем про высонагруженные сервера, а жалуемся про системщину.

4. Их там и нет. Есть паника и ошибки. Наличие/отсутствие экшепшенов - субъективная оценка.

5. Офигенная документация к языку/стандарной либе как в виде описания, так и в виде всеобъемлющих комментариев в коде. Тур для ознакомления/обучения.

6. Субъективное мнение. Кому-то киллер-фичей может показаться одно, а кому-то другое. Я, к примеру, не вижу киллер-фич в Java перед C# - в «моем» энтерпрайзе нет кросс-платформенности, а это IMHO единственная фича Java по отношению к C#.

Хипстота только в голове. В реальной жизни языки/обязку выбирают под конкретную задачу.

nemec784
()

Создатель Node.js
Go - хипстерский язык,
Создатель Node.js
Node.js
Go - хипстерский язык,
хипстерский язык,

что тебя вообще так смущает в этой статье?

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

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

И какой брокер посоветуешь? Смотрел RabbitMQ, но как посмотреть, какие сообщения висят в очереди не нашёл.

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

Прочтите моё сообщение ниже, что думаете про микросервисную архитектуху через брокера?

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

Ваше мнение очень важно для нас, продолжайте держать в курсе

Продолжу, если настаиваете. Подскажите, а мнение на какие ещё темы Вас интересует?

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

Контакты в профайле, добавляйся (кстати, твой спам-бот меня не пускает в джаббер).

Вот, например, тебе надо сделат задачу: У тебя есть в БД огромная таблица с сайтами (или csv), надо проверить их сайтмапы и выкачать контент по сайтмапу.

Как мы это делаем с брокером сообщений:
1. Делаем сервис, который подключается к БД table1, и просто срёт сообщениями в брокера (можно либо реализовать задержку, чтобы не перегружать брокера, либо забить). (Брокер если не сможет смаршрутизить всем сообщения, просто повалит их на диск). Группа down.
2. Делаем сервис, который подписывается на down. Полученные ссылки он проверяет, далее выкачивает файлы. По каждому выкаченному файлу отправляет в брокер сообщение в группу down2 вида: domain, url, ok/not ok.
3. Делаем сервис, который слушает группу down2, принимает данные и кладёт их в БД table2.
4. Делаем сервис, который читает table2, вычленяет записи с «not ok», срёт в down сообщениями с url, дописывая после каждой отправки в БД около url в колонку try = try + 1, и прекращая пробовать, если больше 10.

Итак:
Сервис один - оркестратор (частично 4 тоже).
Сервис 4 запускаем по крону раз в сутки для докачки.
Сервис 3 может быть один, а может быть и несколько (особенно, если БД кластерная, также мы можем легко реализовать шардинг).
Сервисов 2 запускаем по всему миру 40000 штук, по 100 на машину.

Времени: 2 часа на разработку. Скорость - опупенная. Ни одно сообщение не потеряется. Идеально совместимо с облаками.

А теперь как мы будем это делать без брокера?

Кстати, можно работу с БД сделать через отдельную группу в брокере, тогда можно по названию домена определять группу маршрутов (т.е. переопределять группу на другую в зависимости от домена в сообщении). Тогда обработчики на конце будут подключены каждый к своей базе (т.е. можно сделать сразу одинаковые контейнеры с БД и обработчиком, который требует только указание своей группы подписки (которую, кстати, можно получать из группы подписки autoconfig, написав соответствующий сервис, а потом уже сохранять в конфиг) ). Вот так просто мы ещё и SQL-геошардинг реализовали.

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

ActiveMQ. Но RabbitMQ тоже можно. Вообще их много. Смотря что нужно. ИМХО, ActiveMQ наиболее крутой.

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

А почему нет? Я вот текущий проект пишу на питоне, следующий будет скорее всего на go.

Во-первых, go быстрее. Питон уже заметно тормозит когда flask рендерит страничку с сотней ссылок. Во-вторых, получается нормальное standalone приложение, а не непонятная хрень которую ещё надо в uwsgi пихать. Можно, в частности, в нём запускать фоновые воркеры.

Альтернатив не вижу. Java и Javascript сразу нет, потому что уродливые языки и уродливая экосистема. Также Java идёт лесом по потреблению памяти, а Javascript не быстрее питона. Rust слишком низкоуровневый. Всё.

В новых языках меня смущает только пакетная система. Питоновские, перловые и руби модули у меня ставятся из системного пакетного репозитория, и это офигенно. Во-первых, потому что я ими могу управлять из одной точки, а не россыпью разных утилит. Во-вторых, потому что прилетает известная версия, собранная из известных исходников, и одна и та же мне, мне на другой машине, Васе и Пете. Это важно чтобы только мне вместо зависимости не подложили трояна, а если его таки подложили, то значит подложили всем, и скорее всего кто-то на него уже наступил, а так как есть исходники хотя бы можно понять что он мог натворить. Это максимальный уровень доверия который возможен, если не прибегать к аудиту всех зависимостей вручную. Я не в курсе как с этим у других языков, только слышал звон, в частности что в npm вместо зависимости может прилететь что угодно и никто этого не заметит. Java вообще невнятное говно, где нет офф репозитория, и все пихают в проекты непонятные jar'ы. Интересно как с этим у rust и go.

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

Интересно как с этим у rust и go.

В Go с этим все плохо. «Оффицальный» пока в процессе разработки. На гитхабе так и написано: dep is a prototype dependency management tool for Go https://github.com/golang/dep

У Rust с этим гораздо лучше - cargo вполне себе няшный.

nemec784
()

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

Уроки то на завтра сделал перед тем, как свободно идти клоунадить на ЛОР? Дальше не читал.

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

Javascript не быстрее питона

v8 (т. е. нода и хром) быстрее CPython, про PyPy не скажу

Java вообще невнятное говно, где нет офф репозитория, и все пихают в проекты непонятные jar'ы.

А как же Maven Central?

в npm вместо зависимости может прилететь что угодно и никто этого не заметит

Было (npm publish -f), но еще в 2014 отключили

Интересно как с этим у ... go.

В go центральной репы нет, обычно импорт прямо с гитхаба делают (ну или костыли на сабмодулях).

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

В go центральной репы нет, обычно импорт прямо с гитхаба делают (ну или костыли на сабмодулях).

Есть еще gopkg.in с тэгами/релизами в репе. Плюс вендоринг.

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

Во-первых, go быстрее.

В 21-ом веке важнее масштабируемость, посмотри тут мой порт про брокера сообщений. Плюс ты не пробовал использовать компиляторы для питона? Да, есть такие.

Во-первых, go быстрее. Питон уже заметно тормозит когда flask рендерит страничку с сотней ссылок. Во-вторых, получается нормальное standalone приложение, а не непонятная хрень которую ещё надо в uwsgi пихать. Можно, в частности, в нём запускать фоновые воркеры.

Я вообще не понимаю, зачем на этих языках веб писать. Есть php, нода, ну а если есть деньги, то ява и скала.

Альтернатив не вижу. Java и Javascript сразу нет, потому что уродливые языки и уродливая экосистема. Также Java идёт лесом по потреблению памяти, а Javascript не быстрее питона. Rust слишком низкоуровневый. Всё.

Яваскрипт действительно уродливый, проблема с инфраструктурой, но зато асинхронный. А вот у явы всё шикарно - инфраструктура офигенная, библиотеки все высокого качества, XEP-стандарт на любой чих, высокая скорость работы после прогрева кэша или при компиляции до исполнения. Память стоит копейки. Высокий уровень безопасности. Магазин библиотек прямо из IDE, всё собирается в один файл и деплоится прямо из IDE. После понимания явы можно пересесть на скалу, чтобы много не писать.

Java вообще невнятное говно, где нет офф репозитория, и все пихают в проекты непонятные jar'ы.

В основном магазине либ (бесплатные) всё с ЭЦП и без троянов. Ты отстал от жизни.

И да: с чего ты взял, что твой дистриб проводит аудит всех-всех пакетов.

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

Уроки то на завтра сделал перед тем, как свободно идти клоунадить на ЛОР? Дальше не читал.

Пишу из офиса с мраморными полами, стеклянными лифтами, за огроменным столом с макбуком про и рабочей станцией на 3 моника. Ах да, прошу прощения: в замкадье это - роскошь, а не обыденность, поэтому оставлю при себе.

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

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

ya, no trolling

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

NodeJS уже рип в принципе

лол, тебе в дурку интернет провели что-ли?

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

В 21-ом веке важнее масштабируемость, посмотри тут мой порт про брокера сообщений.

Я сам решу что мне важнее. Потом, проблемы масштабируемости никогда не стояло - будет нужно масштабировать, я запущу N воркеров на M серверах и получу N * M прирост. Никакие асинхронности мне нахрен не сдались, мне нужно чтобы страница из сотни ссылок не рендерилась секунду.

Есть php, нода, ну а если есть деньги, то ява и скала.

Я не понимаю зачем писать на этом. php, например, не язык вообще.

инфраструктура офигенная, библиотеки все высокого качества, XEP-стандарт на любой чих, высокая скорость работы после прогрева кэша или при компиляции до исполнения. Память стоит копейки. Высокий уровень безопасности

Типичный java маркетинговый буллшит. И память не стоит копейки. Копейки стоит VPS с 512MB который на нормальном языке будет обслуживать тыщи RPS, а на жаве ноль, потому что она там не развернётся.

И да: с чего ты взял, что твой дистриб проводит аудит всех-всех пакетов.

Мне не нужен аудит. Мне нужно чтобы все использовали то же что и я. Это даёт какую-то уверенность. А ЭЦП можно только подтереться.

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

Go сейчас это тоже самое, что и ROR в 2013 году для веба. Скоро отпустит

Не факт. Ruby плохо годится для мейнстрима, очень уж w/o язык. А вот Go в этом смысле конкурент Java и Python.

...

Хотя бывают исключения, JS ещё хуже, чем Ruby в плане строгости и читаемости, но вон как взлетел :)

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

Ruby плохо годится для мейнстрима, очень уж w/o язык

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

Расскажи это shopify, github и сотням других очень крупных проектов.

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

Типичный java маркетинговый буллшит.

Дададада, именно поэтому javacard используется в твоей кредитке, а транзакции на яве на IBM-мейнфрейме обновляются.

И память не стоит копейки. Копейки стоит VPS с 512MB который на нормальном языке будет обслуживать тыщи RPS, а на жаве ноль, потому что она там не развернётся.

Если тебе нужно обрабатывать тыщи RPS, то либо для тебя память стоит копейки, либо твой проект ничего не стоит. Вот вся суть IT 21-го века.

Мне не нужен аудит. Мне нужно чтобы все использовали то же что и я. Это даёт какую-то уверенность. А ЭЦП можно только подтереться.

Тогда чего ты тут забывал? Десяточку себе ставь и сливай все данные.

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

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

Но удержаться не реально, верно? Это как бигтейсти в макдаке.

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

А ты что думаешь? Тяжелый энтерпрайз против легковеского говна?

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

Быстрый, хорошо читаемый, простой (недорогие разработчики), хорошо документирован, крутая стандартная библиотека. Во многих случаях - то что доктор прописал.

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

тебе нужно обрабатывать тыщи RPS, то либо для тебя память стоит копейки, либо твой проект ничего не стоит. Вот вся суть IT 21-го века.

Если ты не в курсе, тыщи RPS это копейки, если в медленные хранилища не надо лазить, и на любом языке на имеющим оверхеда в сотни раз относительно нативного кода написать приложение отдающее столько запросов с копеечной vps'ки - тривиальная задача. Но вот у питона эти сотни оверхеда есть.

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

мне нужно чтобы страница из сотни ссылок не рендерилась секунду

Не пробовал профайлер запускать? Flask под pypy может не то, что сотню - тыщ пятьдесят за секунду ссылок вставить. К тому же есть быстрые шаблонизаторы типа Mako, и JSON + Vue.

menangen ★★★★★
()

ИТТ люди делят языки на «асинхронные» и «не асинхронные», выдавая асинхронность за позитивную фичу. Это значит:

  • «не асинхронный» язык - это тот, где нет указателей на функции, замыканий или анонимных классов? Покажите мне такой, пожалуйста
  • «асинхронный» - это тот, где нету никакого способа сделать корутину, зелёный тред, continuation, или что либо ещё подобное, и единственный способ работать с вводом-выводом без создания миллионов ОС-тредов, это callback hell — коллбек, ставящий коллбек на коллбек, убирающий коллбек, да? Это важный критерий крутости языка, верно?
anonymous
()

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

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

Пишу из офиса с мраморными полами, стеклянными лифтами, за огроменным столом с макбуком про и рабочей станцией на 3 моника.

А! Так ты профессиональный миньетчик! Ударник труда? :-)))

anonymous
()

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

Согласен. Зато есть аргументы для хипстоты, что даже создатель открещивается от ноды :)

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