Las cuatro grandes características de la programación reactiva

características arquitecturas reactivas

En el artículo anterior hablamos de qué es la arquitectura reactiva, sus principios y las principales plataformas, lenguajes… con las que se construye. Hoy hablaremos sobre las cuatro características principales de las aplicaciones reactivas, recogidas en el conocido como Manifiesto Reactivo. Estas cualidades forman un todo, pues están interconectadas entre sí.

La programación reactiva es Responsiva

Es decir, responde a tiempo y reacciona apropiadamente en la medida de lo posible. La responsividad es clave para la usabilidad y la utilidad, permite detectar los problemas rápidamente y tratarlos de forma efectiva.

Los sistemas responsivos buscan tiempos de respuesta rápidos y consistentes, estableciendo límites superiores confiables para proporcionar una calidad consistente en el servicio. Esta consistencia simplifica el tratamiento de errores, da seguridad al usuario y fomenta una mayor interacción.

En resumen, los sistemas responsivos:

  • Responden a tiempo en la medida de lo posible
  • Son la base de la usabilidad y la utilidad
  • Los fallos pueden detectarse rápidamente y tratarse efectivamente
  • La respuesta es rápida y consistente, estableciendo límites superiores confiables

La programación reactiva es Resiliente

Se integran los posibles fallos en el modelo de programación, de forma que, al estar dentro del diseño desde el inicio, es posible reaccionar a ellos y solucionarlos. Así, las aplicaciones reactivas son altamente tolerantes a los fallos (son responsivas frente a ellos) y pueden repararse a ellas mismas en el tiempo de ejecución.

Se alcanza la resiliencia mediante:

  • Replicación : Las mismas tareas se pueden replicar entre diferentes threads, runtimes (JVMs), servidores o data centers
  • Contención y Aislamiento (en espacio y tiempo)
    • El sender (quien solicita la tarea) y el receiver (quien la responde) son procesos diferentes con ciclos de vida diferentes.
    • No necesitan estar presentes en el mismo tiempo para que se produzca la acción (asincronía)
    • Los componentes se comunican de manera asíncrona en el tiempo mediante el paso de mensajes
    • Location Transparency, los diferentes componentes del sistema se comunican a través de referencias (nunca nombres de servidores, URLs, o demás).
  • Delegación: Los fallos se manejan dentro de cada componente, estando todos ellos aislados de los demás. Así, se asegura que cualquier parte del sistema pueda fallar y recuperarse sin comprometer el todo.  Para recuperar cada componente se delega en otro externo y, como hay alta disponibilidad, se asegura con replicación donde sea necesario. De este modo, el cliente de un componente no tiene que responsabilizarse del manejo sus fallos.

La programación reactiva es Elástica y Escalable

Puede expandirse de acuerdo con su utilización, gracias a la elasticidad (opción de añadir, o remover nodos según petición) que se le añade. Gracias a la escalabilidad, se pueden minimizar los costes de tener aplicaciones en la nube y gestionar los riesgos (tener pocos recursos lleva a perder clientes, tener demasiados puede resultar costoso). Además, así los Sistemas Reactivos pueden reaccionar a variaciones en la carga de trabajo y a cambios en la frecuencia de peticiones incrementando o reduciendo los recursos asignados para servir dichas peticiones.

Para ello, hay que diseñar una arquitectura sin puntos de contención o cuellos de botella centralizados, resultando en la capacidad de dividir o replicar componentes y distribuir las peticiones entre ellos. Los Sistemas Reactivos soportan algoritmos de escalado predictivos y Reactivos, al proporcionar relevantes medidas de rendimiento en tiempo real. Y lo mejor es que la elasticidad se consigue de forma rentable haciendo uso de plataformas con hardware y software genéricos como Kubernetes, Akka….

La programación reactiva está Orientada a Mensajes

La Arquitectura orientada a eventos (algo que sucedió, no puede cambiarse y tiene un contexto) implica que un componente de software se ejecuta en respuesta a una o más notificaciones de eventos. Los Sistemas Reactivos confían en este intercambio de mensajes asíncrono para establecer fronteras entre componentes. Esto asegura bajo acoplamiento, aislamiento y transparencia de ubicación. Además, estas fronteras permiten delegar fallos como mensajes.

El intercambio de mensajes (realizado mediante el modelado y monitorización de las colas de mensajes y la aplicación de back-pressure) permite gestionar la carga, la elasticidad y el control de flujo. Además, al utilizar la mensajería basada en ubicaciones transparentes, podemos gestionar fallos y trabajar con los mismos bloques y semánticas a través de un clúster o dentro de un solo nodo. Y con la comunicación no-bloqueante podemos consumir recursos solo mientras estén activos, evitando sobrecargar el sistema.

Conclusiones

Para crear un sistema reactivo, debemos tener en cuenta que integrará estas cuatro características interrelacionadas, es decir, que será responsiva, resiliente escalable y orientada a mensajes.

¿Quieres aprender a integrar todo esto?

 Más información e inscripciones al bootcamp


Mario Renau, Hands-on Digital Architect – Smart Cities / IoT en Alstom y Big Data Lecturer en Datahack
Déborah Fernández

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *