Actualizando mi entendimiento de los servicios y aplicaciones con las tendencias que debemos tener en el radar con un ejemplo hipotético.
El siguiente es un ejercicio hipotético para poder entender y explicar el dinamismo y la evolución de la entrega de los sistemas al cliente. Esto parado desde la óptica de un profesional de la infraestructura.
Antes de entender Tanzu, k8s o docker, es importante entender la arquitectura microservicio de una aplicación que corre como un contendor y su relación con el sistema operativo, el hardware, la infraestructura en general y la nube
Para aterrizar el concepto, imagine dos escenarios, muy parecidos con la misma problemática:
1era: Una empresa de desarrollo de software, digamos un sistema administrativo o contable que se está vendiendo muy bien y que piensa internacionalizar.
2da: Una corporación multinacional que tiene un sistema que es utilizado masivamente por muchos departamentos.
La solución de ambos escenarios tienen las siguientes características:
Está basado en arquitectura monolítica, es decir, todo el código está compilado y que debe ser administrado, desplegado y gestionado en una sola entidad, programado en un lenjuaje, digamos, visual fox pro.
Si se tiene que cambiar una línea de código por alguna regulación gubernamental o de otro tipo, ese cambio debe de implementarse en todos los clientes o en todos los departamentos, si son 10 estaciones de trabajo podría estar bien, pero si el sistema se está vendiendo o se está implementando caa vez más, escalar puede ser todo un dolor de cabeza.
Otra caracteríatica: El sistema corre on-premise, es decir, cada vez que se vende el sistema, hay que ir al cliente y hacer una instalación en cada computador físico, hacerle la configuración personalizada, etc.
Cuando más y más clientes compran el sistema, el soporte, las actualizaciones, los parches, el licenciamiento, las consultas y todo debe hacerse sobre el computador físico del cliente. Y aunque hay herramientas que permiten acceder remotamente para solucionar (Pc-anywhere, rdp o anydesk), la gestión requiere recursos humanos y tiempo para dicha gestión.
Ahora llega usted y propone hacer un cambio para que el sistema pueda escalar masivamente y reducir los costos de gestión, upgrade, soporte y más.
Propuesta # 1: Migrar el sistema para que corra en la nube en vez de en sitio o on-premise.
La idea está muy buena y parece traer beneficios. Pero desarrollar todo de nuevo en la nube, que se pueda ingresar a través de un navegador, con toda la lógica y el código que lleva años desarrollándose y que por los avances tecnológicos, tendría que ser en otro lenguaje de programación, suena algo loco a corto plazo.
Propuesta # 2: Migrar o desarrollar nuevos módulos como microservicios en la nube.
Básicamente la idea consiste en ir dividiendo el gran sistema en pequeños módulos o servicios micros, que seguro ya está dividido en módulos o funciones dentro del monolítico.
Pongamos un ejempolo, la función de calcular el impuesto. Cuando al sistema central le toque calcular el impuesto, el sistema local ejecutará una función vía API REST o https con los parámetros como país, monto, tipo de moneda, tasa u otro y que estará corriendo en la nube.
Esta función podría estar desarrollada en un lenguaje de programación actualizado, y sería un cambio mínimo y viable que podría repetirse cíclicamente.
Lo anterior también aplica a un nuevo servicio o módulo, en vez de incorporarlo en el monolítico on-premise, se hace en la nube como un micro servicio.
Propuesta # 3: Contenedores y máquinas virtuales.
Si todos están entusiasmados con las 2 primeras propuestas, la siguiente pregunta es, ¿dónde colocamos el sistema para ser accedido?, ¿en qué lenguaje lo desarrollamos?, y ¿Cómo administramos la infraestructura que soportaría el microsrevicio?
Alquilar una máquina virtual en un hosting podría ser una de las opciones, pudiese ser una vm pequeña, o instalar un sistema de contenedores, docker por ejemplo que es uno de los estándares actuales.
Pero el detalle está con la disponibilidad, es decir, qué pasa si el servidor físico donde está la solución se cae?, sea una vm o un contenedor, ¿Y el tema del balanceo de las cargas o de los recursos? ¿Los respaldos? ¿Qué pasa en caso de un desastre? Estos y otros temas empiezan a preocupar.
Estos temas de infraestructura pueden ser transparentes con proveedores de máquinas virtuales o de contenedores, que hacen que la infraestructura y los servicios de balanceo, capacidades, respaldo, fallas, desastres y otros sea transparentes.
A continuación un enlace de 9 proveedores de Kubernetes:
https://geekflare.com/es/managed-kubernetes-platform/
También pueden alquilar proveedores SaaS (Software como Servicio), CaaS (Contendores como Servicio) y también hay proveedore VMaaS (Virtual Machine como Servicio), donde también es transparente si son máquinas virtuales o contenedores, y se paga por consumo y por los servicios.
Enlace de 7 proveedores de contenedores como servicio:
Enlace de 9 proveedores de VMaaS:
https://www.hostingadvice.com/how-to/the-best-virtual-machine-hosting/
Por detrás hay soluciones como Kubernetes o Tanzu que orquesta clusteres de contenedores, también hay soluciones de virtualización como VMware, KVM u otros.
Sobre los lenguajes de programación, casi todos los lenguajes se pueden empaquetar en imágenes para ejecutarse, unos son más complejos que otros, ya que requieren más o menos procesos, librerías, herramientas y más.
Te dejo algunos enlaces sobre herramientas para acelerar la productividad de los desarrolladores y DevOps:
https://www.atlassian.com/software/bamboo
https://www.jetbrains.com/teamcity/
El tema de los lenguajes de programación es otro mundo, el cual hay que sentarse y decidir.
La idea del artículo es que los colegas de infraestructura puedan percibir el movimiento tan agresivo para servir las aplicaciones y sistemas a los usuarios, ya que los servidores, los sistemas operativos y toda la infraestructura que lo soporta básicamente se hace para un objetivo, para que se ejecuten aplicaciones.
Por lo anterior, es importante familiarizarnos con los temas y las arquitecturas de contenedores, cloud, XaaS, microservicios y todas las herramientas y plataformas que rodean este mundo.
Allí puede estar nuestro próximo trabajo, servicio o emprendimiento.