Si bien el término arquitectura reactiva ha existido durante mucho tiempo, sólo recientemente ha sido reconocido por la industria y ha alcanzado la adopción general. El objetivo de este artículo es analizar qué es realmente arquitectura reactiva y por qué adoptarla.

Su significado central se ha formalizado con la creación del Reactive Manifesto2 en 2013, cuando Jonas Bonér recolectó algunas de las mentes más brillantes en la industria de la computación distribuida y de alto rendimiento – Dave Farley, Roland Kuhn, y Martin Thompson para colaborar y solidificar los principios fundamentales para la construcción de aplicaciones y sistemas reactivos. El objetivo era aclarar parte de la confusión en torno a la arquitectura reactiva y construir una base sólida para lo que se convertiría en un estilo de desarrollo viable. Más adelante, en el artículo veremos el manifiesto en detalle, pero por ahora, vamos a analizar lo que es reactivo.

 

¿Qué significa realmente reactivo?

 

La programación reactiva es un paradigma de programación asíncrono, que se ocupa de los flujos de información y la propagación de cambios. Esto difiere de la programación imperativa, dónde ese paradigma utiliza instrucciones para cambiar el estado de un programa.

La arquitectura reactiva no es más que la combinación de programación reactiva y arquitecturas de software. También conocido como sistemas reactivos, el objetivo es hacer que el sistema responda, sea resistente, elástico y controlado por mensajes.

Un sistema reactivo es un estilo arquitectónico que permite que varias aplicaciones individuales se fusionen como una sola unidad, reaccionando a su entorno mientras son conscientes entre sí, y permite el escalado automático hacia arriba y hacia abajo, el equilibrio de carga, la capacidad de respuesta ante fallos y más.

La arquitectura reactiva puede ser escalable de forma elástica frente a la variación del tráfico entrante. El escalado suele tener uno de dos propósitos: o necesitamos escalar horizontalmente (añadiendo más máquinas) y hacia arriba (agregando máquinas más resistentes), o necesitamos reducir la escala, reduciendo el número de recursos ocupados por nuestra aplicación. Un patrón de escalado interesante popularizado por Netflix es el escalado predictivo, en el que sabemos cuándo van a golpear los picos para que podamos aprovisionar servidores de forma proactiva para ese período, y una vez que el tráfico comience a bajar de nuevo, disminuya el tamaño del clúster de forma incremental.

En cuanto a las bibliotecas reactivas, a menudo recurren al uso de algún tipo de bucle de eventos o infraestructura de distribuidor compartido basada en un grupo de subprocesos. Gracias a compartir los costosos recursos (por ejemplo, hilos) entre construcciones más baratas, ya sean tareas simples, actores o una secuencia de devoluciones de llamada que se invocarán en el distribuidor compartido, estas técnicas nos permiten escalar una sola aplicación en varios núcleos. Estas técnicas de multiplexación permiten que estas bibliotecas controlen millones de entidades en un solo cuadro.

 

Beneficios de la arquitectura reactiva

  • Ser respuesta a las interacciones con sus usuarios
  • Controlar los errores y permanecer disponible durante las interrupciones
  • Esforzarse bajo diferentes condiciones de carga
  • Poder enviar, recibir y enrutar mensajes en diferentes condiciones de red

 

Los sistemas construidos como sistemas reactivos son más flexibles, sin conexión directa y escalables. Esto hace que sean más fáciles de desarrollar y favorecen el cambio. Son significativamente más tolerantes al error y cuando se produce el error, éste se encuentra de una forma elegante. Los sistemas reactivos son altamente receptivos, lo que proporciona a los usuarios feedback interactivo eficaz.

“Los sistemas reactivos son las arquitecturas de sistemas más productivas para la implementación de producción en la actualidad”, dice Bonér. “Permiten sistemas que hacen frente a fallas, variando la carga y cambian con el tiempo, mientras ofrecen un bajo costo de propiedad”.

 

Manifiesto Reactivo 

Los autores del Manifiesto Reactivo creen que los sistemas reactivos son:

1.Responsivos

El sistema responde de manera oportuna si es posible. Los problemas pueden detectarse rápidamente y tratarse de manera eficaz. Los sistemas responsivos se centran en proporcionar tiempos de respuesta rápidos y consistentes, estableciendo límites superiores confiables para que ofrezcan una calidad de servicio consistente. Este comportamiento coherente, a su vez simplifica el manejo de errores, generando confianza en el usuario final y fomentando una mayor interacción.

2.Resilientes

