OpiniónInfraestructuras

El desarrollo nativo de la nube con microservicios y contenedores: las aplicaciones del futuro

Adela de Toledo, Country Manager Pure Storage Iberia.

Adela Toledo, Pure Storage.
Adela Toledo, Pure Storage.

Gartner prevé que en este 2022 más del 75% de las organizaciones globales ejecutarán aplicaciones contenedorizadas en producción, frente a menos del 30% que lo estaban haciendo en 2021. Estas aplicaciones pueden proporcionar unos beneficios importantes frente al diseño de aplicaciones monolítico tradicional como la escalabilidad, la elasticidad y la agilidad. Durante la reciente conferencia Kubecon de 2021, ha quedado claro que las aplicaciones contenedorizadas se están convirtiendo en la norma. Según la CNCF (Fundación para la computación nativa de la nube), cada vez son más las organizaciones europeas que adoptan la contenedorización.

Las aplicaciones “Cloud-Native” se han diseñado específicamente para operar de manera semejante a la nube desde el primer día, tanto si se encuentran en la nube pública como On Premise. Pueden desplegarse y repararse con más rapidez y pueden moverse fácilmente entre diferentes entornos. Las aplicaciones nativas de la nube suelen estar formadas por microservicios y estan empaquetadas en contenedores. Esta nueva pila nativa de la nube incluye un nuevo conjunto de aplicaciones - aplicaciones que analizan datos de transmisión en tiempo real, aplicaciones que indexan cantidades enormes de datos para realizar búsquedas y aplicaciones que entrenan a los algoritmos de aprendizaje automático con conjuntos de datos cada vez más grandes - y, sin duda, esta revolución nativa de la nube está impulsada por una combinación de contenedores y Kubernetes.

Un contenedor es una unidad de software estándar en la que el código y todas sus dependencias están empaquetados

Un contenedor es una unidad de software estándar en la que el código y todas sus dependencias están empaquetados. Como consecuencia de ello, un contenedor puede transferirse de un entorno de computación a otro de un modo rápido y fiable. Los contenedores facilitan el despliegue de las aplicaciones basadas en la nube, porque contienen toda la información necesaria para ejecutarlas en paquetes manejables. Los contenedores permiten ejecutar de manera eficiente las aplicaciones desagregadas, a escala, con una sobrecarga mínima y con la flexibilidad necesaria. Kubernetes proporciona la orquestación que puede dirigir todos estos fragmentos de aplicación y agregarlos en una aplicación compuesta cuando es necesario.

De dónde venimos - las aplicaciones monolíticas

Una aplicación monolítica es una aplicación en la que todos los elementos del código (la interfaz de usuario, la lógica de negocio y el acceso a los datos) se combinan en un sistema fuertemente acoplado. A veces, todo está en un único programa. Otras veces, se trata de un conjunto de servicios muy interconectados con numerosas dependencias manuales, como una única base de datos de Oracle. Dado que toda la aplicación es un solo programa o está fuertemente acoplada, la actualización de una sola línea de código exige volver a desplegar toda la aplicación. Esto hace que las actualizaciones sean complejas y largas. Además, debido a la disrupción que esta indisponibilidad provoca, estas actualizaciones son raras - con frecuencia son trimestrales o anuales - y las nuevas características deben esperar al siguiente lanzamiento. Debido a ello, suele considerarse que las aplicaciones monolíticas son lentas a la hora de responder al usuario y a las necesidades de la empresa.

Entre en los microservicios

¿Cuándo fue la última vez que recibió un aviso de mantenimiento por ejemplo de Netflix? Exacto. Nunca es un buen momento para actualizar estos servicios, ya que siempre habrá alguien viendo una serie nueva. Y si nunca es un buen momento para realizar una actualización, en realidad siempre es el mejor para hacerlo. Suena ilógico. Pero para resolver el problema de las actualizaciones, el principio de los microservicios establece que se ha de dividir una aplicación en piezas más pequeñas que se comunican a través de API, lo que permite que cada parte pueda actualizarse de manera independiente respecto de las otras partes. Gracias a ello, si Netflix, por ejemplo, necesita actualizar su funcionalidad de restablecimiento de la contraseña, no tiene que dejar sin conexión a millones de espectadores, si se trata de un microservicio que puede actualizarse independientemente del resto de la plataforma de streaming.

Los microservicios y los contenedores - una combinación perfecta

Los microservicios permiten que los equipos informáticos desarrollen y ejecuten más fácilmente las aplicaciones que sus usuarios quieren. Muchas de las mayores aplicaciones para consumidores y empresas se ejecutan actualmente como microservicios. Esto demuestra que no solo es una tendencia relevante para las organizaciones más pequeñas, sino también para las más grandes y complejas. ¿En qué tipo de entorno hay que ejecutarlos? Los contenedores son el componente perfecto para los microservicios. Proporcionan un entorno ligero y homogéneo, que puede seguir a la aplicación desde el escritorio del desarrollador, pasando por los sistemas de prueba, hasta el despliegue final en el sistema de producción. Además, los contenedores pueden ejecutarse en dispositivos físicos o virtuales y se ponen en marcha en segundos o incluso en milisegundos, es decir, más rápidamente que una máquina virtual completa.

