Випуск фреймворку для створення мережевих програм ErgoFramework 2.2

Відбувся черговий реліз 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 та повністю сумісний з ним (приклад реалізації).

У новому випуску:

  • Додані нові шаблони
    • gen.Web - шаблон проектування Web API Gateway (також відомий як Backend For Frontend). приклад.
    • gen.TCP — шаблон, що дозволяє реалізовувати пул акцепторів TCP з'єднань з мінімальними зусиллями написання коду. приклад.
    • gen.UDP — аналогічний шаблону gen.TCP, лише протоколу UDP. приклад.
  • Запропоновано нову функціональність Events з реалізацією простої подійної шини всередині ноди, що дозволяє створювати механізми обміну подіями (pub/sub) серед локальних процесів. приклад.
  • Додано підтримку реєстрації типів, яка дозволяє автоматично проводити серіалізацію/десеріалізацію повідомлень у нативний тип даних Golang. Це означає, що більше не потрібно використовувати etf.TermIntoStruct для кожного отриманого повідомлення. Зареєстровані типи будуть трансформовані на заданий тип автоматично, що значно прискорює продуктивність обміну повідомленнями між розподіленими нодами.

Джерело: opennet.ru

Додати коментар або відгук