Состоялся очередной релиз 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).
Помимо этого, фреймворк предоставляет функциональность прокси с возможностью сквозного шифрования, недоступного в Erlang/OTP и Elixir. Поскольку в языке Go отсутствует прямой аналог процесса Erlang, то во фреймворке используются goroutine как основы для gen.Server с обёрткой “recover” для возможности обработки исключительных ситуаций. Код проекта распространяется под лицензией MIT.
Сетевой стек в ErgoFramework полностью реализует спецификацию DIST протокола Erlang. Это значит, что приложения, написанные на основе ErgoFramework нативно работают с любыми приложениями, написанными на языках программирования Erlang или Elixir (пример взаимодействия с Erlang нодой). Стоит также отметить, что шаблон проектирования gen.Stage реализован по спецификации Elixir GenStage и полностью совместим с ним (пример реализации).
В новом выпуске:
- Добавлены новые шаблоны
- Предложена новая функциональность Events с реализацией простой событийной шины внутри ноды, которая позволяет создавать механизмы обмена событиями (pub/sub) среди локальных процессов. Пример.
- Добавлена поддержка регистрации типов, которая позволяет автоматически проводить сериализацию/десериализацию сообщений в нативный тип данных Golang. Это значит больше не нужно использовать etf.TermIntoStruct для каждого полученного сообщения. Зарегистрированные типы будут трансформированы в заданный тип автоматически, что значительно ускоряет производительность обмена сообщениями между распределёнными нодами.