Desarrollador de aplicaciones trabajando en un entorno digital de doble monitor, que muestra líneas de código en lenguajes. La pantalla resalta elementos clave de la transformación digital, como microservicios, contenedores y DevOps, enfatizando la importancia de adoptar nuevas tecnologías para mejorar la eficiencia y agilidad en los procesos de desarrollo. La imagen refleja la migración hacia arquitecturas modernas que optimizan recursos y facilitan el ciclo de vida de las aplicaciones, destacando la integración de herramientas como Kubernetes para una gestión efectiva y escalabilidad en el desarrollo de software. Este entorno representa el inicio de la jornada digital que las organizaciones públicas y privadas deben recorrer en el siglo XXI.

La transformación digital en el desarrollo de aplicaciones

Se puede definir a la transformación digital como los primeros pasos de la jornada digital, destino inexorable de todas las organizaciones públicas y privadas en el Siglo XXI.

Mucho se ha escrito sobre la transformación y la jornada digital en torno a los procesos de negocios vinculados a la producción, la administración y las relaciones con el mercado, pero también es necesario considerar su impacto en procesos internos de desarrollo de aplicativos, que también son parte de la jornada digital.

Este artículo está destinado al personal de Tecnología de la Información en general y a la creciente comunidad de Profesionales de Desarrollo de Aplicaciones en particular, con explicaciones sencillas, sugerencias prácticas y propuestas concretas de la mejor manera de recorrer este camino de vanguardia siguiendo las mejores prácticas.

Inicia la transformación digital migrando a una arquitectura de microservicios

La transformación digital en el desarrollo de aplicaciones en Tecnología de la Información (TI) implica la adopción de nuevas tecnologías y enfoques para mejorar la eficiencia, la agilidad y la innovación. Algunos de los componentes más importantes de esta transformación incluyen:

  • Nube (Cloud Computing): La adopción de servicios en la nube permite a las organizaciones escalar sus aplicaciones, reducir costos y aumentar la flexibilidad. Esto incluye el uso de todo tipo de plataformas de nube, con destaque especial para los hiper escaladores AWS (Amazon Web Services), Microsoft Azure y GCP (Google Cloud Platform), aunque también comprende a otros proveedores de nubes como IBM y Oracle.
  • DevOps: Esta práctica promueve la colaboración entre los equipos de desarrollo y operaciones para acelerar el ciclo de vida del desarrollo de software, mejorar la calidad del producto y reducir el tiempo de comercialización.
  • Metodologías Ágiles: El uso de enfoques ágiles, como Scrum y Kanban, facilita una entrega más rápida y continua de software, permitiendo una respuesta más efectiva a las necesidades cambiantes del negocio.
  • Inteligencia Artificial: La integración de IA y ML (Machine Learning) y de IAG (IA Generativa) y DL (Deep Learning) en las aplicaciones puede mejorar la personalización, automatizar procesos, reducir costos, generar objetos y proporcionar análisis predictivos.
  • Microservicios y Contenedores: La arquitectura de microservicios y el uso de contenedores como Docker y de herramientas de gestión y orquestación como Kubernetes, permiten una mayor modularidad, escalabilidad, flexibilidad y facilidad de implementación.
  • Automatización de Procesos: La automatización de procesos de desarrollo y operaciones reduce errores humanos, mejora la eficiencia y libera tiempo de personal calificado para tareas de mayor valor agregado.
  • Seguridad de la Información: La incorporación de prácticas de seguridad (DevSecOps) desde el inicio del desarrollo (“by design”) es crucial para proteger los datos y asegurar la integridad de las aplicaciones.
  • Experiencia del Usuario (UX – User Experience): Mejorar la experiencia del usuario es fundamental y puede lograrse mediante aplicaciones que sean intuitivas, accesibles y que satisfagan las necesidades del cliente.
  • Analítica de Datos: La capacidad de recopilar, transformar, analizar y representar con riqueza de contenido grandes volúmenes de datos es esencial para tomar decisiones informadas y optimizar el rendimiento de las aplicaciones.
  • Internet de las Cosas (IoT): La integración de IoT permite la conexión y comunicación entre dispositivos, lo que abre nuevas oportunidades para aplicaciones y servicios innovadores.

Todos o algunos de estos componentes pueden cooperar para habilitar una transformación digital efectiva en el desarrollo de aplicaciones, permitiendo a las organizaciones responder rápidamente a las demandas del mercado y mejorar la satisfacción de los clientes.