Empaquetar las aplicaciones con sus dependencias

Tradicionalmente, los paquetes de software han incluido todo el código necesario para ejecutar la aplicación en un sistema operativo concreto, como Windows o Linux. Sin embargo, para ejecutar una aplicación se necesita algo más que el simple código de esta, se necesitan otras aplicaciones. Por ejemplo, una aplicación para buscar cotizaciones bursátiles puede usar una biblioteca para convertir los nombres de las empresas en símbolos de las acciones y a la inversa. Esta funcionalidad es genérica y no genera un valor añadido, pero es importante para permitir que un usuario teclee «Apple» y obtenga la acción «AAPL». La biblioteca es un ejemplo de una dependencia. Sin que el equipo de TI lo sepa, cualquier aplicación puede tener cientos de este tipo de dependencias.

Una de las principales razones por las que los contenedores se han hecho tan populares es que han proporcionado un mecanismo y un formato para empaquetar el código de la aplicación —con sus dependencias— de una manera que hace que sea fácil ejecutar una aplicación en diferentes entornos. Esto ha resuelto una gran dificultad de los desarrolladores, que se enfrentaban constantemente a problemas de compatibilidad de entorno entre los portátiles de desarrollo, los entornos de prueba y la producción. Al usar los contenedores para empaquetar sus aplicaciones, han podido «codificar una vez y ejecutar en cualquier parte», acelerando muchísimo el proceso de entrega de las aplicaciones.

La complejidad de gestionar múltiples contenedores

Las aplicaciones modernas incluyen múltiples microservicios, por ello, también suelen estar hechas de múltiples contenedores. Esto hace que las aplicaciones completas se ejecuten más fácilmente en múltiples entornos, pero también abre el interrogante de cómo realizar el seguimiento y gestionar todos estos contenedores. Inicialmente, los ingenieros de software y las empresas para las que trabajan trataron de encontrar la manera de «ganar dinero» con estos contenedores. Después de todo, los desarrolladores no suelen trabajar con grandes presupuestos. Así que, en una fase temprana, se consideró que la gestión - y la orquestación - de todos estos contenedores eran una prolongación necesaria y lucrativa de la revolución de los contenedores. En junio de 2014, Google lanzó Kubernetes como un proyecto de código abierto y fue uno de los primeros proyectos que abordó los retos planteados por la gestión de los contenedores.

Por qué se necesita una experiencia de datos moderna

Por lo que se refiere a los retos, la primera generación de aplicaciones nativas de la nube se diseñó para ser “statless”, sin estado - utilizando contenedores que realizaban el trabajo de la aplicación, pero que no tenían que almacenar ningún dato persistente en volúmenes asociados. Sin embargo, a medida que el uso de los contenedores evoluciona, los desarrolladores van creando cada vez más aplicaciones “stateful”, con estado dentro de los contenedores - aplicaciones que tienen que almacenar datos en un volumen que sea persistente y se conserve.

Es aquí donde el mundo del almacenamiento empieza a plantear retos y se hace necesaria una experiencia de datos moderna, porque la flexibilidad y la accesibilidad de los contenedores se convierten en obstáculos y cuellos de botella en la capa de almacenamiento. Las capacidades de almacenamiento sencillas que hemos dado por descontadas durante años en la pila de aplicación tradicional (disponibilidad alta, recuperación de desastres, copias de seguridad, encriptado), pasan a ser retos en el mundo de los contenedores. Y lo que es peor, muchas veces cada aplicación tiene su propia estrategia de almacenamiento, lo que hace que resulte imposible garantizar la conformidad de los datos y de los estándares en una organización.

El aprovisionamiento bajo demanda

Como buena práctica recomendamos elegir una solución que proporcione los servicios de datos nativos de Kubernetes que necesitan tanto las aplicaciones nativas de la nube como las tradicionales (ya que estas últimas no van a desaparecer en un futuro próximo). Esto significa que hay que proporcionar servicios de almacenamiento de bloques, archivos y objetos, con múltiples clases de rendimiento y aprovisionados bajo demanda tal como Kubernetes requiere. También implica proporcionar un acceso instantáneo a los datos, protección frente a todo tipo de fallos, capacidad para mover los datos entre nubes e incluso hacia/desde la periferia y un sólido nivel de seguridad sin importar adónde vaya la aplicación

El futuro de Kubernetes

Debemos entender por qué los microservicios son la arquitectura moderna que hay que adoptar para el desarrollo de las aplicaciones, por qué los contenedores son el componente perfecto para los microservicios y por qué necesitamos Kubernetes cuando el número de contenedores se dispara. Pero la historia no acaba aquí. Kubernetes se utiliza cada vez más para gestionar aplicaciones no contenedorizadas, sino tan solo componentes. Siempre que la aplicación sea automatizable y separe la configuración y el almacenamiento de la computación, Kubernetes puede ayudar. Es muy posible que la contenedorización continúe, pero cada vez veremos más empresas que usan Kubernetes sin contenedores para algunas aplicaciones.

Computing 815