December 2, 2024

Aplicaciones adaptables a cambios

Aplicaciones adaptables a cambios

“No sobrevive la especie más fuerte ni tampoco la más inteligente. Sobrevive aquella que se adapta mejor a los cambios”

Charles Darwin

Una aplicación "nativa de nube", como todas las especies nativas, se ha adaptado y evolucionado para ser lo más eficiente posible en su entorno natural: la nube.

Cuando hablamos de entorno de nube, nos referimos a tanto nubes públicas como privadas, las cuales están básicamente construidas de los cuatro elementos o recursos básicos de una computadora: red, disco, memoria y cpu.

La nube es un entorno más severo para las aplicaciones que los entornos del pasado, como puede ser, por ejemplo, un sistema monolítico de tres capas, donde sus datos residen en una base de datos en un único nodo. 

En la nube, una aplicación está distribuida. Por lo tanto, se ve obligada a ser resistente a la imprevisibilidad y a la falta de confiabilidad del hardware o la red, es decir, debe contemplar desde una leve variación en su rendimiento hasta una falla total.

Por ejemplo, si bien los nuevos sistemas de almacenamiento de discos de estado de sólido són más rápidos que sus predecesores, la confiabilidad de estos es sustancialmente menor, esto implica que creemos que cuando mandamos a escribir algo a la nube ese dato se persiste sin problemas y cada vez eso es menos cierto.

Las principales limitaciones del entorno de nube incluyen:

  • Las aplicaciones tienen una capacidad limitada para escalar verticalmente en hardware básico, lo que generalmente conduce a tener muchos servicios autónomos aislados (microservicios).
  • Toda comunicación entre servicios tiene lugar a través de redes poco confiables.
  • Debe operar bajo el supuesto de que el hardware subyacente puede fallar o reiniciarse o moverse en cualquier momento.
  • Los servicios deben poder detectar y administrar fallas de sus pares, incluidas fallas parciales.
  • La transaccionalidad y la consistencia fuerte son más caras de conseguir. Debido a la coordinación requerida, es difícil hacer que los servicios que administran datos estén disponibles, sean eficaces y escalables.

Una aplicación "nativa de nube", como todas las especies nativas, se ha adaptado y evolucionado para ser lo más eficiente posible en su entorno natural: la nube.

Si bien, es difícil garantizar la capacidad de respuesta y la confiabilidad en este tipo de entorno hostil, las aplicaciones que creamos después de adoptar este entorno se ajustan mejor al funcionamiento real del mundo real. Esto, a su vez, brinda mejores experiencias para nuestros usuarios.


Por lo tanto, una aplicación “nativa de nube” está diseñada para aprovechar el modelo operativo de la nube. Es predecible, está desacoplada de la infraestructura, tiene el tamaño adecuado y permite una estrecha colaboración entre el equipo de desarrollo y el de operaciones.

Un enfoque de aplicaciones nativas de nube que contempla y considera todas estas limitaciones es el de sistemas reactivos.

El enfoque Reactivo es un enfoque diferente para pensar, diseñar, construir y razonar sobre sistemas de software, en particular aplicaciones distribuidas, altamente concurrentes y con uso intensivo de datos, que maximiza nuestras posibilidades de éxito en la construcción de aplicaciones nativas de la nube.

Los principios reactivos, ayudan a garantizar que las aplicaciones sean:

  • Responsivas: reacciona al cambio de manera oportuna
  • Resilientes: siempre disponible y auto-recuperable
  • Elásticas: permite escalar horizontalmente y a pedido, a través de una gestión eficiente del estado, los recursos y la comunicación, tanto local como distribuida.

Para garantizar responsividad, resiliencia y elasticidad es clave además la manera en la que se gestiona la infraestructura subyacente sobre la que “viven” estas aplicaciones. Para ello, en los últimos años se ha visto una evolución importante en los orquestadores, como Kubernetes que se especializan justamente en gestionar, escalar y garantizar la disponibilidad de las cajas o contenedores que alojan estas aplicaciones. Pero manejar correctamente las cajas es solamente una parte del desafío, hacer que el contenido de esas cajas funcione en sintonía con el ecosistema de nube es otra.

Tanto la capa de infraestructura como la de aplicaciones son igualmente importantes y deben trabajar en conjunto para ofrecer una experiencia de usuario integral y coherente.

A lo largo de los distintos proyectos que hemos ejecutado, hemos podido evidenciar estas grandes ventajas de los sistemas reactivos. La posibilidad de “no parar” el sistema porque algún componente está fallando es clave, por ejemplo, en uno de los sistemas que implementamos, la base de datos, la cual era altamente redundante, se alojaba en un mismo datacenter, y ante un evento de pérdida de conectividad, la aplicación continuó respondiendo a la ingesta de información guardando la información en en los repositorios intermedios, y aplicando los patrones de circuit-breaker (térmicas) a la hora de escribir sobre la base de datos, es decir, aunque no respondía a ciertas consultas el resto del sistema seguía funcionando y no se perdía información.


En resumen, el enfoque de aplicaciones reactivas nativas de nube produce aplicaciones y servicios más eficientes, robustos, manejables, adaptables y ágiles.

En Peperina Software, te ayudamos a diseñar y crear soluciones reactivas nativas de nube que se adapten mejor a los cambios.