LINUX.ORG.RU

Ergo Framework 3.2

 , , , ,


0

2

Фреймворк представляет собой реализацию концепций Erlang для разработки на Go, построенный на модели акторов с сетевой прозрачностью и готовыми компонентами.

Основные возможности в этой версии

  • mTLS — новый интерфейс gen.CertAuthManager для взаимной аутентификации с управлением CA пулами
  • NAT traversal — опции RouteHost и RoutePort для узлов за NAT или балансировщиками
  • Контроль времени запускаInitTimeout ограничивает время инициализации процессов (локально и удаленно)
  • Shutdown timeout — контролируемое завершение узла с логированием зависших процессов
  • pprof labels — каждая горутина актора маркируется PID для отладки через pprof

Новые акторы (Extra Library)

  • Leader — распределенные выборы лидера с консенсусом в стиле Raft. Автоматический failover, защита от split-brain через кворум большинства
  • Metrics — экспортер метрик Prometheus с автоматическим сбором телеметрии узла и сети

Новые мета-процессы

  • SSE (Server-Sent Events) — однонаправленный стриминг сервер-клиент по HTTP с полной поддержкой спецификации SSE

Производительность

  • Локально: 21M+ сообщений/сек
  • По сети: ~5M сообщений/сек
  • Distributed Pub/Sub: 2.9M сообщений/сек доставка 1,000,000 подписчикам на 10 узлах (10 сетевых сообщений вместо 1M)

Исправления

  • Критический баг: сигналы завершения (Link/Monitor exits) некорректно отклонялись из-за неверной валидации incarnation в сетевом слое

Документация

Полностью переписана и включена в репозиторий. Новые статьи:

  • Project Structure — организация проектов с уровнями изоляции сообщений
  • Building a Cluster — пошаговое руководство по распределенным системам
  • Message Versioning — эволюция контрактов сообщений в кластерах
  • Debugging — build tags, pprof, отладка зависших процессов

Ссылки

>>> Список изменений

★★★

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

А есть где-то обзорное сравнение с аналогами? Потому что с ходу не очевидно зачем делать на фреймворке аналог temporal если можно просто развернуть temporal и сразу писать нужный код.

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

Легко. Смотри бенч пабсаба

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

Еще раз. Это фреймворк. Сравнивать с темпоралом - яблоки с апельсинами :)

Близкое, с чем сравнивать - ерланг. По перформансу даже можно не смотреть. Ерланг медленный. По фичам - смотря по каким. В ерго есть куча того, чего нет у ерланга. У ерго нет только изоляции процессов, которые есть в биме ерланга. На этом сравнение закончилось

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

Еще раз. Это фреймворк.

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

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

Давай сойдемся на том, что тебе эта «хрень» не нужна.

PS если внезапно любопытство возьмет верх, прочитай про акторную модель. Станет понятней что эта «хрень» делает и что позволяет с ее помощью сделать

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

Вы не сможете объяснить людям зачем он, слишком специфическая ниша, просто потому что сначала придется объяснять акторную модель, потом почему хорош Erlang и в конце почему Erlang плох и пришлось эти концепции реализовывать на Golang. Людей которые поймут о чем вы на этом форуме исчезающе мало, к сожалению. Ну не пишут они продукты такого уровня, не нужна им такая скорость и нет такой нагрузки на проектах.

А продукт у вас крутой, да.

Я если честно удивлен почему его никто еще не переписал на Rust (сейчас беседа оживится).

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

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

А так, да, такие технологии используются в зрелых компаниях, которые понимают что это и для чего. Где понимают, насколько оно дает абстракцию для работы только над бизнес логикой, не думая про транспорт, апи и весь остальной геморрой хттп стейтлес говна

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

Я когда то писал на erlang, собственно OTP и let it crash это обязательная база для любого кто пишет многопоточку и распределенные приложения. У меня были примеры в работе когда компания тупо выкидывала год разработки и переписывала проект уже на модели акторов(~40 разработчиков), самое забавное было что я им с самого начала компосировал мозг на эту тему, в итоге оказался прав.

Абстрактный пример реализации ПО на подобной базе это k8s, хоть он и не использует данный фрэймворк. Сама концепция k8s это реализация OTP заточенная на верхние уровни абстракции. Понятно что не все, и есть расхождения, но моя реакция на кубер когда я его в первый раз потрогал была именно такая.

