¿Qué es la programación reactiva?

Hoy en día se habla mucho sobre la programación reactiva, pero ¿qué es? En esta entrada pretendemos explicarla de forma breve.

Como sabéis, actualmente vivimos una etapa de auge de los sistemas distribuidos. Crear un sistema distribuido robusto es muy difícil ya que puede fallar por muchas razones:

  • Problemas de capacidad
  • Interrupciones en la red
  • Problemas de hardware
  • Errores

Para facilitar esta labor, se publicó el Manifiesto Reactivo que define un sistema reactivo como aquel sistema distribuido que es:

Responsivo proporciona tiempos de respuesta rápidos y consistentes. Además define límites en dichos tiempos de respuesta, de forma que los problemas pueden ser detectados rápidamente y tratados de forma efectiva
Resiliente permanece responsivo incluso en situaciones de error
Elástico se mantiene responsivo ante incrementos de la carga de trabajo
Orientado a mensajes se basa en el intercambio de mensajes asíncronos, lo que asegura el bajo acoplamiento, aislamiento, transparencia de ubicación y proporciona los medios para delegar errores como mensajes

¿Qué es la programación reactiva?

Es un paradigma de programación enfocado en:

Manejo de flujos de datos asíncronos

Basado en datos que fluyen continuamente, los sistemas reactivos reaccionan a los datos ejecutando una serie de eventos.

La programación reactiva sigue el patrón de diseño Observer; cuando hay un cambio de estado en un objeto, los otros objetos son notificados y actualizados acorde. Por lo tanto, en lugar de sondear eventos para los cambios, los eventos se realizan de forma asíncrona para que los observadores puedan procesarlos.

Uso eficiente de recursos

Utilizando E/S asíncrona, la idea es simple: disminuir el uso ineficiente de recursos usando recursos que de lo contrario estarían inactivos, ya que permanecen a la espera de actividad de E/S. Los nuevos datos se notifican a los clientes en vez de tener que solicitarlos, debido a que la E/S asíncrona invierte el diseño normal del procesamiento de E/S. Este enfoque libera al cliente para hacer otras cosas mientras espera nuevas notificaciones.

Existe el riesgo de que demasiadas notificaciones desborden al cliente. Un aspecto fundamental de control de flujo en sistemas distribuidos es que el cliente debe ser capaz de rechazar el trabajo que no puede manejar. En la programación reactiva, la capacidad del cliente para señalizar cuánto trabajo puede manejar se llama “contrapresión“. 

Beneficios de la programación reactiva

Escalabilidad Usando programación reactiva obtenemos una implementación débilmente acoplada escalable y que tiende a aislar los fallos. La escalabilidad se refiere a la capacidad de escalar horizontalmente y de forma rápida, anticipándose al manejo del número de eventos asociados con big data – de millones a billones de eventos entrantes.
Ahorro La utilización eficiente de los recursos, deriva en gastar menos dinero en servidores y centros de datos. La promesa de la programación reactiva es que se puede hacer más con menos. Específicamente puedes procesar cargas de trabajo más altas con menos hilos. Para el problema correcto, los efectos son drásticos.

La programación reactiva es por tanto el futuro próximo del desarrollo web. Para ello, deberemos evolucionar las actuales arquitecturas de microservicios bloqueantes hacia arquitecturas completamente reactivas, desde la capa de persistencia hasta la presentación. Sin embargo, pese a las múltiples ventajas que ofrece, conviene no olvidar las dificultades que este enfoque plantea. Entre ellas podemos destacar la modificación a un estilo declarativo de programación, los riesgos derivados de la falta de experiencia o la dificultad añadida a la hora de depurar errores.