Informática sin servidor vs. contenedores | Cómo elegir

Los contenedores y la informática sin servidor son arquitecturas que reducen la sobrecarga de las aplicaciones web alojadas en la nube, pero difieren en varios aspectos importantes. Los contenedores son más ligeros que las máquinas virtuales, pero los despliegues sin servidor son todavía más ligeros y se escalan más fácilmente que las arquitecturas basadas en contenedores.

Metas de aprendizaje

Después de leer este artículo podrás:

  • Entender qué son los contenedores
  • Entender cómo se diferencian los contenedores de los despliegues sin servidor

Copiar el enlace del artículo

Informática sin servidor vs. contenedores

Tanto la informática sin servidor como los contenedores permiten a los desarrolladores desarrollar aplicaciones con mucha menos sobrecarga y más flexibilidad que las aplicaciones alojadas en servidores tradicionales o máquinas virtuales. El estilo de arquitectura que debe utilizar un desarrollador depende de las necesidades de la aplicación, pero las aplicaciones sin servidor son más escalables y tienden a ser más rentables.

¿Qué son los contenedores?

Un contenedor "contiene" tanto una aplicación como todos los elementos que la aplicación necesita para ejecutarse correctamente, incluyendo las bibliotecas del sistema, la configuración del sistema y otras dependencias. Como pasa con una mezcla para tortitas en la que "solo hay que añadir agua", los contenedores solo necesitan una cosa para llevar a cabo su función: ser alojados y ejecutados.

Cualquier tipo de aplicación puede ejecutarse en un contenedor. Una aplicación en contenedor se ejecutará de la misma manera, independientemente de dónde esté alojada. Los contenedores pueden trasladarse con facilidad y desplegarse allí donde sean necesarios, de forma muy parecida a los contenedores físicos de transporte, que tienen un tamaño estándar y, por tanto, pueden enviarse a cualquier lugar mediante diversos medios de transporte (barcos, camiones, trenes, etc.), independientemente de su contenido.

Arquitectura de los contenedores

En términos técnicos, los contenedores son una forma de dividir una máquina, o servidor, en entornos de espacio de usuario separados, de forma que cada entorno solo ejecute una aplicación y no interactúe con ninguna otra sección dividida de la máquina. Cada contenedor comparte el núcleo de la máquina con otros contenedores (el núcleo es la base del sistema operativo, e interactúa con el hardware del ordenador), pero se ejecuta como si fuera el único sistema de la máquina.

Contenedores vs. máquinas virtuales

Una máquina virtual es una pieza de software que imita un sistema informático completo. Está aislada del resto de la máquina que la aloja y se comporta como si fuera el único sistema operativo que hay en ella, incluso tiene su propio núcleo. Las máquinas virtuales son otro modo habitual de alojar varios entornos en un servidor, pero utilizan mucha más potencia de procesamiento que los contenedores.

¿Qué es la informática sin servidor?

Las aplicaciones sin servidor se dividen en funciones y son alojadas por un proveedor de terceros, que solo cobra al desarrollador de la aplicación por el tiempo en el que se ejecuta cada función. Para más información sobre la informática sin servidor, consulta ¿Qué es la informática sin servidor?

¿Cuáles son las principales diferencias entre la informática sin servidor y los contenedores?

Máquinas físicas

Realmente la informática "sin servidor" se ejecuta en servidores, pero depende del proveedor de la informática sin servidor del aprovisionamiento del espacio del servidor según lo necesite la aplicación; no se asignan máquinas específicas para una función o aplicación determinada. Por otro lado, cada contenedor vive en una máquina a la vez y usa el sistema operativo de esa máquina, aunque pueden trasladarse fácilmente a otra máquina, si así se quiere.

Escalabilidad

En una arquitectura basada en contenedores, el número de contenedores desplegados lo determina, de antemano, el desarrollador. En cambio, en una arquitectura sin servidor, el backend se escala de forma inherente y automática para satisfacer la demanda.

Sigamos con la metáfora del contenedor marítimo; una empresa naviera podría intentar predecir un aumento de la demanda de un determinado producto y enviar más contenedores al destino para satisfacer dicha demanda, pero no podría chasquear los dedos y producir más contenedores llenos de mercancías si la demanda superara las expectativas.

La arquitectura sin servidor es una forma de hacer exactamente eso. En lo que respecta a la potencia informática, la informática sin servidor es como el suministro de agua en una casa moderna: al abrir el grifo, los consumidores pueden conseguir y utilizar el agua que necesitan en cualquier momento, y solo tienen que pagar por lo que usan. Esto es mucho más escalable que intentar comprar agua por cubo o contenedor.