По сабжу вы молодец.

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

Ну и все же не realtime а soft realtime. )) Про проще соглашусь, а насчет мощнее тема дискуссионная. У меня на кластер из 8 машин идет поток 200-300к http запросов в секунду, тот же soft realtime (RTB, время ответа с жесткими ограничениями) Если честно то я сомневаюсь что ergo тут сильно поможет. Сделать код проще он возможно поможет, но думаю что железа придется добавлять.

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

но с помощью ерго ты легко можешь сделать

zabbal ★★★★☆ (04.02.26 19:22:15 MSK) растофил

не, вряд ли… 🤭

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

Мне кажется уже давно устоялось, что под realtime подразумевается софтовый поскольку hard realtime это очень узкий спектр в индустрии. Разумеется я про софт говорю.

На счет метрики 200,500к рпс на современных мощностях давно не проблема. Даже на простых впсах. Всегда требуется учет объема логики на стороне обработки этих запросов. Простой эхо бенч на ерго локально (для хттп) мне давал 600к. И это при том что под капотом стандартный хттп сервер го. Ерго просто добавлял небольшую прокладку в виде преобразования синхронного запроса в мессаджинг. Тлдр - ерго про дизайн рапределенного бекэнда, а не про одноклеточный эндпоинт хттп сервера.

ergo ★★★
() автор топика

Документации на русском, от русскоязычного разработчика, конечно же не существует.

Xintrea ★★★★★
()
go: downloading ergo.services/tools/ergo v0.0.0-20230425193730-ee3821281283
go: downloading ergo.services/tools v0.0.0-20250908123936-277f20dc5141
go: ergo.services/tools/ergo@latest: version constraints conflict:
	ergo.services/tools@v0.0.0-20250908123936-277f20dc5141: parsing go.mod:
	module declares its path as: ergo.tools
	        but was required as: ergo.services/tools
go: ergo.services/tools/observer@latest: version constraints conflict:
	ergo.services/tools@v0.0.0-20250908123936-277f20dc5141: parsing go.mod:
	module declares its path as: ergo.tools
	        but was required as: ergo.services/tools


#!/bin/bash

DIR=`pwd`/extra
export GOPATH=$DIR
export GOBIN=$HOME/go/bin

sudo rm -rf go.mod go.sub $DIR

go install ergo.services/tools/ergo@latest
go install ergo.services/tools/observer@latest

sudo rm -rf go.mod go.sub $DIR

Такое уже давно.

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

Документации на русском, от русскоязычного разработчика, конечно же не существует.

Какой-то наброс. Конечно же не существует и не будет. Но вы можете оплатить эту работу и она появится.

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

Не все компоненты экосистемы вокруг еще обновлены. В процессе. На днях закончу

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

Я работал и с soft и с hard, посему уточняю, много людей вообще не задумываются над различиями и не понимают разницы, уж больно разные вселенные, эхо рассматривать не будем ))

RTB же, торговля на бирже логика + синхронизация + ml в наличии ) Типовая архитектурная схема это само приложение + aerospike для кэша - синхронизации + кафка или еще что для аккумулирования данных в какой нибудь кликхаус и большой бэекнд вне этого для тренировки моделей для торговли. Но это типовая…..

Это все вполне укладывается на ваш фрэймворк. )) Но с нуля такое пишется редко а теми кто знает ОТП еще реже ))

chemistmail
()

Странно, что ссылка на сайт редиректит на страницу орги на гитхабе. Для стороннего человека это ничего не даёт, а только путает. Захочу я менеджеру скинуть ссыль для ознакомления в общих чертах, а толку? Можно и навайбкодить лэндинг то.

lor-login
()
Ответ на: комментарий от lor-login

Можно и навайбкодить лэндинг то

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

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

их вагон и еще тележка. но я не видел бенчмарков по ним в части сетевого перформанса. локально только actix показывает 11М и это не понятно на каком железе. возможно у кого-то есть цифры с пруфами. не искал ибо не интересно.

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

Документации на русском, от русскоязычного разработчика, конечно же не существует.

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

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

так на rust уже ractor есть

