Aconteceu o novo lançamento do ErgoFramework 2.2, que implementa toda a pilha de rede Erlang e sua biblioteca OTP na linguagem Go. O framework fornece ao desenvolvedor um conjunto flexível de ferramentas do mundo Erlang para criar soluções distribuídas na linguagem Go usando templates de design de uso geral gen.Application, gen.Supervisor e gen.Server, além de especializados — gen.Stage (pub/sub distribuído), gen.Saga (transações distribuídas, implementação do padrão de design SAGA) e gen.Raft (implementação do protocolo Raft).
Além disso, o framework oferece funcionalidades de proxy com capacidade de criptografia de ponta a ponta, não disponíveis em Erlang/OTP e Elixir. Como na linguagem Go não existe um análogo direto ao processo Erlang, o framework utiliza goroutines como base para gen.Server com uma camada de recuperação para possibilitar o tratamento de exceções. O código do projeto é distribuído sob a licença MIT.
A pilha de rede no ErgoFramework implementa completamente a especificação do protocolo DIST do Erlang. Isso significa que aplicações escritas com base no ErgoFramework funcionam nativamente com quaisquer aplicações escritas nas linguagens de programação Erlang ou Elixir (exemplo de interação com um nó Erlang). Também vale a pena notar que o padrão de design gen.Stage foi implementado conforme a especificação do Elixir GenStage e é totalmente compatível com ele (exemplo de implementação).
No novo lançamento:
- Novos templates adicionados
- gen.Web — padrão de design Web API Gateway (conhecido também como Backend For Frontend). Exemplo.
- gen.TCP — padrão que permite implementar um pool de aceitores de conexões TCP com mínimos esforços na escrita de código. Exemplo.
- gen.UDP — semelhante ao padrão gen.TCP, mas para o protocolo UDP. Exemplo.
- Foi proposta uma nova funcionalidade de Events com a implementação de um simples barramento de eventos dentro do nó, que permite criar mecanismos de troca de eventos (pub/sub) entre processos locais. Exemplo.
- Foi adicionada a suporte ao registro de tipos, que permite realizar automaticamente a serialização/deserialização de mensagens no tipo nativo de dados Golang. Isso significa que não há mais necessidade de usar etf.TermIntoStruct para cada mensagem recebida. Os tipos registrados serão transformados automaticamente no tipo especificado, o que aumenta significativamente o desempenho da troca de mensagens entre nós distribuídos.
Fonte: opennet.ru
