Despliegue e infraestructura
Aprende cómo se implementan y administran los servicios de backend mediante flujos de trabajo prácticos de infraestructura y de lanzamiento.
Del código a producción
Los sistemas backend no se ejecutan directamente desde el código fuente; pasan por una canalización que transforma el código en un sistema de producción estable.
- El código debe compilarse o construirse en un artefacto ejecutable antes de su ejecución.
- El despliegue mueve la aplicación a un entorno de producción en vivo.
- Una canalización estructurada reduce errores y garantiza la consistencia entre entornos.
Detalles
En sistemas reales, el código fuente por sí solo no es suficiente para ejecutar una aplicación. Primero debe procesarse hasta convertirse en una forma que el sistema pueda ejecutar, como un binario compilado o un servicio empaquetado. Esto ocurre durante la etapa de compilación.
Después de compilarse, la aplicación se despliega en servidores o en infraestructura en la nube. Este paso incluye la configuración de entornos de ejecución, configuraciones y dependencias necesarias para que el sistema funcione correctamente.
Omitir estos pasos provoca un comportamiento inconsistente, donde el código funciona en un entorno pero falla en otro. Esta es una de las causas más comunes de problemas en producción.
Para evitarlo, los sistemas modernos usan canalizaciones automatizadas que mueven el código de forma consistente a través de las etapas de compilación y despliegue. Esto garantiza que cada versión siga el mismo proceso, mejorando la confiabilidad y reduciendo el error humano.
Pipelines de CI/CD
Los pipelines de CI/CD automatizan el proceso de compilar, probar y desplegar código, convirtiendo los lanzamientos manuales en flujos de trabajo rápidos, repetibles y confiables.
- La Integración Continua (CI) garantiza que el código se fusione con frecuencia y se pruebe automáticamente.
- El Despliegue/Entrega Continua (CD) envía el código validado a entornos de staging o producción.
- La automatización reduce el error humano y aplica controles de calidad consistentes en todos los lanzamientos.
Detalles
En los flujos de trabajo tradicionales, desplegar software era un proceso manual y propenso a errores. Los desarrolladores escribían código, lo probaban localmente y luego lo lanzaban manualmente, lo que a menudo provocaba inconsistencias y fallos en producción.
Los pipelines de CI/CD resuelven esto automatizando todo el flujo. En la Integración Continua (CI), los desarrolladores fusionan con frecuencia su código en un repositorio compartido. Cada cambio activa sistemas automatizados que compilan la aplicación y ejecutan pruebas para detectar errores temprano.
Una vez que el código supera todas las comprobaciones, entra en acción el Despliegue o la Entrega Continua (CD). El sistema despliega automáticamente el código validado a entornos de staging o producción, según la configuración.
Este pipeline garantiza que cada cambio de código pase por el mismo proceso estricto. Mejora la velocidad de lanzamiento sin perder calidad, permitiendo que los equipos publiquen actualizaciones con confianza y frecuencia sin romper el sistema.
Despliegue basado en contenedores
Los sistemas backend modernos empaquetan las aplicaciones en contenedores, lo que les permite ejecutarse de forma consistente en distintos entornos y escalar de manera eficiente.
- Las aplicaciones se empaquetan en imágenes de Docker que incluyen todas las dependencias y los requisitos de ejecución.
- Los contenedores garantizan el mismo comportamiento en los entornos de desarrollo, pruebas y producción.
- Las aplicaciones contenerizadas se pueden replicar y distribuir fácilmente entre varios servidores.
Detalles
Uno de los mayores desafíos al desplegar aplicaciones es la inconsistencia del entorno. El código que funciona en la máquina de un desarrollador puede fallar en producción debido a diferencias en los sistemas operativos, bibliotecas o configuraciones.
Los contenedores resuelven esto empaquetando la aplicación junto con todo lo que necesita para ejecutarse, incluidas las dependencias y la configuración de ejecución. Este paquete se llama una imagen de Docker, que puede desplegarse en cualquier lugar donde exista un runtime de contenedores.
Cuando la imagen se ejecuta, se convierte en un contenedor: un entorno aislado que se comporta igual sin importar dónde se ejecute. Esto elimina por completo el problema de “funciona en mi máquina”.
Como los contenedores son ligeros y estandarizados, se pueden duplicar y distribuir fácilmente entre muchos servidores. Esto hace que escalar aplicaciones sea significativamente más sencillo y permite arquitecturas modernas de sistemas distribuidos.
Orquestación de contenedores (Kubernetes)
Cuando los sistemas ejecutan muchos contenedores en varias máquinas, plataformas de orquestación como Kubernetes gestionan dónde se ejecutan, cómo se recuperan y cómo escalan.
- Los orquestadores deciden qué máquinas (nodos) ejecutan cada contenedor.
- Los contenedores que fallan se reinician automáticamente para mantener la estabilidad del sistema.
- Los servicios pueden escalar hacia arriba o hacia abajo según el tráfico sin intervención manual.
Detalles
Ejecutar un solo contenedor es sencillo, pero los sistemas de producción reales ejecutan cientos o miles de contenedores en muchos servidores. Gestionarlos manualmente no es realista.
Kubernetes resuelve esto actuando como un sistema de control para contenedores. Tú defines el estado deseado de tu aplicación, como cuántas instancias deben ejecutarse, y Kubernetes trabaja continuamente para mantener ese estado.
Si un contenedor falla, Kubernetes lo reemplaza automáticamente. Si aumenta el tráfico, puede lanzar contenedores adicionales. Si una máquina falla, reprograma los contenedores en nodos sanos.
Esta abstracción permite a los ingenieros centrarse en definir el comportamiento del sistema en lugar de gestionar manualmente la infraestructura, haciendo que los sistemas distribuidos a gran escala sean prácticos de operar.
Proxies inversos
Los proxies inversos actúan como una puerta de enlace entre los clientes y los servicios de backend, gestionando el enrutamiento, la seguridad y el rendimiento.
- Las solicitudes entrantes se enrutan al servicio de backend correcto según las reglas.
- Las conexiones TLS/HTTPS se terminan en el proxy para descargar el trabajo de cifrado.
- El almacenamiento en caché y la compresión reducen la latencia y mejoran el rendimiento de las respuestas.
Detalles
Un proxy inverso se sitúa entre los clientes externos y los sistemas internos de backend, actuando como un punto de entrada controlado a la infraestructura de la aplicación.
En lugar de exponer directamente los servidores de la aplicación a Internet, todo el tráfico pasa primero por el proxy inverso. Luego decide a dónde enrutar cada solicitud, por ejemplo, dirigiendo las llamadas a la API a un servicio y las solicitudes de contenido estático a otro.
Una de sus funciones clave es gestionar la terminación de TLS/HTTPS. El proxy se encarga del cifrado y descifrado, permitiendo que los servidores de backend funcionen sin la sobrecarga de manejar conexiones seguras.
Los proxies inversos también pueden almacenar en caché el contenido solicitado con frecuencia y comprimir las respuestas, reduciendo la carga en los sistemas de backend y mejorando los tiempos de respuesta para los usuarios.
En la práctica, herramientas como Nginx y Envoy se usan comúnmente para implementar proxies inversos en arquitecturas modernas de backend.
Infraestructura como código
La infraestructura puede definirse y gestionarse mediante código, lo que permite una configuración del sistema automatizada y consistente.
- La infraestructura se describe en código en lugar de configurarse manualmente.
- Los entornos se pueden recrear de forma fiable usando las mismas definiciones.
- Los cambios en la infraestructura se registran y controlan por versiones igual que el código de la aplicación.
Detalles
Tradicionalmente, configurar servidores, redes y bases de datos requería una configuración manual. Este proceso era lento, propenso a errores y difícil de reproducir de forma consistente entre entornos.
Infrastructure as Code (IaC) reemplaza la configuración manual con código que define la infraestructura deseada. Esto incluye servidores, reglas de red, sistemas de almacenamiento y más. Una vez definido, las herramientas automatizadas pueden aprovisionar y configurar todo de manera consistente.
Como la infraestructura se escribe como código, puede almacenarse en sistemas de control de versiones, revisarse y actualizarse de forma segura. Esto permite a los equipos rastrear cambios, revertir errores y mantener la consistencia entre los entornos de desarrollo, staging y producción.
Herramientas como Terraform se usan comúnmente para implementar IaC, permitiendo a los ingenieros definir la infraestructura de forma declarativa y aplicar automáticamente esas configuraciones a gran escala.
Arquitectura de despliegue en producción
Los sistemas modernos combinan pipelines, contenedores, orquestación y gestión del tráfico en una arquitectura de despliegue completa.
- Los pipelines de CI/CD garantizan que el código se compile, pruebe y despliegue de forma consistente.
- Los contenedores proporcionan entornos de aplicación portables y estandarizados.
- Kubernetes y los balanceadores de carga permiten la escalabilidad y la alta disponibilidad.
Detalles
Una arquitectura de despliegue en producción no es una sola herramienta, sino una combinación de sistemas que trabajan juntos. Los cambios de código primero pasan por un pipeline de CI/CD, donde se compilan, se prueban y se empaquetan en imágenes de contenedor.
Luego, estas imágenes se despliegan en un clúster de Kubernetes, que gestiona cómo se ejecutan los contenedores en varias máquinas. Kubernetes garantiza que el sistema se mantenga estable al manejar el escalado, los fallos y la planificación.
Frente al clúster, un balanceador de carga distribuye el tráfico entrante entre las instancias disponibles, asegurando que ningún servidor se sobrecargue y que el sistema siga siendo accesible incluso si fallan algunos componentes.
Esta arquitectura en capas permite que los sistemas backend funcionen de forma fiable a escala. Cada componente cumple una función específica y, juntos, crean un sistema que puede manejar tráfico real, fallos y actualizaciones continuas sin interrupciones.
Sección de preguntas
1 / 5
Esta lección forma parte del contenido premium
Pásate al plan premium para eliminar el desenfoque y desbloquear la lectura completa.