El sistema permanece responsivo ante el fallo. Ésto no solo se aplica a los sistemas de misión crítica de alta disponibilidad, ya que cualquier sistema que no sea resistente no responderá después de un fallo. La resiliencia se logra mediante replicación, contención, aislamiento y delegación. Los errores están contenidos dentro de cada componente, aislándo los componentes entre sí y asegurando así que partes del sistema pueden fallar y recuperarse sin comprometer el sistema en su conjunto.

3.Elásticos

El sistema mantiene la capacidad de respuesta bajo una carga de trabajo variable. Los sistemas reactivos pueden reaccionar a los cambios en la velocidad de entrada aumentando o disminuyendo los recursos asignados al servicio de estas entradas. Esto implica diseños que no tienen puntos de contención o cuellos de botella centrales, lo que resulta en la capacidad de particionar o replicar componentes y distribuir entradas entre ellos. Los sistemas reactivos admiten algoritmos de escalado predictivos, así como reactivos, proporcionando medidas de rendimiento en vivo relevantes. Logran la elasticidad de una manera rentable en plataformas de hardware y software de productos básicos.

4.Orientados a mensaje

Los sistemas reactivos se basan en el paso de mensajes asincrónicos para establecer un límite entre los componentes que garantiza un acoplamiento, aislamiento y transparencia de ubicación flexibles. Este límite también proporciona los medios para delegar errores como mensajes. El uso explícito de mensajes permite la administración de carga, la elasticidad y el control de flujo mediante el modelado y la supervisión de las colas de mensajes en el sistema y la aplicación de contrapresión cuando sea necesario. La mensajería transparente de ubicación como medio de comunicación permite administrar el error de trabajo con las mismas construcciones y semántica en un clúster o dentro de un único host. La comunicación sin bloqueo permite a los destinatarios consumir solo recursos mientras están activos, lo que provoca menos sobrecarga del sistema.

 

Arquitectura Reactiva: casos de uso

Hundreds of enterprises in every major market around the world have embraced the principles of Reactive to build and deploy production systems that deliver industry-disruptive benefits for competitive business advantage. Let me give you several well-known examples: 

Cientos de empresas en los principales mercados del mundo han adoptado los principios Reactivos para construir e implementar sistemas de producción que ofrezcan beneficios disruptivos para una ventaja comercial competitiva. Te vamos a dar varios ejemplos bien conocidos:

  1. Capital One rediseñó su aplicación de préstamos para automóviles en torno a los principios Reactivos para simplificar la compra y financiación de automóviles en línea. Los clientes pueden navegar por más de cuatro millones de automóviles de más de 12.000 concesionarios y precalificar el financiamiento en segundos, sin afectar las puntuaciones de crédito.

  2. LinkedIn recurrió a los principios Reactivos para crear indicadores de presencia en tiempo real (indicadores en línea) para los medio billón de usuarios de su red social.

  3. Verizon Wireless, operadores de la red 4G LTE más grande en Estados Unidos, redujo los tiempos de respuesta a la mitad utilizando los principios de Reactive en la actualización de su sitio web de comercio electrónico que soporta 146 millones de suscriptores que manejan 2.500 millones de transacciones al año.

  4. Walmart Canada reconstruyó toda su aplicación web y pila móvil como un sistema Reactivo y vió un aumento del 20 por ciento en la conversión a ventas de tráfico web y un aumento del 98 por ciento en los pedidos móviles recortando los tiempos de carga de páginas en más de un tercio.

La industria tecnológica se ha unido en torno a los sistemas Reactive para ayudar a resolver algunos de los desafíos empresariales más complejos de sus clientes. A medida que los sistemas modernos de hoy en día escalan por órdenes de magnitud, las arquitecturas tienen que lidiar con nuevas formas de compartir datos entre los servicios sin bloquear el sistema.

 

Si estás interesado en la arquitectura reactiva, te recomendamos encarecidamente una lectura a éstos libros: 

 

Por cierto, uno de los coautores del Manifiesto Reactivo, Dave Farley, ofreció varias charlas sobre este tema en varios eventos de arquitectura de software como el Global Software Architecture Summit, aquí tienes los links:

 

Me gustaría terminar este artículo con una cita de Dave que resume muy bien el escrito:

“Tenemos que pensar en nuevas formas de diseñar nuestros sistemas. Las viejas formas se basan en los compromisos que nos impusieron ciertos perfiles de rendimiento en el hardware al que estábamos acostumbrados. Y esas suposiciones ya no se mantienen.” – Dave Farley