Состоялся очередной релиз ErgoFramework, реализующего полный сетевой стек Erlang и его библиотеку OTP на языке Go.
Фреймворк предоставляет разработчику гибкий инструментарий из мира Erlang для создания распределённых решений на языке Go с помощью готовых шаблонов проектирования общего назначения gen.Application
, gen.Supervisor
и gen.Server
. а также специализированных - gen.Stage
(distributed pub/sub), gen.Saga
(distributed transactions. реализация шаблона проектирования SAGA) и gen.Raft
(реализация протокола Raft).
Помимо этого, фреймворк имеет функционал прокси-подключения с возможностью end-to-end шифрования, недоступный в Erlang/OTP и Elixir. Пример использования можно посмотреть здесь
Поскольку в языке Go отсутствует прямой аналог процесса Erlang, то во фреймворке используются goroutine как основы для gen.Server
с обёрткой recover для возможности обработки исключительных ситуаций.
Сетевой стек в ErgoFramework полностью реализует спецификацию DIST протокола Erlang. Это значит, что приложения, написанные на основе ErgoFramework, нативно работают с любыми приложениями, написанными на языках программирования Erlang или Elixir. Пример взаимодействия с Erlang нодой.
Стоит также отметить, шаблон проектирования gen.Stage
реализован по спецификации Elixir GenStage и полностью совместим с ним. Пример реализации здесь
В новом выпуске:
-
Добавлены новые шаблоны
gen.Web
— шаблон проектирования Web API Gateway (также известный как Backend For Frontend). Пример его использования можно посмотреть здесь;gen.TCP
— шаблон, позволяющий реализовывать пул акцепторов TCP соединений с минимальными усилиями в написании кода. Пример;gen.UDP
— аналогично шаблону gen.TCP, только для UDP протокола. Пример использования.
-
Новый функционал
Events
— это простая реализация событийной шины внутри ноды, она позволяет создавать механизм обмена событиями (pub/sub) среди локальных процессов. Пример использования -
Регистрация типов. Позволяет автоматическую сериализацию/десериализацию сообщений в нативный тип данных Golang. Это значит, что больше не нужно испозовать
etf.TermIntoStruct
для каждого полученного сообщения. Зарегистрированные типы будут трансформированны в заданный тип автоматически, что значительно ускоряет производительность обмена сообщениями между распределенными нодами.
Полный список изменений можно посмотреть здесь.
Код проекта распространяется под лицензией MIT.
>>> Подробности