Se ha realizado el lanzamiento de ErgoFramework 2.2, que implementa la pila de red completa de Erlang y su biblioteca OTP en el lenguaje Go. El marco de trabajo proporciona al desarrollador un conjunto de herramientas flexibles del mundo de Erlang para crear soluciones distribuidas en el lenguaje Go utilizando plantillas de diseño de propósito general como gen.Application, gen.Supervisor y gen.Server, así como especializadas: gen.Stage (pub/sub distribuido), gen.Saga (transacciones distribuidas, implementación del patrón de diseño SAGA) y gen.Raft (implementación del protocolo Raft).
Además, el marco ofrece funcionalidad de proxy con la posibilidad de cifrado de extremo a extremo, algo no disponible en Erlang/OTP y Elixir. Dado que en el lenguaje Go no existe un análogo directo del proceso de Erlang, se utilizan goroutines como base para gen.Server con un wrapper de «recover» para permitir el manejo de excepciones. El código del proyecto se distribuye bajo la licencia MIT.
La pila de red en ErgoFramework implementa completamente la especificación del protocolo DIST de Erlang. Esto significa que las aplicaciones escritas con ErgoFramework funcionan de forma nativa con cualquier aplicación escrita en los lenguajes de programación Erlang o Elixir (ejemplo de interacción con un nodo Erlang). También vale la pena mencionar que el patrón de diseño gen.Stage se ha implementado según la especificación de Elixir GenStage y es totalmente compatible con él (ejemplo de implementación).
En esta nueva versión:
- Se han añadido nuevas plantillas
- gen.Web — patrón de diseño Web API Gateway (también conocido como Backend For Frontend). Ejemplo.
- gen.TCP — patrón que permite implementar un pool de aceptadores de conexiones TCP con un esfuerzo mínimo en la escritura de código. Ejemplo.
- gen.UDP — similar al patrón gen.TCP, pero para el protocolo UDP. Ejemplo.
- Se ha propuesto una nueva funcionalidad de Eventos con la implementación de un bus de eventos simple dentro del nodo, que permite crear mecanismos de intercambio de eventos (pub/sub) entre procesos locales. Ejemplo.
- Se ha añadido soporte para la inscripción de tipos, que permite realizar automáticamente la serialización/deserialización de mensajes en el tipo de datos nativo de Golang. Esto significa que ya no es necesario usar etf.TermIntoStruct para cada mensaje recibido. Los tipos registrados se transformarán automáticamente en el tipo especificado, lo que acelera considerablemente el rendimiento del intercambio de mensajes entre nodos distribuidos.
Fuente: opennet.ru
