¿Qué son los Sistemas Reactivos?

En cada una de mis charlas sobre Erlang siempre comienzo explicando el cambio sucedido hace bastantes años de programación secuencial a programación paralela y concurrente. Cambio que significó repensar el software de otra forma. Un grupo de programadores escribió el Manifiesto de Sistemas Reactivos para indicar pautas a seguir, ¿aún no lo has firmado?

El Manifiesto Reactivo es un documento (un manifiesto) que recoge una serie de intenciones e ideas a seguir para hacer sistemas reactivos, pero…

¿Qué son los Sistemas Reactivos?

Los Sistemas Reactivos son sistemas: responsivos, resilientes, elásticos y orientados a mensajes. Todos estos conceptos rimbombantes no son autoexplicativos por sus nombres. Quizás ya sepas qué significa alguno de ellos. Vamos a profundizar en cada uno:

Sistemas Responsivos

Los sistemas responsivos son sistemas que responden de una forma oportuna y en la medida de lo posible. Estos sistemas se orientan en obtener tiempos de respuesta rápidos (milisegundos), consistentes y efectivos.

Sistemas Resilientes

Los sistemas resilientes permanecen responsivos ante fallos. Son sistemas que disponen de alta disponibilidad, sistemas de misión crítica. La resilencia es necesaria para cualquier sistema responsivo. Estos sistemas se consiguen a través de replicación, contención, aislamiento y delegación.

Sistemas Elásticos

Los sistemas elásticos se mantienen responsivos independientemente del nivel de carga. El número de elementos del sistema puede variar ampliándose o disminuyéndose para atender más o menos demanda y ante estos cambios el sistema debe seguir siendo responsivo y resiliente.

Sistemas Orientados a Mensajes

Los sistemas orientados a mensajes asíncronos permiten la gestión aún más rápida de tareas sin bloqueos. Estos sistemas mantienen un bajo nivel de acoplamiento, aislamiento y proporcionan medios para delegar la gestión de errores.

Micro servicios

Aunque el manifiesto no habla específicamente de ellos, al decir que los grandes sistemas estarán compuestos de otros más pequeños con las mismas características ya dejan entrever la constitución de un sistema a través de pequeños elementos o unidades que se mantengan aislados y operantes, responsivos, resilientes y elásticos de forma individual para conseguir un sistema como un conjunto igualmente responsivo, resiliente y elástico e igualmente orientado a mensajes asíncronos en toda su interacción.

Sistemas y Lenguajes

Estos nuevos requisitos son posibles de desarrollar en los lenguajes de toda la vida, pero siempre tendremos la tentación de obviar algunas partes y caer en la tentación de sucumbir a la simpleza de los sistemas antiguos denegando en algún punto la capacidad de ser resilientes o elásticos.

El creados de Node.js, por ejemplo, creó su sistema basado en un lenguaje que no tenía difusión en desarrollo a nivel de servidor para forzar el uso de librerías completamente nuevas y que permitiesen crear sistemas no bloqueantes.

En este sentido lenguajes como Rust, Go, Erlang, Elixir, Pony y otros similares han sido concebidos con todas estas directivas y hacen posible y más fácil la creación de sistemas con estas propiedades.

Conclusiones

Los sistemas reactivos son los sistemas que cada vez más se necesitan en la base de operaciones de startups y empresas orientadas a la nube. Empresas que desarrollen un producto o servicio a través de Internet y necesitan escalar, crecer y no centrarse en solventar límites impuestos por viejos lenguajes o infraestructuras.

¿Has desarrollado algún sistema reactivo?, ¿has encontrado problemas que se resolverían empleando las características descritas?, ¿Te has lanzado a alguna plataforma o lenguaje que proporcione la creación más fácil de sistemas reactivos? ¿Necesitas ayuda en portar o crear sistemas reactivos? ¡Déjanos un comentario!