¿Sabes qué son los sistemas reactivos?

A estas alturas el término reactivo debería ser algo que las empresas y desarrolladores identifican con facilidad, sin embargo, la realidad es que muchos lo desconocen y siguen pensando de forma antigua tanto en el desarrollo como en la gestión (ver así que sigues usando cascada).

En Evolbit creemos que el desarrollo se debe tomar seriamente, que es un proceso muy delicado y que ha cambiado mucho para alinearse a estos tiempos, por esa razón nos alineamos al manifiesto reactivo.

¿Que es un sistema reactivo?

Los sistemas reactivos no son nuevos, en 1985 David Harel y Amir Pnueli plantearon una nueva dicotomía para caracterizar sistemas de computador complejos, los sistemas transformativos versus reactivos. Los sistemas transformativos aceptan un conjunto de entradas, transforman esas entradas y producen salidas, por otro lado, los sistemas reactivos, son estimulados continuamente por su entorno y su rol es responder continuamente a esas estimulaciones.

Unos años después Gérard Berry redefine lo expuesto anteriormente introduciendo la diferencia entre sistemas interactivos y reactivos, donde los programas interactivos definen la velocidad en la que interactúan con el entorno mientras que los reactivos determinan su velocidad por el entorno.

Podemos decir que un programa reactivo tiene las siguientes características:

  • Está disponible para interactuar continuamente con el entorno
  • Se ejecuta a la velocidad determinada por el entorno
  • Trabaja en base a la demanda externa

Cuando se analiza con detalle, las características expuestas anteriormente son como las aplicaciones web deberían funcionar. El manifiesto reactivo engloba las características vistas anteriormente en 4 principios básicos:

  • Responsivos: reaccionar a los usuarios
  • Resilientes: reaccionar a fallos
  • Elásticos: reaccionar a la carga
  • Orientado a mensajes: reaccionar a eventos

reactive-manifesto

Una aplicación responsiva satisface la expectativa del usuario en términos de disponibilidad y tiempo real. La aplicación responde con muy poca latencia.

Como bien sabemos, todas las aplicaciones incluso las más simples tienden a fallar, por eso las aplicaciones reactivas deben ser resilientes a fallas para poder cumplir con la demanda de disponibilidad continua.

Para poder interactuar continuamente con su entorno, una aplicación reactiva debe ser capaz de ajustarse de acuerdo a la carga que está recibiendo. Para responder correctamente de acuerdo a la carga, una aplicación reactiva debe poder ser elástica y escalar a demanda. Debe sacar provecho de todos los recursos de una maquina y debe saber como interactuar con más nodos de computación.

Un mecanismo que ayuda a cumplir con todas las propiedades anteriores es la orientación a eventos basado en comunicación asíncrona. El sistema o subsistema reacciona a eventos como pedidos HTTP sin necesidad de monopolizar los recursos mientras espera por un evento. Como consecuencia de este mecanismo la concurrencia alcanza mejores tasas de latencia (por ser asíncrono) y los componentes son más desacoplados.

Por lo tanto, sabemos que una aplicación es reactiva si cumple con los 4 principios del manifiesto reactivo.

Existen algunas tecnologías para crear programas basados en eventos y asíncronos, por ejemplo Microsoft’s Reactive Extensions (Rx), NodeJs, Netty o Apache Mina sin embargo el único framework maduro en este tema y que ha sido creado para cumplir exitosamente lo que dicta el manifiesto reactivo es playframework.

play_full_color

 

www.playframework.com

En estos días las aplicaciones deben responder a nuevas demandas y el manifiesto reactivo establece 4 principios que se deben cumplir para responder a las exigencias de hoy en día.

¿Estás desarrollando aplicaciones reactivas en tu empresa?, si la respuesta es no, te recomendamos que evalúes la situación actual para empezar a hacerlo y puedas tomar a tu favor las ventajas que una arquitectura reactiva ofrece.

¿Sabes qué son los sistemas reactivos?

Así que sigues usando cascada…

Hace varios años el Dr. Winston Royce presentó una propuesta para el manejo de proyectos de gran escala. Por varios años esa propuesta ha sido usada por muchas empresas pero no muchos saben una pequeña verdad acerca de ella, el mismo autor (Winston Royce) cree que es riesgosa y que invita a fallar.

Managing The Development of Large Software Systems

I believe in this concept, but the implementation described above is risky and invites failure. (Creo en este concepto, pero la implementación descrita anteriormente es riesgosa e invita a fallar)

Este pequeño detalle ha resaltado mucho en la práctica. Los proyectos manejados con cascada sufren muchos conflictos por diferentes razones, una de las razones más importantes es intentar diseñar el sistema y analizar todos los requerimientos intentando manejar una verdad única, rígida y desde un único punto de vista. Sabemos por experiencia que los sistemas cambian durante el desarrollo por muchas razones (cliente, tecnologías, otros) y por esa razón, mucho del tiempo invertido en la etapa de análisis perderá sentido.

Por la razón expuesta anteriormente y muchas otras, en Evolbit usamos Scrum como marco de desarrollo. Es usado a nivel mundial por grandes empresas que ya han comprobado su efectividad. Scrum sigue los principios del manifiesto ágil (http://www.agilemanifesto.org/) y promueve lo siguiente:

Individuos e interacciones sobre procesos y herramientas
Software funcionando sobre documentación extensiva
Colaboración con el cliente sobre negociación contractual
Respuesta ante el cambio sobre seguir un plan

Scrum-overview

Si tu o tu empresa aún siguen usando cascada te recomendamos que revises más sobre Scrum (u otra metodología ágil), a continuación te dejamos una página con muy buenos videos que te ayudarán a introducirte en las metodologías ágiles.

http://scrummethodology.com/

 

Así que sigues usando cascada…

Docker es el futuro!

dockerDocker es una tecnología que nos permite utilizar un sistema de archivos completo en lo que lo creadores llaman “contenedores”, de esta forma se pueden ejecutar programas, herramientas del sistema, librerías y otros.

Instalar Docker es muy sencillo y la página cuenta con muy buena documentación de como hacerlo. En Evolbit usamos docker-compose (evolución de lo que en algún momento fue Fig) para facilitar la configuración de los contenedores. Docker compose también es súper útil para separar la configuración para diferentes entornos ya que permite especificar el archivo de configuración.

Con Docker podemos olvidarnos de las configuración en el servidor, solo basta que el servidor de producción tenga Docker instalado y el software podrá ser instalado con unos cuantos comandos (muy fácil). Además, el uso de Docker trae la ventaja de que el equipo de desarrollo trabaja en el mismo entorno usando los contenedores de Docker.

Para quienes no conocen Docker les recomendamos que empiecen a revisar la documentación de Docker y Docker compose.

Docker

https://docs.docker.com

Docker Compose

https://docs.docker.com/compose/

Docker es el futuro!