А еще Actix, Tokio, Rocket и тд. Но всех их объединяет одно - недоделанность до продакшн применения. У одних нет сетевой прозрачности, вторые дают скудный функционал как для фреймворка, третьи вообще вещь в себе без какого-то развития. Да и все как один они заточены больше под Web-API в том или ином виде.

Ergo буквально на голову выше их всех.

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

Ну, вообще, если сделать сравнительную табличку с возможностями/тестами для Ergo и растоподелий, то это может дать хороший буст в использовании вашего продукта. Инженеры сразу смогут кидать эту табличку в лицо своим CTO/менеджерам. Но это так, просто мысли вслух.

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

Какой-то наброс. Конечно же не существует и не будет. Но вы можете оплатить эту работу и она появится.

Звучит странно: вы выросли в русскоязычной среде, думаете на русском, с помощью русского языка строите у себя в голове сложные абстракции. И когда речь заходит о документации на предмет, который вы сделали с помощью русского языка, вы заявляете: «Конечно же документации на русском не существует и не будет». Таким образом, вы сами себе палки в колеса вставляете: вместо того, чтобы емко и точно описать систему на родном языке, вы делаете суррогат на буржуинском.

А могли бы не доку, а книжку о своей системе написать на русском, но, видимо, адопшен в Раше вас не интересует.

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

вот и сравните со своим, покажите что actix в сравнении с вашим тормоз

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

мне в принципе не очень нравится идея «у меня длиннее, чем у…». наиболее правльная форма - «у меня вот такой длины». оставляя пользователю сделать самому операцию сравнения.

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

У ерго нет только изоляции процессов

Фатальный недостаток

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

А замена версий кода на работающей системе?

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

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

ерланг это не про скорость, это в первую очередь 6 миллисекунд downtime за 20 лет работы системы, а это, минуточку 99.99999.

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

это в первую очередь 6 миллисекунд downtime за 20 лет работы системы, а это, минуточку 99.99999.

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

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

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

эти цифры это маркетинг далекий от реальности, вам ни один комерческий цод 99.999 никогда не даст…. а промежуточные узлы и того меньше….. bgp, да даже arp в l2 сетке также таких цифр не вытянет.

Различайте маркетинг и реальность, особенно когда маркетинг не согласовывается с реальностью.

И на тему всех этих живая перезагрузка кода и тд. Не ну код наживую перезалить базара нет, просто и удобно… Но если речь идет про состояние внутри…. Это сложно, прям вот сложно. И соответственно дорого, прям очень дорого.

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

Он прикольный, он удобный (гдето) Его легко поддерживать, он простой, он медленный, он не типизированный.

Он не пуля вообще. Вернее пуля но не больше чем любой другой язык.

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

Звучит странно: вы выросли в русскоязычной среде, думаете на русском, с помощью русского языка строите у себя в голове сложные абстракции.

Откуда вы это знаете? Сегодня знание двух языков — непозволительная роскошь? Что насчёт тех людей, кто разговаривает на трёх языках? И почему второй язык должен обязательно ограничить, а не наоборот расширить концептуальные способности носителя?

адопшен в Раше вас не интересует

Если вас это так обижает, кажется, речь идёт не о логике и абстракциях, а о подчинении своему племени.

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

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

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

Что насчёт тех людей, кто разговаривает на трёх языках?

Я могу заказать еду или поговорить с парикмахеров на трёх языках. Это вообще не показатель.

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

адопшен в Раше вас не интересует

Учитывая простой факт, что человек в одно лицо, практически, пилит проект много лет https://github.com/ergo-services/ergo/graphs/contributors

То докапываться про отсутствие документации на русском - бредовище

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

Где-то мне попадались ребята у которых стейт 60гигов. Любопытно посмотреть хот релоад для их случая)).

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

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

Если быть точным, то буквально:)

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

Учитывая простой факт, что человек в одно лицо, практически, пилит проект много лет

В этом месте читатель, видимо, должен разрыдаться прослезиться от умиления?.. ;))

Ну, пилит - и пилит. Сам же пилит, добровольно... :)

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

Ну автор работает на буржуинов, очевидно же. Учитывая специфику, это может и какая-то военщина натовская, что совсем уже прекрасно. Ну или всё это просто очередное ненужно в вакууме, тогда всем тем более пофиг.

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

