Arquitectura desatendida

Isaac Palacios
Analista de Desarrollo

Desde el principio del desarrollo de software, ha existido una problemática que recae sobre el desarrollador, pero que no tenían que ver con nuestro código, sino con la arquitectura necesaria para la aplicación. Saber en qué versión del lenguaje se trabaja, mantener las dependencias actualizadas y lo más importante, cómo mantenerlas en el tiempo, junto con otras aplicaciones y versiones más actualizadas de los lenguajes y dependencias.

Afortunadamente, llegaron al rescate tecnologías que nos ayudan a solucionar dicha problemática. Entre ellas se encuentran los contenedores y los servicios serverless, pero ¡bendito problema!. Pasamos de no tener opciones a tener opciones muy diferentes entre sí.

Ahora, lo que quiero compartir con ustedes es un poco de información sobre cada uno. Cuáles son los puntos en común, sus diferencias y algunas recomendaciones sobre cuándo puede ser más beneficioso decantarse por alguno de ellos, así que empecemos.

Contenedores

Los contenedores permiten la instalación y configuración del entorno (código fuente y dependencias) para ser ejecutado de forma independiente del sistema host, sin tener en cuenta las configuraciones que este posee. Algunas de sus ventajas son:

  • Portabilidad
  • Control
  • Flexibilidad
  • Independencia
  • Ruta fácil de migración

Serverless

Los servicios serverless proveen la capacidad de ejecutar el código fuente a partir de un evento asociado. El proveedor del servicio se ocupa de todo lo demás, garantizando que las funciones estén siempre disponibles y utilizables, pero sólo cobran por el tiempo ejecutado. Algunas de sus ventajas son:

  • Cero administración
  • Pago por ejecución
  • Costo cero por tiempos muertos o de inactividad
  • Auto-escalamiento

A grandes rasgos, esa es la generalidad de cada uno de los casos, y como podemos ver, se requiere realizar, una única vez, la configuración, con esto continuará trabajando.


Con ambos mundos logramos una independencia de las condiciones físicas y configuraciones técnicas del sistema host, incluso hasta poder desconocerlas por completo.

Inevitablemente, llegamos al cuestionamiento. ¿Cuál debería usar? ¿Por cuál debería decantarme?

Y como todo en el mundo del desarrollo de software, se responde con un depende. Pero hay algunas condiciones que pueden dar pistas sobre hacia dónde inclinar la balanza.

Deberías decantarte por contenedores cuando:

  • Necesitas flexibilidad para instalar y usar software con versiones específicas. Con los contenedores, puedes escoger el sistema operativo subyacente y tener control completo del lenguaje de programación instalado y la versión del runtime.
  • Necesitas migrar un sistema viejo.
  • Requieres tener control sobre la configuración y poder realizarle mantenimiento.
  • Se desea dividir una aplicación monolítica en micro servicios separados, los cuales necesitan ser entregados como grupos individuales de contenedores, lo cual conlleva a utilizar herramientas que permitan que todos los contenedores se hablen entre ellos.

Deberías usar servicios serverless cuando:

  • Deseas escalar rápidamente tu aplicación, incluso pudiendo apagarse por completo al no requerir operar.
  • Puedes desprenderte de la arquitectura necesaria para el funcionamiento de tu código fuente.
  • Requieren iteracciones y puesta a producción de forma más rápida.

Bien, eso es todo lo que puedo compartirles de momento, pero como siempre digo: no lo crean todo, salgan a averiguar y consultar sobre lo aquí expuesto. Siempre estaré abierto a debatir si no estás de acuerdo en algo de lo que expuse.