Costos

Los contenedores se ejecutan constantemente y, por tanto, los proveedores en la nube tienen que cobrar por el espacio del servidor incluso si nadie está utilizando la aplicación en ese momento.

No existen los gastos continuos en una arquitectura sin servidor, porque el código de la aplicación no se ejecuta a menos que sea llamado. En cambio, a los desarrolladores solo se les cobra por la capacidad de servidor que su aplicación esté utilizando.

Mantenimiento

Los contenedores se alojan en la nube, pero los proveedores en la nube no los actualizan ni los mantienen. Los desarrolladores tienen que gestionar y actualizar cada contenedor que implementan.

Desde la perspectiva del desarrollador, una arquitectura sin servidor no tiene un backend que gestionar. El proveedor se encarga de toda la gestión y las actualizaciones de software de los servidores que ejecutan el código.

Momento de implementación

Los contenedores tardan más en configurarse inicialmente que las funciones sin servidor, porque es necesario configurar los ajustes del sistema, las bibliotecas, etc. Una vez configurados, los contenedores apenas tardan unos segundos en implementarse. Pero debido a que las funciones sin servidor son más pequeñas que los microservicios de los contenedores, y no vienen con dependencias del sistema, solo necesitan unos milisegundos en implementarse. Las aplicaciones sin servidor pueden estar activas en cuanto se carga el código.

Velocidades de implementación de contenedores vs. sin servidor

Pruebas

Es difícil probar las aplicaciones web sin servidor, porque el entorno del backend es difícil de replicar en un entorno local. En cambio, los contenedores se ejecutan igual independientemente de dónde se implementen, lo cual hace relativamente sencillo probar una aplicación basada en contenedores antes de implementarla en producción.

Para Cloudflare Workers, que permite arquitecturas sin servidor, hemos creado un entorno de pruebas virtual para ayudar a mejorar el proceso de desarrollo.

¿En qué se parecen la informática sin servidor y los contenedores?

Ambas están basadas en la nube, y ambas reducen considerablemente la sobrecarga de las infraestructuras: la informática sin servidor todavía más que los contenedores. En ambos tipos de arquitectura, las aplicaciones se dividen y se implementan como componentes más pequeños. En una arquitectura basada en contenedores, cada contenedor ejecutará un microservicio.

¿Qué son los microservicios?

Los microservicios son segmentos de una aplicación. Cada microservicio lleva a cabo un servicio, y varios microservicios integrados se combinan para conformar la aplicación. Aunque el nombre parece implicar que los microservicios son pequeños, no tienen por qué serlo.

Una de las ventajas de desarrollar una aplicación como una colección de microservicios es que los desarrolladores pueden actualizar un microservicio a la vez en lugar de tener que actualizar toda la aplicación cuando necesitan hacer cambios. Desarrollar una aplicación como una colección de funciones, como en una arquitectura sin servidor, ofrece la misma ventaja pero a un nivel más granular.

¿Cómo deben elegir los desarrolladores entre la arquitectura sin servidor y los contenedores?

Los desarrolladores que eligen una arquitectura sin servidor podrán lanzar e iterar nuevas aplicaciones rápidamente, sin tener que preocuparse de si la aplicación se puede escalar o no. Además, si una aplicación no tiene un tráfico o uso constante, la informática sin servidor será más rentable que los contenedores, ya que el código no necesita estar ejecutándose constantemente.

Los contenedores ofrecen más control a los desarrolladores sobre el entorno en el que se ejecuta la aplicación (aunque esto también implica más mantenimiento), y los lenguajes y bibliotecas que se usan. Por esto, los contenedores son extremadamente útiles para migrar aplicaciones heredadas a la nube, ya que es posible replicar el entorno de ejecución original de la aplicación más estrechamente.

Y finalmente, es posible utilizar una arquitectura híbrida, con algunas funciones sin servidor y otras implementadas en contenedores. Por ejemplo, si una función de la aplicación requiere más memoria que la asignada por el proveedor de informática sin servidor, si una función es demasiado grande, o si algunas funciones, pero no otras, necesitan ser de larga duración, una arquitectura híbrida permite a los desarrolladores aprovechar las ventajas de la informática sin servidor, a la vez que siguen utilizando contenedores para las funciones que no son compatibles con la informática sin servidor.

¿Qué tipo de arquitectura permite Cloudflare?

Cloudflare ofrece a los desarrolladores la posibilidad de desarrollar aplicaciones sin servidor de alto rendimiento mediante Cloudflare Workers.