не пуля вообще

Скорее удивительно, что такое днище вообще как-то работает. Весь телеком крепится на соплях, как впрочем и вся эта долбанутая цивилизация.

bread
()

У меня более 10 текущих проектов в работе, и есть большое количество проектов которые я сопровождал на протяжении их жизненного цикла, до смерти проекта или до его продажи.

В нынешнем мире, типовой проект. берем базу, начинаем ее обкладывать микросервисами, для взаимодействия между ними берем какой нибудь grps или обычный http в особо упоротых случаях, потом оно перестает справляться, добавляем пару редисов или аналогов, потом нам требуются очереди, мы заюзываем их в редисе или в базе, но это нам не помогает, добавляем кафку и далее по вкусу. В процессе разработки перекладываем все это в кубер, иначе управлять всем этим хозяйством становится сложно. Через три четыре года у нас около 30 микросервисов, пара баз, кластер кафки, пара тройка редисов и мы испытываем проблемы с производительностью. Вспоминаем про мониторинг, трэйсинг и логирование которое админы запилили давным давно но которое никто не использовал особо, начинаем обкладывать все метриками….. Судорожно впиливаем трэйсинг. Проблемы остаются, но теперь эпизодически понятно где они и что тыкать….

При этом сам проект по сути это база вокруг которой накрученно логика для взаимодействия с базой по http(s).

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

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

При чем тут ergo вы меня спросите? Можно выкинуть кубер, можно выкинуть grpc, можно выкинуть кафку, можно львиную долю накрученного выкинуть и получить масштабируемый проект. Да будет больно, сам фрэймворк вас будет заставлять следовать определенным архитектурным принципам, но вы же умные, вы не хотите использовать то что до вас придумали. Велосипед с квадратными колесами наше все, поэтому мы с радостью допишем 31 микросервис который забирает сообщения с кафки, кэширует их в редисе записывает их во всю ту же базу и отправляет какой нибудь пуш пользователю, потом еще месяц будем эпизодически обнулять очередь в кафке когда чет сломалось, а по прошествии попросим премию, за 31 микросервис…..

Тем более что кроме вас никто не понимает как это все работает…..

Шах и мат…. я же сениор… я так вижу…

Кто себя узнал? )))

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

Ну вот тут обидно… erlang достаточно приятный язык… И телеком давно его не использует, медленный он.

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

Ну любая база это дефакто стэйт… То есть любая миграция схемы это хот релоад. )) Каждая сотая статья на условно хабре - как я поломал сервис запустив миграцию… И мы доблестно его починили за ночь. ))

У меня есть пара постгресов по терабайту, и пара кликхаусов терабайт по 40, каждая пятая миграция на таких объемах проблемная )) абстракции текут…

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

Ну давай попробуем.

Actor Model: isolated processes communicate through message passing, handling messages sequentially in their own mailbox with four priority queues. Processes support both asynchronous messaging and synchronous request-response patterns, enabling flexible communication while maintaining the actor model guarantees

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

Network Transparency: actors interact the same way whether local or remote. The framework uses custom serialization and protocol for efficient distributed communication with connection pooling, compression, and type caching, making network location transparent to application code.

Что тут, grpc и подобное можно не прикручивать, сервисы из кубера похоже тоже не нужны, да и вообще оверлэй сетка из кубера не нужна, кирпичик два.

Supervision Trees: hierarchical fault recovery where supervisors monitor child processes and apply restart strategies when failures occur. Supports multiple supervision types (One For One, All For One, Rest For One, Simple One For One) and restart strategies (Transient, Temporary, Permanent) for building self-healing systems.

А вообще кубер нам для перезапуска нужен? похоже что нет.

Distributed Systems: service discovery through embedded or external registrars (etcd, Saturn), distributed publish/subscribe events with token-based authorization and buffering, remote process spawning with factory-based permissions, and remote application orchestration across nodes.

убеждаемся что куб здесь нам точно не нужен.

Flexibility: customize network stack components, certificate management, compression and message priorities, logging, distributed events, and meta processes. Framework supports mTLS, NAT traversal, important delivery for guaranteed messaging, and Cron-based scheduling.

Даже крон свой есть + остальные плюшки.

что там у нас осталось, логика + база.

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

chemistmail
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.