È stato rilasciato il nuovo ErgoFramework 2.2, che implementa un completo stack di rete Erlang e la sua libreria OTP nel linguaggio Go. Il framework fornisce agli sviluppatori uno strumento flessibile dal mondo Erlang per creare soluzioni distribuite in Go utilizzando modelli di progettazione generali come gen.Application, gen.Supervisor e gen.Server, oltre a modelli specializzati come gen.Stage (pub/sub distribuito), gen.Saga (transazioni distribuite, implementazione del modello di progettazione SAGA) e gen.Raft (implementazione del protocollo Raft).
Inoltre, il framework offre funzionalità di proxy con crittografia end-to-end, non disponibili in Erlang/OTP e Elixir. Poiché nel linguaggio Go non esiste un'analogia diretta con i processi Erlang, il framework utilizza goroutine come base per gen.Server, con un wrapper 'recover' per gestire situazioni eccezionali. Il codice del progetto è distribuito con licenza MIT.
Lo stack di rete in ErgoFramework implementa completamente la specifica del protocollo DIST di Erlang. Ciò significa che le applicazioni basate su ErgoFramework possono lavorare nativamente con qualsiasi applicazione scritta in linguaggi di programmazione Erlang o Elixir (esempio di interazione con un nodo Erlang). È importante notare che il modello di progettazione gen.Stage è implementato secondo le specifiche di Elixir GenStage ed è completamente compatibile con esso (esempio di implementazione).
Nel nuovo rilascio:
- Aggiunti nuovi modelli
- gen.Web — modello di progettazione per Web API Gateway (noto anche come Backend For Frontend). Esempio.
- gen.TCP — modello che consente di implementare un pool di accettatori di connessioni TCP con il minimo sforzo di scrittura del codice. Esempio.
- gen.UDP — simile al modello gen.TCP, ma per il protocollo UDP. Esempio.
- Introdotta una nuova funzionalità Events con l'implementazione di un semplice bus di eventi all'interno del nodo, che consente di creare meccanismi di scambio eventi (pub/sub) tra processi locali. Esempio.
- Aggiunta la supporto per la registrazione dei tipi, che consente la serializzazione/deserializzazione automatica dei messaggi nel tipo di dati nativo di Golang. Ciò significa che non sarà più necessario utilizzare etf.TermIntoStruct per ogni messaggio ricevuto. I tipi registrati saranno trasformati automaticamente nel tipo specificato, il che accelera significativamente le prestazioni dello scambio di messaggi tra nodi distribuiti.
Fonte: opennet.ru