En este trabajo nos concentraremos en el uso de prácticas de DevOps con metodologías ágiles, adoptando arquitecturas de microservicios que emplean contenedores y sistemas de orquestación de contenedores, como Kubernetes.

Microservicios, Contenedores y Kubernetes

Hasta hace poco el método más común para crear aplicaciones usaba una arquitectura monolítica, es decir, aplicativos en una única unidad autónoma. Este enfoque funcionó bien para muchos desarrolladores hasta que las aplicaciones aumentaron en complejidad, puesto que, al modificarse una pequeña parte del código en un sistema monolítico, es necesario recompilar todo el sistema, ejecutar todas las pruebas en él e implementar una versión nueva de la aplicación.

Para simplificar eso fueron creados los microservicios, un enfoque que consiste en dividir los sistemas de software en unidades menores que se desarrollan e implementan de forma autónoma. La arquitectura de microservicios fue impulsada por el movimiento DevOps, cuyo objetivo es entregar con frecuencia actualizaciones, como nuevas funciones, correcciones de errores y mejoras de seguridad. También dio pie, en muchos casos, a que las empresas reescribieran aplicaciones antiguas utilizando lenguajes de programación modernos y componentes tecnológicos actualizados.

La arquitectura de microservicios es un concepto para crear una aplicación en forma de una serie de servicios que se pueden implementar de forma independiente, están descentralizados y se desarrollan de forma autónoma. Estos servicios están poco vinculados, se pueden implementar de forma independiente y se mantienen fácilmente. Una aplicación monolítica se crea como una sola unidad indivisible, mientras que los microservicios dividen esa unidad en un conjunto de unidades independientes que contribuyen a un todo más amplio. Los microservicios son una parte integral de DevOps, ya que son la base de las prácticas de entregas continuas que permiten a los equipos adaptarse rápidamente a los requisitos de los usuarios.

Un microservicio es un servicio web responsable de una parte de la lógica, y la combinación de varios microservicios permite crear una aplicación, en la que cada uno de ellos proporciona una parte de la funcionalidad de un dominio. Los microservicios interactúan entre sí mediante API’s (Applications Programming Interfaces), como REST, pero no conocen el funcionamiento interno de los demás servicios. Esta armoniosa interacción entre microservicios es una arquitectura de microservicios, que aporta significativas ventajas como la escalabilidad flexible, mayor agilidad, flexibilidad tecnológica y publicaciones frecuentes más rápidas.

Para la implementación de microservicios se crearon los contenedores, como Docker, que son el paquete de una aplicación y todas sus dependencias, que permiten una implementación fácil y coherente. Como los contenedores no tienen la sobrecarga de su propio sistema operativo, son más pequeños y ligeros que las máquinas virtuales tradicionales. Pueden activarse y desactivarse más rápidamente, por lo que son perfectos para los servicios menores propios de las arquitecturas de microservicios.

Con la proliferación de servicios y contenedores, es esencial coordinar y gestionar grupos numerosos de contenedores. Docker es una popular plataforma de contenedorización y un tiempo de ejecución de contenedores que ayuda a los desarrolladores a crear, implementar y ejecutar contenedores. No obstante, es difícil ejecutar y gestionar contenedores a gran escala utilizando solamente Docker. Kubernetes ayuda a llevar a cabo la contenedorización a gran escala. Docker y Kubernetes empaquetan un servicio en un contenedor completo que se puede implementar y descartar rápidamente. Los microservicios se pueden almacenar en contenedores, así como implementar y gestionar fácilmente mediante un sistema de gestión y orquestación de contenedores, como Kubernetes.

Migración a Kubernetes

La migración a una arquitectura de microservicios basada en contenedores gestionados / orquestados por Kubernetes es una parte muy importante de la transformación digital con relación al ciclo de vida completo de los sistemas aplicativos, cubriendo su desarrollo, implementación y mantenimiento correctivo y evolutivo

