Cloud Native: principios, aplicaciones y desafíos
CLOUD NATIVE, TRANSFORMACIÓN.¿Qué es Cloud Native?
Cloud Native (nube nativa) es un patrón de arquitectura de software para desarrollar aplicaciones usando principios esenciales de cloud computing, como la escalabilidad, elasticidad y agilidad.
Con las tecnologías Cloud Native se pueden crear y ejecutar aplicaciones escalables en entornos dinámicos y modernos, permitiendo que sistemas poco acoplados sean manejables y resistentes. Al combinarse con una automatización sólida, se pueden realizar cambios de alto impacto con un mínimo esfuerzo.
Cloud Native permite tener velocidad y agilidad, con sistemas diseñados para aceptar cambios rápidos a gran escala.
Arquitectura y servicios de Cloud Native
Las arquitecturas Cloud Native están diseñadas para mejorar aplicaciones tradicionales o hacer nuevos desarrollos con valores muy simples: más rápido, de mejor calidad y por un costo menor.
Los beneficios de Cloud Native se reflejan en sus principios:
Escalabilidad
Posibilidad de que los recursos y aplicaciones escalen horizontal o verticalmente de manera rápida y dinámica, con pocas restricciones en términos del hardware en que se ejecutan.
Velocidad
Desarrollar, probar y entregar código de calidad mucho más rápido. Cloud Native aumenta la capacidad de los equipos sin aumentar el gasto de las empresas.
Costos Marginales
Desde un punto estratégico, Cloud Native aprovecha la facturación flexible de proveedores cloud así como el dinamismo de pagar por recursos adicionales solo cuando sean necesarios. En entornos on-premise, permite agregar o quitar hardware de manera dinámica sin afectar el funcionamiento base del sistema.
Los cuatro pilares de Cloud Native
1. Continuous Delivery (entrega continua)
Continuous Delivery, o entrega continua, es la motivación base para cloud-native: entregar software más rápido, recibiendo retroalimentación en menor tiempo. Esta práctica les permite a los desarrolladores crear, probar y preparar automáticamente cambios en código, verificando actualizaciones en las aplicaciones en varias dimensiones antes de enviarlas a sus usuarios. Todo esto con el objetivo de mejorar la eficacia y rapidez de la entrega de software.
2. DevOps
Es la manera en que afrontamos los retos culturales y técnicos para una estrategia cloud-native. La palabra combina las prácticas de desarrollo (Dev) con operaciones (Ops) y permite adaptarse al entorno de Cloud Native para asegurar que una empresa entregue constantemente un software de calidad y al mismo tiempo maximice el retorno de inversión. A medida que evoluciona el negocio también lo hacen sus prácticas DevOps.
3. Microservicios
Es el patrón de arquitectura usado para efectivamente expandir el proceso de desarrollo y entrega de software, evitando las estrategias lentas y riesgos de los desarrollos monolíticos. Con microservicios se desarrolla la aplicación en pequeños servicios de manera totalmente independiente.
Al ser independientes los servicios, se pueden usar diferentes lenguajes o plataformas, ser liderados por equipos distintos y en general ser mucho más agresivos para lanzar nuevas funcionalidades sin afectar las demás. Estos interactúan entre sí a través de la exposición de API's y mantienen su independencia. Una de las ventajas de usar microservicios es que adaptan su escala fácilmente a la demanda del sistema.
4. Contenedores
En su esencia los contenedores son una manera de empaquetar software. Un contenedor se ejecuta de manera predecible, repetible e inmutable. No hay errores asociados a mover el código de máquina en máquina, pues al lanzar una nueva funcionalidad, se despliegan máquina y código en un mismo contenedor. Todo lo que el servicio necesita, las librerías, dependencias y sistema operativo, está empaquetado en el contenedor en sí. Es similar a trabajar con máquinas virtuales, pero sin la carga e ineficiencia de montar un sistema operativo completo.
Un contenedor es una especie de máquina virtual muy portable y es menos exigente en cuanto a recursos de cómputo que las máquinas virtuales convencionales (por eso se las llama livianas o ligeras).
Los contenedores son entonces una herramienta fantástica para iniciativas Cloud Native modernas. Pueden ejecutar microservicios, funciones independientes o incluso aplicaciones monolíticas tradicionales.
Aplicaciones de Cloud Native
El enfoque Cloud Native permite moverse rápidamente, con pasos pequeños, reversibles y reduciendo el riesgo técnico. Este ideal no es fácil de obtener, ni tampoco es gratis. Implica un cambio importante en la cultura y filosofía de desarrollo así como múltiples retos técnicos.
Microsoft plantea el siguiente conjunto de principios para obtener aplicaciones Cloud Native:
Gestión de costos: centrarse en generar desde el principio un valor incremental.
Excelencia operativa: automatizar el entorno y las operaciones para aumentar la velocidad y reducir el error humano.
Eficiencia en el rendimiento: satisfacer eficientemente las demandas de las aplicaciones.
Confiabilidad: crear apps resistentes y disponibles, permitiendo que las aplicaciones se recuperen de los errores y sigan funcionando.
Seguridad: implementar la seguridad en todo el ciclo de vida de la aplicación.
Características de las aplicaciones Cloud Native
Las aplicaciones Cloud Native consisten en varios servicios individuales (microservicios), independientes entre sí. La comunicación entre ellos se realiza mediante interfaces API.
Estas aplicaciones se comportan de manera predecible, al ejecutarse con un alto grado de automatización.
Beneficios de las aplicaciones Cloud Native
Flexibilidad: los desarrolladores poseen mucha libertad, porque todos los servicios se ejecutan independientemente del entorno.
Escalabilidad: las empresas no tienen que realizar costosas actualizaciones de hardware al incrementarse los requerimientos de un servicio.
Las actualizaciones y cambios se reflejan de inmediato: estas aplicaciones permiten reaccionar rápidamente a los requerimientos del mercado.
Alto grado de automatización: esta característica minimiza los errores humanos y operativos.
Orquestación de contenedores con Kubernetes
La orquestación de contenedores permite gestionar infraestructuras complejas muy fácilmente, al aprovechar al máximo procesos ya definidos y tareas automatizadas.
Puede gestionar actividades como:
Montaje de máquinas.
Inicializar contenedores.
Reemplazar contenedores fallidos.
Enlazar contenedores entre sí.
Exponer servicios a máquinas fuera del cluster.
Escalar los contenedores para satisfacer la demanda.
Organizar despliegues de código sin afectar la disponibilidad del servicio.
La orquestación requiere herramientas de fácil instalación, configuración y mantenimiento, por lo cual se creó Kubernetes.
¿Qué puede hacer Kubernetes?
Kubernetes es una plataforma Cloud que combina portabilidad y extensibilidad para reducir la complejidad de los recursos que ofrecen los proveedores Cloud. Sus principales funciones son:
Distribución inteligente de contenedores entre máquinas (nodos).
Integración con diferentes plataformas y proveedores Cloud.
Aprovechar los recursos de hardware para ejecutar aplicaciones, reduciendo recursos no utilizados.
Balanceo de cargas inteligente entre diferentes nodos
Metodología “12 factor App” - SaaS
Esta metodología sirve para optimizar el desarrollo de aplicaciones Software as a Service (SaaS). Establece un conjunto de prácticas y principios que deben seguir los desarrolladores para construir aplicaciones optimizadas a entornos de nube modernos, enfocándose principalmente en la portabilidad entre entornos y la automatización declarativa.
Los sistemas basados en estos principios se pueden implementar y escalar rápidamente, además de que permiten agregarles funciones para reaccionar rápidamente a los cambios y requerimientos del mercado.
La metodología 12 factor App se presentó mediante la publicación de un escrito, donde se explican sus objetivos:
· Configuraciones automatizables y explícitas.
· Dependencias claras con el entorno para máxima compatibilidad.
· La aplicación debe ser desplegada en la nube.
· Despliegue continuo.
· Aplicaciones enfocadas en la escalabilidad.
Automatización de infraestructura
Existen varias herramientas que permiten crear secuencias de comandos de forma declarativa para la infraestructura de nube que se necesite, donde los nombres, ubicaciones y capacidades de los recursos están parametrizados y son dinámicos.
La Infraestructura como Código (IaC) es una metodología para codificar y mantener la infraestructura informática. En lugar de tener que configurar manualmente los dispositivos de hardware y los sistemas operativos por separado, con IaC los desarrolladores pueden administrar, monitorear y aprovisionar recursos automáticamente.
IaC puede ejecutar el mismo script una y otra vez sin efectos secundarios. Si se necesita hacer un cambio, IaC edita y vuelve a ejecutar el script, solo viéndose afectados los recursos actualizados.
Tecnologías de Cloud Native
Gracias al ágil desarrollo de infraestructuras y software de alto rendimiento se pueden obtener soluciones totalmente funcionales y operativas en la nube. Para ello se cuenta con las siguientes soluciones Cloud Native de alto nivel:
Contenedores: unidades estándar de software que empaquetan el código y todas sus dependencias para que la aplicación se ejecute de un entorno informático a otro de forma rápida y confiable.
Orquestador de contenedores.
Plataforma de soluciones Cloud: conjunto de servicios de computación en la nube ofrecidos a través de Internet.
Plataforma como Servicio (PaaS): conjunto de servicios basados en la nube que permite a los desarrolladores crear aplicaciones a una gran velocidad.
Plataforma de automatización de infraestructura.
Infraestructura como código.
Nubes privadas, públicas o híbridas
Un atractivo importante de Cloud Native es no requerir un compromiso de dónde se alojan estas aplicaciones. Puede hacerse en diferentes operadores cloud como Amazon Web Services, Azure o Google Cloud Platform, o combinarlo con nubes privadas on-premise. Cloud Native no se limita a grandes empresas, sino que permite que pequeñas empresas –con el suficiente compromiso– sean más competitivas.
El uso efectivo de tecnologías de orquestación como Kubernetes, PaaS (Open Shift) o herramientas de automatización como RedHat Ansible y Terraform, empiezan a desdibujar la línea que separa ambientes locales (on-premise) o remotos, entornos corriendo sobre virtualización o hardware directo (bare-metal) o las limitaciones de entornos de desarrollo diferentes a producción.
CNCF - Cloud Native Computing Foundation
La importancia de Cloud Native es tan grande que se ha creado un entramado organizacional para garantizar que las decisiones de las decenas de organizaciones interesadas se tomen ágilmente y con transparencia.
La fundación CNCF (Cloud Native Computing Foundation) hace parte de la Linux Foundation y cuenta entre sus miembros no solo a los proveedores cloud más importantes como AWS, Azure y Google Cloud, sino a decenas de empresas comprometidas con la iniciativa.
Entre sus proyectos más destacados está el de fomentar un ecosistema para el desarrollo de componentes claves para la iniciativa, como lo son Kubernetes (orquestación), Prometheus (monitoreo), FluentD (logueo), ContainerD y rkt (ejecución de contenedores) o CNI (API de redes), entre otros. El resultado es que la fundación le da transparencia a tecnologías críticas para el futuro de la computación, sin el sesgo natural de intereses de un solo fabricante. Es así como la CNCF lidera algunos de los proyectos de desarrollo más rápidos en la historia del código libre (open-source).
Desafíos y consideraciones
El desarrollo de soluciones basadas en Cloud Native se engloba dentro del marco de profundos cambios en el paradigma de desarrollo de software de la industria. La transformación digital exige mejores prácticas en todo el ciclo de desarrollo de software.
Las aplicaciones Cloud Native son intencionalmente desarrolladas para un modelo cloud. Son construidas con un ritmo rápido de desarrollo por equipos pequeños enfocados en cada tipo de funcionalidad, garantizando la escalabilidad, portabilidad entre ambientes, resiliencia y agilidad.
Es importante entender que la operación de sistemas va a cambiar en un mundo Cloud Native. Las personas de infraestructura y operaciones pasan de tener un rol más pasivo, de mantenimiento y protección contra incidentes, a ser impulsores de procesos de cambio, automatización y generación de valor de negocio.
No todas las aplicaciones tienen que convertirse a Cloud Native, y es algo que los equipos de negocios y TI deben acordar en el momento de darle prioridad a las cargas de trabajo, considerando su viabilidad técnica, importancia estratégica y retorno de la inversión (ROI) caso por caso. En adición a los desarrollos nuevos, en donde hay mucha libertad para elegir cómo hacerlos, los retos de actualizar plataformas existentes requieren procesos de cambio más sofisticados a nivel organizacional.
En Aplyca estamos convencidos que Cloud Native será un sinónimo del uso eficiente de la tecnología en la economía digital y que va a acelerar la transformación digital en las empresas (grandes y pequeñas) más innovadoras de los próximos años.
Si su organización tiene interés en implementar Continuous delivery, DevOps, Microservicios o Contenedores de la mano de expertos, lo invitamos a contactarnos.