El asincronismo se generaliza: 7 herramientas de programación Reactiva que DEBES conocer

 ● 13th May 2015

11 min read

¿Cuáles con las herramientas más interesantes para ayudarte a ser Reactivo?

Si todo en esta vida se vuelve asíncrono, los silencios molestos dejarán de existir. La solución más utilizada hasta hace poco fue la mensajería. Desafortunadamente, nuestras aplicaciones de mensajería se están volviendo cada vez más y más sincrónicas con certificados tales como “última vez visto”, “escribiendo…” y “leído”, los silencios tan molestos ahora tienen su equivalente en el texto digital. ¡Viva la tecnología! </despotrique>
Lo bueno de todo este asunto es que los sistemas en que estas plataformas de mensajería se apoyan están encaminándose en la dirección exactamente opuesta, volviéndose más y más asíncronas y “message-driven”.
Espero no ser el único que note la ironía aquí.

 El asincronismo se generaliza

El Manifiesto Reactivo se ha puesto la meta de encontrar las palabras para poner por escrito las mejores prácticas arquitectónicas en la industria del software. Esa sabiduría que proviene de la experiencia adquirida en el día a día, haciendo que sistemas complejos dancen y se muevan alrededor de los datos en cuestión de milisegundos, bajo cargas altas. El texto representa lo que significa construir una aplicación moderna que cumple con los requisitos de hoy en día, asimismo señalando una manera de definir sus características. Dicho manifiesto fue publicado por Jonas Boner, con contribuciones de Martin Odersky, Roland Kuhn, Martin Thompson, Dave Farley y muchos más. A esta altura, ya ha sido firmado por… 9,795 9,809 9,831 9,851 desarrolladores. Primero, entonces, si aún no lo hiciste, firma el manifiesto y hagámoslo llegar a las 5 cifras. Puedes hacerlo ahora mismo; yo te estaré esperando aquí.

¿Qué significa precisamente ser Reactivo?

Esencialmente, se refiere a crear una aplicación que ofrezca buena respuesta – una aplicación que responda ágilmente y genere confianza en los usuarios. Una buena respuesta también implica un sistema que sabe cómo detectar problemas y tratar con ellos apropiadamente. Para lograr una buena respuesta, la aplicación deberá ser Resistente y Elástica. Resistente apunta a que se asegura de que cualquier fallo en una parte del sistema sea recuperable y de que no comprometa la respuesta del sistema. Elástica significa que puede ampliarse o reducirse para seguir respondiendo ante diferentes cargas de trabajo. La mejor forma de hacer esto posible es por medio de una arquitectura Message Driven basada en mensajes asíncronos de modo de construir componentes con bajo acoplamiento.
Podrías argumentar que estas ideas no son nuevas en absoluto, que existieron en diferentes formas y tamaños. *ejem* Erlang *ejem*. Y… tendrías razón. Personalmente, creo que esa es la hermosura en esto, un nuevo lenguaje mutuo que recoge las prácticas más selectas, aclarando los principios en que confiamos, y haciéndolos más fáciles de comunicar y de legar.
Reactive Manifesto Principles
Los Principios Reactivos: ¿Cómo se relaciona cada uno con el otro?
Mientras que no hay herramientas o frameworks específicamente requeridos para construir aplicaciones Reactivas, hemos decidido señalar algunas soluciones muy particulares en el terreno de los sistemas de alta escalabilidad aptos para producción. Espero que tengas apetito de un poco de deliciosa tecnología, he aquí lo más destacado del menú de hoy:

1. Akka

Los Actores y Akka, el kit de herramientas Reactivo de código abierto de Typesafe, son prácticamente sinónimos en la actualidad. Es uno de los abordajes al desarrollo de software más avanzados –y aun así, estables- de hoy en día.
Akka
Características de Akka

¿Qué tiene de especial?

  • Actores y Futuros “Message-Driven” – Los Actores se comunican intercambiando mensajes que van a la “bandeja de correo” del otro. Una jerarquía es creada de modo que cada actor tenga, como máximo, un actor supervisor. Cada actor puede ocuparse de la tarea, desglosarla aún más delegando a otro actor o, en caso de fallo, escalarla a su supervisor. El asincronismo entra en acción cuando los Futuros reciben un resultado una vez que el procesamiento de una tarea finalizó, sin necesidad de esperar por ello.
  • Distribuido por diseño – En desarrollo, un sistema Actor es independiente de cualquier arquitectura de hardware y puede ser configurado más tarde para ajustarse a cualquier topología.
  • Construido para la JVM – Akka está diseñado específicamente para Java y Scala

 ¿Qué lo hace Reactivo?

