Gastón Rey (Full Stack Developer) nos deleitó con esta charla introductoria a Elixir. Nos dio un paseo muy detallado y claro, explicando qué es, cómo funciona, y qué ventajas - enormes - ofrece este lenguaje, engranado sobre la impresionante máquina virtual de Erlang. Lamentablemente hubo un accidente con la grabación (el sonido), y se perdió el contexto de la detallada explicación que nos ofreció. No obstante, para quienes asistieron a la charla, en el video (al pie de página) se aprecian los momentos de live coding en los cuales Gastón nos hizo una breve demostración de uso (baby steps), que aún se pueden rescatar.
En la primera parte, Gastón nos cuenta qué es Elixir y de dónde proviene. Un lenguaje de programación funcional, concurrente y de uso general, que se ejecuta en la máquina virtual BEAM, utilizada originalmente para implementar el lenguaje de programación Erlang. Elixir se basa en Erlang y comparte las mismas abstracciones para crear aplicaciones distribuidas, mantenibles y tolerantes a fallos (de funcionamiento ininterrumpido).
A continuación las diapositivas compartidas en la presentación y un extracto resumen de la charla
Elixir fue creado por José Valim en el año 2012 como un proyecto de investigación y desarrollo en Plataformec, la consultoría de software de la que es co-fundador, especializada en Elixir, Ruby y Agile. José Valim además es miembro del Ruby on Rails Core Team. Su objetivo era crear un lenguaje que permitiera una alta extensibilidad, disponibilidad, y productividad, en la máquina virtual BEAM manteniendo compatibilidad con el ecosistema de Erlang. Éste último fue diseñado por Joe Amstrong en 1986, mientras trabajaba en el laboratorio de computación de la conocida compañía de telefonía, Ericsson.
Algunas características de Elixir que cabe destacar
Por si fuera poco, además de todo lo anterior, Elixir provee todo un ecosistema de herramientas entre las cuales se encuentra Phoenix, su framework server-side web MVC. Es tan fácil de usar como cualquiera de los frameworks habituales (como Rails en Ruby y Django en Python), pero está respaldado por BEAM, lo cual le permite producir aplicaciones web de una manera disruptivamente eficiente, sin comprometer la velocidad del procesamiento, ni la capacidad del mantenimiento.
Los procesos de Elixir / Erlang son tan livianos y eficientes para resolver problemas de concurrencia y escalabilidad en los servicios web, que gracias a ello Phoenix puede lograr 2 millones de conexiones WebSocket en una sola máquina, una capacidad que se puede multiplicar distribuyendo el tráfico en más nodos. Esto es posible mediante su capa más alta de abstracción de componentes para comunicaciones en tiempo real, denominada Channels.
En un momento de la charla contamos con la participación de Franco Catena (Ingeniero de Software, con más de 10 años de experiencia en Ruby / Rails), quien nos confirmó a partir su propia experiencia en Elixir, todas las ventajas ya descritas que ofrece esta tecnología. Franco ha migrado completamente una plataforma de ventas y transacciones online (Teiqui, de la cual es el CTO), inicialmente montada en Ruby / Rails, a Elixir / Phoneix. No sólo nos comparte lo ágil y rápida que ha sido la transición, sino también que los resultados han sido impresionantes: "el consumo de recursos y el tiempo de respuesta ha mejorado en un orden de magnitud de 10 a 1, e incluso menos". Sin duda sus palabras despiertan aún más admiración por esta tecnología.
Por último, Gastón nos muestra el LiveDashboard de Phoneix, que ya viene de serie integrado en él, y proporciona excelentes herramientas de depuración y monitoreo del rendimiento de procesos - en tiempo real - para los desarrolladores de Phoenix. Entre otras cosas, este dashboard permite obtener información general del sistema operativo y de la máquina (CPU, Memoria Disco), métricas de los procesos activos (visualizando en tiempo real eventos mediante gráficos), recuperar logs de las conexiones establecidas, buscar / filtrar / y visualizar / puertos y sockets abiertos en un nodo, también aplicaciones y procesos, etc ...
Pero no todo es color de rosa en Elixir. Gastón nos concluye que aún queda mucho trabajo por delante, especialmente en lo que respecta a la madurez de su ecosistema y su comunidad, que aún está en proceso, y depende en gran medida del soporte de los desarrolladores y adeptos a la tecnología. En contraposición, Ruby / Rails y Django / Python tienen un recorrido largo, de más de 15 años de vida, que ofrece aún mucha ventaja en cuanto a proveer soluciones pre-fabricadas, ya listas para ser integradas en una aplicación. Aún así, los beneficios que puede proporcionar Elixir - a corto, medio, y largo plazo - apuntan con creciente certeza a superar los costos.
Para finalizar, entre los asistentes a la charla estaban Ruben Vidales (Backend Developer) y Carlos Domínguez (Full Stack Developer), quienes preguntaron respectivamente sobre la posibilidad de desarrollar en Elixir utilizando un contenedor como Docker (para agilizar el despliegue y configuración de dependencias sin tener que hacerlo manualmente), y el soporte de Elixir en los IDEs de JetBrains (IntelliJ, Rubymine, ... para facilitar la asistencia en el desarrollo). Gastón confirmó que sí, que ambas cosas estan disponibles, y por tanto se puede disponer de ellas en la red (Docker Official Images for Elixir / Elixir Plugin for JetBrains).
elixir language concurrency scalability fault-tolerance