¿Por qué migrar a Kubernetes?

  • Porque Kubernetes optimiza el uso de los recursos, por ejemplo, para la gestión de Alta Disponibilidad (HA – High Availability), permitiendo generar réplicas de apenas una parte de la lógica del aplicativo, es decir, solamente de un microservicio (escalabilidad flexible). De manera general el uso de Kubernetes permite aprovechar mejor los recursos de la granja de servidores.
  • El uso de una arquitectura de microservicios en contenedores administrados por Kubernetes proporciona mayor flexibilidad tecnológica, puesto que dichos microservicios no tienen por qué seguir un enfoque establecido con una cadena de herramientas, sino que dan a los equipos de desarrollo la libertad de seleccionar las herramientas más adecuadas a cada caso, o las que los Desarrolladores deseen adoptar, lo que tiende a aumentar su productividad y su satisfacción.
  • Porque permite la administración autónoma de la Alta Disponibilidad (HA – High Availability) y otros procesos, empoderando a los desarrolladores y simplificando los procesos de gestión – administración de los sistemas. 
  • Porque se integra bien con herramientas de CICD (Continuous Integration – Continuous Development). Los procesos tradicionales que involucran el pasaje de los aplicativos y sus modificaciones por los ambientes de Desarrollo y Test a cargo de los Equipos de Desarrollo y Usuarios, y el posterior pasaje al ambiente de Producción por parte del personal de Infraestructura o similar no fluye bien. Kubernetes permite darle control a los Desarrolladores para iniciar este proceso de forma automática, simple, rápida y segura, facilitando que los equipos experimenten con nuevas funciones y que puedan revertirlas si algo no funciona, lo que facilita la actualización del código y acelera el tiempo de salida al mercado de nuevas funcionalidades.
  • Los aplicativos en Kubernetes presentan cortes mínimos (downtime, warm-up) contando con baterías de tests automáticos que aumentan la seguridad y precisión. Al instalarse aplicativos en Kubernetes, se automatiza la instalación de la nueva versión en paralelo con la anterior, realizándose tests automáticos que garantizan la integridad en el reemplazo de versión.
  • Porque Kubernetes permite a la organización tener mayor agilidad en el ciclo de vida de sus aplicativos, posibilitando la realización de publicaciones frecuentes de manera más segura y rápida. Como los equipos de desarrollo pueden ser pequeños e independientes, pueden adoptar prácticas de metodología ágil, trabajando de forma independiente y moviéndose rápidamente, lo que acorta el ciclo de desarrollo.
  • Porque permite una adopción gradual y progresiva. Se puede comenzar “pequeño” en un Data Center propio, haciendo la experiencia con su consultoría de confianza y en la interna, y luego ir creciendo progresivamente, pasando eventualmente a ambientes cloud de cualquiera de los hiper escaladores principales: AWS, Google Cloud, Azure, o de marcas como IBM y Oracle. Al pasar entre ambientes hay que realizar ajustes menores, principalmente de conexión, pero la mayoría del trabajo previo se aprovecha.

¿Por qué sería necesaria ayuda para migrar sus aplicativos a Kubernetes?

Recomendamos un abordaje progresivo en la migración a una arquitectura de microservicios basada en contenedores gestionados / orquestados por Kubernetes, dado que ella demandará servicios profesionales especializados, cubriendo todo el ciclo de vida de las aplicaciones, como los servicios iniciales de migración a Kubernetes, y también los servicios recurrentes de sustentación (mantenimiento correctivo y evolutivo). Cada organización puede abordar esta tarea utilizando exclusivamente recursos propios, o, puede recurrir a servicios profesionales de consultorías especializadas, como Quanam, por las siguientes razones:

  1. Aunque la migración no implique realizar ningún cambio en la programación de los aplicativos, requiere cuidar de numerosos aspectos técnicos vinculados a la configuración y la implantación (deployment) en los ambientes de producción.
  1. En general los clientes finales no cuentan con disponibilidad de todo el personal técnico especializado como para hacerlo con recursos propios. Además, estimamos que el costo de intentar estas migraciones sin apoyo especializado externo costaría más caro que contratar dicho apoyo y probablemente la calidad del resultado no sería igual, dada la mayor productividad de Consultores que trabajan enfocados en este tipo de tareas y tienen vasta experiencia en un amplio abanico de casos de uso similares.
  1. Quanam cuenta con un equipo profesional calificado, con experiencia en las casuísticas más diversificadas, que aplican cotidianamente las mejores prácticas en la industria, teniendo “casi todo pronto” para iniciar y efectuar en forma ágil los proyectos de migración a Kubernetes de sus clientes.

José C. Nordmann

SME en Transformación Digital
Miembro del Consejo Mundial para un Planeta más Seguro
Miembro de ACFE (Association of Certified Fraud Examiners)
Miembro del i2 Group Worldwide Advisory Board