[Opinión] Programación Reactiva: un paradigma necesario para los tiempos actuales.

Hola a todos:
En tiempos recientes he estado seriamente ocupado trabajando en un proyecto para un cliente, el cual tiene un alcance muy grande (a nivel nacional).
Gracias a que este proyecto es algo que se espera, cuando entre en fase definitiva y liberada al público específico, sea utilizada de manera intensiva.

En el principio planteamos un esquema algo por demás normal: una API de uso interno, la cual proveería de datos a un sitio web construido en ASP.Net MVC 5.
Realizando unas pruebas de tanto de concepto como de carga, nos dimos cuenta que, a pesar de tener una respuesta aceptable en una cantidad mediana de usuarios y operaciones medianamente complejas, la capacidad del sistema se degrada de manera rápida al empezar a tener más usuarios concurrentes (alrededor de 1000 usuarios al mismo tiempo empezaba a mostrar cierto nivel de estrés el sistema).

Naturalmente, cuando tienes un sistema con dicho alcance, que tiene una alta importancia que tanto la disponibilidad de los datos, como del sistema en sí sea siempre la más alta disponible. En este caso se optó por hacer una reingeniería de la arquitectura del sistema: optamos por crear un SPA basado en AngularJS, alimentada por back-end que consiste en una Web API realizada en ASP.Net, y para atacar la parte de la concurrencia decidimos utilizar las extensiones de ReactiveX.

¿En qué consiste la Programación Reactiva?

Primero que nada: la programación reactiva es un paradigma de programación, de la misma manera que puede ser la Programación Orientada a Objetos, o la Programación Funcional. Y por mucho que se pueda pensar, la programación reactiva no es nada nuevo: ha estado entre nosotros desde más o menos el año 2000, cuando lenguajes como Visual Basic implementaban desarrollos basados en eventos (Event-Driven Development).
Si bien se ha estado escuchando más sobre ella en los últimos tiempos (y por ello da la ilusión de ser una tecnología reciente) es porque empresas como Netflix se han encargado de popularizar, específicamente las extensiones ReactiveX.
ReactiveX es una librería creada por el grupo de Microsoft Research Labs, los cuales buscaban una manera fácil de implementar este paradigma en programación imperativa, y lo mejor: esta librería ya está en una etapa lo suficiente madura como para utilizarla en ambientes de producción de manera confiable y eficaz.

¿Debería utilizar programación reactiva?

La respuesta habitual que doy cuando un colega programador me pregunta esto es simple: depende de tu aplicación.
Si necesitas que tu aplicación tenga un constante flujo de datos, mantener actualizada tanto la vista como el modelo de datos, y viceversa, entonces puedes utilizarlo para atacar esa situación. Es decir, si tu aplicación requiere de una alta disponibilidad y nivel de actualización de datos, la programación reactiva te puede ayudar a lograrlo.

Por otro lado, si tu aplicación no tiene dicho requerimiento, o es utilizada por muy pocos usuarios (estamos hablando de una cantidad demasiado limitada), e incluso si no existe mucho intercambio de datos entre la interfaz y el back-end, entonces no es necesario. Incluso, implementar programación reactiva y específicamente, las extensiones de ReactiveX, puede hacer que la programación de un sistema sencillo se vuelva muy compleja de manera innecesaria, incluso hasta afectar el rendimiento de la misma.

En conclusión: la programación reactiva es algo que ha estado entre nosotros, pero que ha cobrado una importancia mayor en estos tiempos, en los cuales tenemos dispositivos conectados a internet 24x7, con aplicaciones las cuales requieren mostrar información de manera casi instantánea, utilizada por cientos de miles, millones o cientos de millones (dependiendo de la app, por supuesto), y que tienen cargas intensas en la parte de comunicación de datos.
Gracias a esas exigencias, es que considero necesario utilizarla, para poder sortear dichas situaciones y que nuestra aplicación responda tal y como lo espera el usuario, en el momento que lo espera.

En próximos artículos espero poder explicar más y mejor, ya con ejemplos de código, como implementar ReactiveX en una aplicación, y así ver los beneficios de dicho paradigma.

¡Nos leemos pronto!