Qué es el desarrollo nativo de la nube y por qué debería importarte

24 abril
Por Peter Vaihansky, SVP Engagement Manager, Finance Practice
Qué es el desarrollo nativo de la nube y por qué debería importarte
Cuando las personas hablan sobre cloud computing, es importante diferenciar entre dónde "viven" las aplicaciones y cómo se crean. En esta publicación, me voy a centrar en lo último, es decir, en aquello que caracteriza al software diseñado desde cero especialmente para aprovechar al máximo el modelo de computación en la nube.

En su nivel más básico, la nube puede ser considerada una Infraestructura como Servicio (IaaS), sin embargo, el desarrollo de aplicaciones cloud native va más allá de ese tiempo y potencial de ahorro de costos. En última instancia, su promesa tiene más que ver con la agilidad empresarial: permite entregar y evolucionar la tecnología a la velocidad de los negocios.

Ahora, veamos algunos de los términos a menudo asociados con el desarrollo nativo de la nube.

Microservicios

Es un enfoque arquitectónico en el que las aplicaciones están diseñadas como conjuntos de servicios implementables de forma independiente: aplicaciones pequeñas, de acoplamiento flexible y de propósito estrecho. Este paradigma suele contrastarse con aplicaciones monolíticas que se construyen como una sola unidad.

Si bien las aplicaciones monolíticas pueden tener éxito, los equipos de desarrollo de aplicaciones luchan cada vez más con ellas, especialmente en el contexto de la nube. Por ejemplo, solo es posible escalar todo el monolito como una unidad, en lugar de un solo componente que está experimentando el mayor estrés. Además, un cambio realizado en una pequeña parte de un monolito requiere que todo el sistema sea reconstruido y desplegado nuevamente. Es por ello que, una vez que alcanza un cierto tamaño, construir, testear y lanzar un monolito a menudo se vuelve muy complicado, lento y costoso.

Con microservicios, por el otro lado, se pueden cambiar las aplicaciones componente por componente. Cada microservicio puede ser propiedad de un pequeño equipo, y puede actualizarse y desplegarse (o revertirse) de forma independiente, sin afectar otras partes del sistema. Esto proporciona al negocio una mayor capacidad para implementar nuevas ofertas digitales rápidamente, lo que resulta en un mejor time to market.

Contenerización

Es un enfoque de virtualización moderno que implica empaquetar el código del software y todas sus dependencias para que pueda ejecutarse de manera uniforme y consistente en cualquier infraestructura. Debido a que los contenedores son esencialmente máquinas virtuales pequeñas y livianas, permiten una utilización más eficiente de la infraestructura subyacente.

Se podría decir que los contenedores y los microservicios están prácticamente hechos el uno para el otro. Juntos, brindan múltiples beneficios, como portabilidad, rentabilidad, mayor flexibilidad con automatización, reproducibilidad, escalabilidad y seguridad.

Gestión dinámica y orquestación

Las aplicaciones en contenedores suelen gestionarse y organizarse dinámicamente mediante softwares especializados. Las funciones como desencadenar el inicio o el apagado de un contenedor, compartir todos los parámetros de configuración necesarios para equilibrar la carga entre los contenedores, o pasar secretos de autenticación entre contenedores, generalmente se controlan y automatizan mediante un software de orquestación de contenedores, tal como Kubernetes, Amazon's ECS o Apache Mesos.

Infraestructura inmutable

La virtualización nativa de la nube (y especialmente los contenedores) permiten un poderoso enfoque para administrar las cargas de trabajo de producción llamada infraestructura inmutable. En este paradigma, los servidores de producción nunca se cambian en el lugar después de su deploy. Por el contrario, si un componente del sistema necesita repararse o modificarse de alguna manera, los nuevos servidores (o contenedores) se construyen a partir de una imagen común con los cambios apropiados y reemplazan las instancias anteriores.

Esto es a menudo ilustrado por la metáfora de mascotas versus ganado.

En el mundo on-premise, los servidores son tratados como mascotas: hay una máquina física específicamente nombrada que recibe mucho cuidado y atención. De manera similar a cómo responden las familias cuando una mascota querida se enferma, si algo le sucede al precioso servidor, todos lo sienten; necesita ser reparado o parcheado, o recibir algún tipo de solución para que continúe funcionando. Con el tiempo, estos servidores se vuelven cada vez más únicos y frágiles, es decir que los nuevos cambios o arreglos tienen cada vez más probabilidades de causar problemas inesperados.

La infraestructura inmutable, por otro lado, puede ayudar a garantizar la estabilidad y la transparencia de la configuración del sistema y los deploys confiables y repetibles. En este enfoque, los servidores y contenedores serían tratados más bien como ganado. Cuando una instancia se vuelve problemática, en lugar de brindarle un tratamiento personalizado, uno se desentiende; es decir, la apaga y la reemplaza por una instancia clonada a partir de una imagen común correctamente fijada y probada.

DevOps y Automatización

Es un conjunto de prácticas que cierran la brecha entre el desarrollo de software y las operaciones. Los equipos de DevOps logran agilidad al adherirse al modelo de Continuous Delivery (CD), donde los cambios incrementales y las actualizaciones de los sistemas de software se implementan permanentemente en la producción con un alto grado de automatización y repetibilidad.

Las organizaciones maduras de DevOps automatizan en gran medida las tareas operativas de rutina, como las comprobaciones del estado de las aplicaciones, el monitoreo, las alertas y la seguridad, y estandarizan los entornos en todo el ciclo de vida de sus sistemas.

El retorno de la inversión en DevOps y automatización viene en forma de estabilidad, seguridad, repetibilidad y mayor velocidad de cambio: cuantos más cambios se puedan realizar en el software de manera segura y confiable, más frecuentemente se harán.

¿Por qué te debería importar?

¿Por qué los líderes empresariales deberían preocuparse por la nube en general y el desarrollo de software nativo en la nube en particular? Bueno, creo firmemente que ser nativo de la nube ya no es algo exclusivo para los Netflix y los Google de este mundo.

Las prácticas y principios nativos de la nube (como las arquitecturas de microservicios, con pequeños equipos de desarrollo que iteran en los componentes de forma independiente, junto con una automatización robusta y prácticas DevOps) permiten a las empresas entregar y desarrollar sus sistemas de software a la velocidad de los negocios.

Esta agilidad es la principal forma de gestionar el riesgo y capturar oportunidades de mercado a través de la tecnología. Y esto no es realmente opcional para ningún negocio.