Состоялся очередной релиз ErgoFramework 2.2, реализующего полный сетевой стек Erlang и его библиотеку OTP на языке Go. Фреймворк предоставляет разработчику гибкий инструментарий из мира Erlang для создания распределённых решений на языке Go с помощью готовых шаблонов проектирования общего назначения gen.Application, gen.Supervisor и gen.Server, а также специализированных - gen.Stage (distributed pub/sub), gen.Saga (distributed transactions, реализация шаблона проектирования SAGA) и gen.Raft (реализация протокола Raft)...Подробнее: https://www.opennet.me/opennews/art.shtml?num=57933
Круто!
Интересно а аналог такой штуки есть в мире .net?
Акторная модель много где реализована.
А аналога ОТР не видел.
.net не функциональный язык. В Функциональных языках нет парадигмы присваивания, а значит они очень хорошо. Аналог на не функциональном языке написать невозможно даже на Карбоне.
.NET вообще не язык, а F# вполне себе
Бред больного. Под капотом у твоего функционально го яп что? Правильно, обычная императивщина.
Orleans, akka.net
Есть ещё неплохой proto.actor (для .NET, Go, Kotlin) от одного из создателей akka.net, но это всё-таки не совсем альтернатива OTP.
Молодец! 👍
Как по производительности в сравнении с нодой например?
Чтобы оно было лучше надо надо очень много железа.
> надо больше одного ядраПофиксил. Жаль не каждому онаниму такая роскошь доступна.
Где такие роскошества в наше время взять. Всё на самых дешевых впсках крутится.
Впска с двумя ядрами стоит от 200 рублей. Вполне можно себе позволить.
В сравнении с эрланговой? В разы быстрее. У ерланга сетевой стек медленный, впрочем как и его бим машина. Бенчи показывают в среднем в 5 раз быстрее ерланга в части сетевого обмена сообщениями
EroFramework на Rust будет?
Прям этот фреймворк и на расте, чтобы прям с эрланговскими нодами работало по их протоколам - наверное нет, если ты не возьмешься. Но оно и не нужно наверное, если у тебя еще нет в продакшене крутящихся Erlang-систем. На расте и так есть фреймворки, основанные на модели акторов и некоторые с навеянной с экрланга моделью Supervisor - запусками/перезапусками/восстановлением легковесных "процессов" (которые корутины). Например, bastion и actix.Bastion: Fault-tolerant Runtime for Rust applications
Bastion is a highly-available, fault-tolerant runtime system with dynamic dispatch oriented lightweight process model. It supplies actor model like concurrency with primitives called lightproc and utilize all the system resources efficiently with at-most-once message delivery guarantee.
Features
Message-based communication makes this project a lean mesh of actor system.
Without web servers, weird shenanigans, forced trait implementations, and static dispatch.
Runtime fault-tolerance makes it a good candidate for distributed systems.
If you want the smell of Erlang and the powerful aspects of Rust. That’s it!
Completely asynchronous runtime with NUMA-aware and cache-affine SMP executor.
Exploiting hardware locality wherever it is possible. It is designed for servers.
Supervision system makes it easy to manage lifecycles.
Kill your application in certain condition or restart you subprocesses whenever a certain condition is met.
Automatic member discovery, cluster formation and custom message passing between cluster members.
Using zeroconf or not, launch your bastion cluster from everywhere, with a single actor block.
Proactive IO system which doesn’t depend on anything other than futures.
Bastion’s proactive IO has scatter/gather operations, io_uring support and much more…Guarantees
At most once delivery for all the messages.
Completely asynchronous system design.
Asynchronous program boundaries with fort.
Dynamic supervision of supervisors (adding a subtree later during the execution)
Lifecycle management both at futures and lightproc layers.
Faster middleware development.
Above all “fault-tolerance”.
Непонятная штука. Видимо пригодится для спаривания ерланга и го если не хочется грпц и нгинксов. Но нет, спасибо
ты ерланг с отп в глаза не видел, но судить берешься. классика опеннет