Este kit de herramientas proviene de los desarrolladores que escribieron el Manifiesto Reactivo, y aborda todos sus principios.

¿Cómo sigo?

La mejor manera de comenzar sería husmear las plantillas Activator Akka aquí. Si tienes Twitter, también puedes seguir al equipo Akka / hAkkers para estar al día.

2. ReactiveX

Manteniéndose a la altura de las prácticas modernas de desarrollo, he aquí otro abordaje a la programación Reactiva con corrientes Observables. Es de código abierto y abierta a contribuciones, usada por compañías tales como Github, Trello y Microsoft. Con una versión de Java con el sólido apoyo del equipo Netflix OSS.
ReactiveX
ReactiveX

¿Qué tiene de especial?

  • Corrientes Observables – A diferencia del ejemplo de los actores y futuros intercambiando mensajes, los Observables conforman la manera de ReactiveX de implementar la programación asíncrona. Una Observable emite objetos similares a una corriente, y un Observador se suscribe a ellos y reacciona a los eventos en una forma que no los bloquea. Y así sigue, como una reacción en cadena.
  • Planificador (Scheduler) – La forma de manejar el multihilo y el Observable, brindando instrucciones a los Observables y a los operadores con los que ellos se conectan para correr en Planificadores específicos.
  • Agnóstico lingüístico – Rx es una especificación que no depende de ningún lenguaje. Las implementaciones están disponibles para Java, JS, Scala, Ruby, Python, C#, .NET y la lista continúa.

 ¿Qué lo hace Reactivo?

Rx define su abordaje Reactivo creando nuevos patrones de diseño que actúan como framework para aplicaciones modernas, promoviendo los principios descritos en el Manifiesto Reactivo.

¿Cómo sigo?

La wiki de RxJava en Github es un lugar ideal para dar los primeros pasos. Y no te pierdas las actualizaciones en Twitter.

3. Typesafe ConductR

La incorporación más reciente a esta lista, recientemente lanzado y con un futuro muy promisorio: DevOps Reactivos. Creemos que implementa muy bien los principios Reactivos en el frente del desarrollo junto a otros equipos Ops.
ConductR
Un diagrama de ConductR en acción

¿Qué tiene de especial?

  • Por defecto, puede ser distribuido y rastreado – Creativamente pensado para clústeres, y diseñado para sistemas con almacenamiento distribuido bajo grandes cargas.
  • Implementación inmutable – Parámetros de ambiente versionados con una única huella digital verificada por ConductR.
  • Compensación y replicación de carga – Compensación de cargas a gran escala y distribución de consultas a través del clúster para obtener información sobre qué servicios están disponibles en línea.

 ¿Qué lo hace Reactivo?

Ops Reactivos con la atención fuertemente centrada en mantener el rasgo de Resistencia Reactiva.

¿Cómo sigo?

Para probar ConductR, primero será necesario que contactes con Typesafe a través de la página del producto. Por aquí puedes ver una entrevista a Kevin Webber, Consultor en Desarrollo para Typesafe, sobre esta herramienta.

4. OverOps

Mientras intentamos construir sistemas a pruebas de errores, a menudo la vida tiene otros planes para nosotros. Así que cuando los errores ocurren, necesitamos identificarlos y analizarlos tan rápido como nos sea posible para implementar una revisión (hotfix). Si tú únicamente confías en los archivos de registro para estos fines, la siguiente herramienta puede librarte de las cadenas.
OverOps
La pantalla de análisis de errores de OverOps

¿Qué tiene de especial?

  • Consume menos tiempo y energía depurando – OverOps automáticamente reproduce cada error y muestra el código y las variables que llevaron a él – aun entre servidores.
  • Saber cuáles errores te afectan más – Detecta 100% de los códigos de error durante la producción, incluso las excepciones de la JVM y los errores de registro sin depender de archivos de registro.
  • Implementación sin riesgos – Reconoce implementaciones de código y te alerta cuando ellas introducen nuevos errores.

 ¿Qué lo hace Reactivo?

En lo que se refiere a Reactividad y manejo de errores, aparte de contener y manejar errores sin afectar al sistema como un todo, hace posible arreglar de una forma efectiva los problemas que tu código pueda tener tan pronto como aparecen.

¿Cómo sigo?

En menos de 10 minutos, a partir de este momento, puedes tener tu primera excepción analizada: comienza por aquí.

5. Kamon.io

Kamon es un conjunto de herramientas de código abierto para ayudar a monitorear aplicaciones Reactivas, enriqueciendo el ecosistema de las herramientas Reactivas.
Kamon dashboard
El panel principal de Kamon

¿Qué tiene de especial?

  • Estadísticas y rastreo de actores Akka – Tiempo de procesamiento de los mensajes, tiempo de espera en la bandeja de correo, tamaño de la bandeja de correo y más.
  • Reportes a servicios externos – Conecta Kamon a servicios tales como StatsD, Datadog y New Relic.
  • Sin cambios en el código – Kamon instrumenta tu bytecode para reportar las estadísticas.

 ¿Qué lo hace Reactivo?

Manteniendo la perspectiva de los Ops, esta es una herramienta específica diseñada para monitorear aplicaciones Reactivas y reportar qué está ocurriendo con los Actores detrás de escena.

¿Cómo sigo?

Si ya estás usando Akka, Spray o Play!, tendrás que instalar el núcleo de Kamon y luego elegir de qué módulos necesitas comenzar a reportar estadísticas al panel principal de Kamon. Lee la guía para los primeros pasos y no olvides seguir al equipo en Twitter. Además, aquí verás un artículo reciente en su blog sobre el lanzamiento del nuevo 0.4.

6. Aeron

¡Acelerando a hipervelocidad! Aeron es una librería de mensajería de código abierto, diseñada para enviar millones de mensajes por segundo, con latencias de microsegundos entre las máquinas. Creado por Martin Thompson, Todd Montgomery y Richard Warburton.
Aeron
Reseña del diseño de la arquitectura Aeron

¿Qué tiene de especial?

  • Bajas latencias – Latencias de microsegundos, recortando los tiempos de envío de mensajes al mínimo.
  • Desempeño predecible – Tiempos de respuesta regulares y replicables y, por lo tanto, confiables.

 ¿Qué lo hace Reactivo?

Lleva el “Message Driven” y la Buena Respuesta al extremo.

¿Cómo sigo?

Una conversación con Martin, quien entre otras cosas es un buen orador, en la que él explica Aeron, está disponible en YouTube. Otro interesante recurso que también cubre este tema es este artículo en HighScalability. Asimismo, en Github está disponible la guía de Programación con Aeron.

7. LMAX DIsruptor

Volviendo a una sola máquina, y a un solo hilo, LMAX Disruptor es una librería de mensajería para comunicación Inter-Thread (Cooperación) de baja latencia.
LMAX Disruptor
LMAX Disruptor

¿Qué tiene de especial?

  • Múltiple lanzamiento de eventos – Todos los eventos son publicados a todos los consumidores, en contraste con la cola, donde un solo evento es enviado únicamente a un consumidor.
  • Previamente asigna memoria para los eventos – Permite una latencia aún más baja para los mensajes.
  • Opcionalmente sin cierre de exclusión mutua (lock) – Implementado con algoritmos sin cierre de exclusión mutua.

 

¿Qué lo hace Reactivo?

A veces me pregunto cuán cerca de las máximas velocidades es posible que todo esto llegue; la industria financiera es como la modificación del auto de Rápido y furioso, pero al desempeño de Java. Vale la pena también analizar OpenHFT en ese sentido.

¿Cómo sigo?

Averigua más sobre la motivación detrás de esto y la forma en que es implementado aquí. Puedes leer la guía para tus comienzos, disponible en la correspondiente wiki de Github.

Conclusión

Hemos visto algunas de las más avanzadas herramientas, librerías y frameworks disponibles para soportar y depurar aplicaciones Reactivas. Ahora podemos desear un futuro en el que todo los sistemas brinden una buena respuesta, aun cuando Louis CK ya dice ahora que todo va de maravillas y nadie está feliz
A propósito, una nueva sesión del curso Programación Reactiva de Coursera, de Martin Odersky, Erik Meijer y Roland Kuhn comienza en abril, así que vale la pena seguirlo para aprender sobre los pormenores desde la misma fuente.

Alex is the Director of Product Marketing at OverOps. As an engineer-turned-marketer, he is passionate about transforming complex topics into simple narratives and using his experience to help software engineering navigate their way through the crowded DevOps landscape.

Troubleshooting Apache Spark Applications with OverOps OverOps’ ability to detect precisely why something broke and to see variable state is invaluable in a distributed compute environment.
Troubleshooting Apache Spark Applications with OverOps

Next Article

The Fastest Way to Why.

Eliminate the detective work of searching logs for the Cause of critical issues. Resolve issues in minutes.
Learn More