Be Software Architecture Wise
Be Wise Apps

Read in English · Lire en français · Auf Deutsch lesen

Capítulo 10 de 12 · De intermedio a avanzado

Arquitectura nativa de la nube y de infraestructura

Dónde y cómo se ejecuta el software es hoy una decisión arquitectónica. Este capítulo trata los modelos de servicio y de despliegue en la nube y el modelo de responsabilidad compartida, los contenedores y Kubernetes, la aplicación de doce factores, la infraestructura como código y GitOps, los pipelines de CI/CD y las estrategias de despliegue, el diseño multirregión, la recuperación ante desastres y el edge computing, la ingeniería de plataformas, y FinOps y la dependencia del proveedor (lock-in). Está dirigido a desarrolladores y arquitectos que conocen las cualidades operativas del Capítulo 9 y quieren elegir, justificar y operar las plataformas de las que dependen sus sistemas, sin que nadie les venda una pila tecnológica.

Introducción en video al capítulo 10

7 min · narrado en inglés, con subtítulos
Solo escuchar (audio)
Leer la transcripción

Te damos la bienvenida al Capítulo 10: Arquitectura nativa de la nube y de infraestructura. Durante la mayor parte de la historia del software, la infraestructura llegaba después de la arquitectura: un equipo de operaciones recibía una aplicación terminada y buscaba servidores donde ejecutarla. Esa separación ha desaparecido. Hoy, la elección entre máquinas virtuales, contenedores, plataformas y funciones decide buena parte del costo. El número de zonas de disponibilidad y de regiones decide la disponibilidad. Y el pipeline de despliegue decide con qué rapidez y seguridad puede un equipo cambiar cualquier cosa.

Este capítulo es para desarrolladores y arquitectos que quieren elegir, justificar y operar las plataformas de las que dependen sus sistemas, sin que nadie les venda una pila tecnológica. Se apoya en el Capítulo 0, que presentó los servidores, las máquinas virtuales, los contenedores, los modelos de servicio en la nube, las regiones y las zonas de disponibilidad, y en el Capítulo 9, que explicó cómo hacer que los sistemas escalen, se degraden de forma elegante y sigan siendo observables. Aquí esas ideas se encuentran con las plataformas en las que hoy se ejecutan la mayoría de los sistemas. Las decisiones sobre dónde y cómo se ejecuta el software son costosas de revertir, atraviesan a todos los equipos y fijan los atributos de calidad que el Capítulo 2 te pidió especificar. Y le sigue el Capítulo 11, con cómo juzgar una arquitectura, incluida su infraestructura, y cómo cambiarla de forma segura a lo largo del tiempo.

El ejemplo recurrente es la plataforma de reparto de comida que se usa a lo largo de todo el curso: las apps de clientes y de restaurantes, un servicio de pedidos, las cartas, los pagos, el despacho de repartidores y una intensa hora punta de la cena. Las cuatro primeras secciones tratan de los fundamentos. La sección diez punto uno expone quién gestiona qué, desde la infraestructura como servicio, o IaaS, pasando por PaaS y las funciones, hasta SaaS. Según el modelo de responsabilidad compartida, tus datos, tus identidades y tu configuración son siempre responsabilidad tuya. La sección diez punto dos explica las imágenes de contenedor, el plano de control y los nodos de Kubernetes, y el bucle de reconciliación que está en su núcleo. También es honesta sobre cuándo Kubernetes es excesivo. La sección diez punto tres recorre los doce factores de la aplicación de doce factores, con las salvedades actuales, y muestra cómo auditar un servicio existente frente a ellos. La sección diez punto cuatro trata la infraestructura como código: herramientas declarativas, estado y deriva, módulos, infraestructura inmutable, GitOps, política como código y pruebas.

La idea más importante de este capítulo es el estado deseado declarado, reconciliado continuamente por la automatización. Este diagrama de la sección diez punto dos muestra cómo lo hace Kubernetes. Declaras el estado deseado. Aquí, tres réplicas de la versión dos punto cuatro del servicio de pedidos. Un controlador observa el estado real del clúster y encuentra solo dos pods en ejecución. Compara lo que ve con lo que se declaró y descubre que falta un pod. Así que actúa y solicita un pod nuevo. El bucle se repite con cada evento de cambio, y también periódicamente. Como actúa sobre la diferencia actual y no sobre una secuencia de eventos recordada, los eventos perdidos y los reinicios no causan daños duraderos. La misma idea recorre el código de infraestructura, GitOps, los pipelines de despliegue y la infraestructura inmutable. Una persona cambia una descripción, que se revisa, se versiona y es auditable, y las máquinas hacen el resto.

Las cuatro secciones siguientes tratan del cambio, la escala, las personas y el dinero. La sección diez punto cinco sigue un cambio desde el commit hasta producción a través de un pipeline de CI/CD, compara los despliegues gradual, azul-verde, canario y en sombra, y separa el despliegue del lanzamiento con feature flags. La sección diez punto seis compara las estrategias de recuperación ante desastres, explica qué le hace a la consistencia replicar datos entre regiones, y trata la arquitectura basada en células y las funciones en el borde. La sección diez punto siete trata la plataforma interna para desarrolladores como un producto, con caminos dorados y salvaguardas, y muestra cómo medir si ayuda. Y la sección diez punto ocho convierte el costo en una cualidad arquitectónica, medida por pedido, y trata la dependencia del proveedor como un compromiso al que hay que poner precio y no como un pecado que haya que evitar.

La segunda idea es que cada opción de este capítulo es un compromiso. Este diagrama de la sección diez punto seis muestra cuatro estrategias de recuperación ante desastres una al lado de otra. Cada una se juzga por dos cifras que vienen del negocio: el objetivo de tiempo de recuperación, o RTO, cuánto tiempo puedes estar caído, y el objetivo de punto de recuperación, o RPO, cuántos datos puedes perder. Con copia de seguridad y restauración, las copias se guardan en una región de recuperación en la que no se ejecuta nada. La recuperación lleva horas, y pierdes todo lo ocurrido desde la última copia de seguridad. Con un pilot light, los datos se replican pero los servidores de aplicaciones están apagados. Con un warm standby, ya se ejecuta una pequeña copia operativa que escala cuando hace falta. El tiempo de recuperación baja a decenas de minutos, y después a minutos. Con activo-activo, una segunda región completa ya está atendiendo tráfico, y ambas cifras son casi cero. Cada paso hacia la derecha compra una recuperación más rápida y menos pérdida de datos, a cambio de un costo continuo y una complejidad mayores. La elección correcta depende de la carga de trabajo y de la organización.

Al final del capítulo, podrás comparar los modelos de servicio y de despliegue en la nube, y asignar las obligaciones de una carga de trabajo según el modelo de responsabilidad compartida. Entenderás cómo mantiene Kubernetes un estado deseado declarado, y sabrás juzgar cuándo es excesivo. Podrás elegir entre los despliegues gradual, azul-verde, canario y en sombra, y usar feature flags para separar el despliegue del lanzamiento. Y podrás calcular costos unitarios, como el costo por pedido, y evaluar la dependencia del proveedor como un compromiso con precio.

Cada sección puede leerse por separado, pero el orden es deliberado. No se puede razonar sobre las estrategias de despliegue sin saber qué hace Kubernetes durante un despliegue progresivo. Si eres nuevo en las operaciones, lee primero los recuadros para principiantes y la sección del Capítulo 0 sobre servidores y la nube. No te preocupes por memorizar nombres de herramientas. Los productos cambian cada pocos años, mientras que los mecanismos perduran. Los proveedores se mencionan como ejemplos, no como recomendaciones. Al final de cada sección hay preguntas de autoevaluación. Respóndelas mentalmente antes de mirar las respuestas. Calcula unas tres horas para leer el capítulo entero. Cuando estés listo, hay una prueba opcional del capítulo de unos cuarenta y cinco minutos, con veinte preguntas de opción múltiple y dos respuestas escritas. La nota de aprobado es el ochenta por ciento.

Esa es la forma del capítulo. Empieza por la sección diez punto uno, sobre los modelos de servicio y de despliegue en la nube, y quién es responsable de qué. Nos vemos allí.

Descargar el capítulo (PDF)Leer en la app

De un vistazo

Aprenderás a

  • Comparar IaaS, CaaS, PaaS, FaaS y SaaS y los modelos de despliegue, y asignar responsabilidades para una carga de trabajo según el modelo de responsabilidad compartida.
  • Explicar cómo Kubernetes mantiene un estado deseado declarado mediante su plano de control, sus nodos y sus bucles de reconciliación, configurar requests, limits y sondas, y juzgar cuándo Kubernetes es excesivo.
  • Auditar una aplicación frente a los doce factores y los principios que van más allá de ellos, y priorizar las correcciones según el riesgo.
  • Diseñar código de infraestructura con estado remoto, bloqueo, módulos, entornos, comprobaciones de políticas, pruebas y reconciliación con GitOps.
  • Elegir una estrategia de despliegue (gradual, azul-verde, canario o sombra) y separar el despliegue del lanzamiento con feature flags.
  • Seleccionar una estrategia de recuperación ante desastres a partir del RTO, el RPO y el costo, y explicar las consecuencias de replicar datos entre regiones y de llevar trabajo al edge.
  • Explicar cómo una plataforma interna para desarrolladores con caminos dorados reduce la carga cognitiva, y cómo medir si tiene éxito.
  • Calcular costos unitarios como el costo por pedido, identificar los impulsores arquitectónicos del costo en la nube y evaluar la dependencia del proveedor (lock-in) como un compromiso con precio.

Antes de empezar

Capítulo 0, sección 0.7 (servidores y la nube) y sección 0.8 (cómo se construye el software); Capítulo 9, en especial el escalado, la ausencia de estado, los SLO y la observabilidad. El Capítulo 6, sobre sistemas distribuidos, ayuda.

Tiempo

Unas 3 horas de lectura; 45 minutos para la prueba.

Términos clave

nativo de la nube (cloud native) · modelo de responsabilidad compartida · zona de disponibilidad · imagen de contenedor · Kubernetes · bucle de reconciliación · aplicación de doce factores (twelve-factor app) · infraestructura como código · GitOps · canary release (lanzamiento canario) · RTO y RPO · camino dorado (golden path) · FinOps · dependencia del proveedor (lock-in)

Por qué la infraestructura se ha convertido en arquitectura

Durante la mayor parte de la historia del software, la infraestructura era algo que ocurría después de la arquitectura: un equipo de operaciones recibía una aplicación terminada y buscaba servidores donde ejecutarla. Esa separación ha desaparecido. En un sistema moderno, la elección entre máquinas virtuales, contenedores, plataformas y funciones decide buena parte del costo; el número de zonas de disponibilidad y de regiones decide la disponibilidad; el pipeline de despliegue decide con qué rapidez y seguridad puede un equipo cambiar cualquier cosa; y la propia infraestructura se escribe como código, se revisa en pull requests y se versiona junto con la aplicación. Las decisiones sobre dónde y cómo se ejecuta el software están hoy entre las más significativas que toma un arquitecto, exactamente en el sentido del Capítulo 1: son costosas de revertir, atraviesan a todos los equipos y fijan los atributos de calidad que el Capítulo 2 te pidió especificar.

Este capítulo se apoya en dos anteriores. El Capítulo 0 presentó los servidores, las máquinas virtuales, los contenedores, los modelos de servicio en la nube, las regiones y las zonas de disponibilidad (servidores y la nube). El Capítulo 9 explicó cómo hacer que los sistemas escalen, se degraden de forma elegante y sigan siendo observables (de estrategias de escalado en adelante). Aquí esas ideas se encuentran con las plataformas en las que hoy se ejecutan la mayoría de los sistemas. El ejemplo recurrente es la plataforma de reparto de comida que se usa a lo largo de todo el curso: las apps de clientes y de restaurantes, un servicio de pedidos, las cartas, los pagos, el despacho de repartidores y una intensa hora punta de la cena.

Cómo encajan las secciones

Las cuatro primeras secciones tratan de los fundamentos. Modelos de servicio y de despliegue en la nube expone quién gestiona qué con IaaS, contenedores como servicio, PaaS, FaaS y SaaS, el modelo de responsabilidad compartida, las razones reales de la nube privada, la híbrida y la multinube, qué entiende la CNCF por nativo de la nube, y cuándo alquilar no sale más barato que poseer. Contenedores y orquestación explica las imágenes y los estándares OCI, el plano de control y los nodos de Kubernetes, sus objetos principales y el bucle de reconciliación que está en su núcleo, con YAML real, y es honesta sobre cuándo Kubernetes es excesivo. La aplicación de doce factores recorre los doce factores con las salvedades actuales, los principios que van más allá de ellos y una auditoría de un servicio existente. Infraestructura como código trata las herramientas declarativas (Terraform, OpenTofu, CloudFormation, Bicep, Pulumi), el estado, la deriva, los módulos, la infraestructura inmutable, GitOps, la política como código y las pruebas.

Las cuatro secciones siguientes tratan del cambio, la escala, las personas y el dinero. Pipelines de CI/CD y estrategias de despliegue sigue un cambio desde el commit hasta producción, compara los despliegues gradual, azul-verde, canario y en sombra, y separa el despliegue del lanzamiento con feature flags. Multirregión, recuperación ante desastres y edge computing compara las estrategias de recuperación ante desastres por RTO, RPO y costo, explica las consecuencias para la consistencia de replicar datos entre regiones, y trata la arquitectura basada en células y las funciones en el borde. Ingeniería de plataformas trata la plataforma interna para desarrolladores como un producto con caminos dorados y salvaguardas, y muestra cómo medir si ayuda. FinOps, arquitectura de costos y dependencia del proveedor convierte el costo en una cualidad arquitectónica, medida por pedido, y trata la dependencia del proveedor como un compromiso al que hay que poner precio y no como un pecado que haya que evitar.

Cada sección puede leerse por separado, pero el orden es deliberado: no se puede razonar sobre las estrategias de despliegue sin saber qué hace Kubernetes durante un despliegue progresivo, ni sobre la ingeniería de plataformas sin el código de infraestructura y los pipelines con los que se construye la plataforma.

Una idea recorre todas las secciones

La idea más importante de este capítulo es el estado deseado declarado, reconciliado continuamente por la automatización. Kubernetes mantiene el número de copias en ejecución igual al número que declaraste. El código de infraestructura describe redes y bases de datos, y una herramienta calcula y aplica la diferencia con lo que existe. GitOps mantiene el clúster igual a lo que hay en un repositorio de Git. Un pipeline de despliegue convierte cada cambio en la misma secuencia de pasos probada y repetible. La infraestructura inmutable sustituye en lugar de reparar. En cada caso, una persona cambia una descripción, que se revisa, se versiona y es auditable, y las máquinas hacen el resto. Esto es lo que permite a un equipo pequeño operar un sistema grande de forma segura: el cambio se vuelve rutinario y la recuperación pasa a ser volver a ejecutar algo en lugar de un acto de heroísmo.

La segunda idea es que cada opción del menú de este capítulo es un compromiso, y la elección correcta depende de la carga de trabajo y de la organización. Kubernetes es excelente para muchos servicios y muchos equipos, y un despilfarro para tres servicios y dos desarrolladores. Una configuración multirregión activo-activo compra minutos de tiempo de recuperación a un múltiplo del costo. Un equipo de plataforma solo ayuda si los desarrolladores quieren lo que construye. La nube es lo más barato para una carga variable, y el hardware propio puede superarla para una carga grande y estable. La dependencia del proveedor es un costo que hay que sopesar frente al costo de la portabilidad. Por eso el capítulo te da guías de decisión, ejemplos prácticos con cifras y los argumentos de ambos lados, en lugar de una única pila recomendada.

Cómo usar este capítulo

Quienes sean nuevos en las operaciones deberían leer primero los recuadros para principiantes y la sección del Capítulo 0 sobre servidores y la nube, y no preocuparse por memorizar nombres de herramientas: los productos cambian cada pocos años, mientras que los mecanismos (reconciliación, inmutabilidad, estado y deriva, entrega progresiva, objetivos de recuperación, costos unitarios) perduran. Los ingenieros con experiencia quizá prefieran empezar por los ejemplos prácticos y las guías de decisión, y después leer las secciones con cuyos compromisos no estén de acuerdo. A lo largo del capítulo, proveedores como AWS, Microsoft Azure, Google Cloud y Cloudflare se mencionan como ejemplos, no como recomendaciones.

Le sigue el Capítulo 11, con la evaluación, la gobernanza y la modernización: cómo juzgar una arquitectura, incluida su infraestructura, y cómo cambiarla de forma segura a lo largo del tiempo.

Las 8 secciones

10.1 · Intermedio · 22 minModelos de nubeIaaS, CaaS, PaaS, FaaS y SaaS; nube pública, privada, híbrida y multinube; responsabilidad compartida, zonas y servicios gestionados; qué significa nativo de la nube y cuándo alquilar no sale más barato.Leer →10.2 · Avanzado · 25 minContenedores y KubernetesImágenes, capas, registros y los estándares OCI; por qué hace falta la orquestación; el plano de control de Kubernetes, los nodos, los objetos principales y los bucles de reconciliación; requests, limits y sondas, y cuándo Kubernetes es excesivo.Leer →10.3 · Intermedio · 20 minDoce factoresLos doce factores al completo, con lo que significa cada uno, por qué importa y dónde ha envejecido; los principios que van más allá (desechabilidad, inmutabilidad, observabilidad, seguridad); y una auditoría práctica de un servicio existente con correcciones priorizadas.Leer →10.4 · Avanzado · 24 minInfraestructura como códigoCódigo de infraestructura declarativo e imperativo; Terraform, OpenTofu, CloudFormation, Bicep y Pulumi; estado, bloqueo, deriva, módulos y entornos; infraestructura inmutable; GitOps; política como código; y cómo probarlo todo.Leer →10.5 · Intermedio · 22 minCI/CD y despliegueCómo viaja un cambio desde el commit hasta producción: etapas del pipeline, compilar una vez y desplegar muchas, desarrollo basado en trunk, despliegues graduales (rolling), azul-verde (blue-green), canario (canary) y en sombra (shadow), feature flags, migraciones y rollback.Leer →10.6 · Avanzado · 24 minMultirregión y edgeCuándo y cómo operar en varias regiones: latencia, recuperación ante desastres y residencia de datos, las cuatro estrategias de DR con su RTO, RPO y costo, los datos entre regiones, el failover, las células para limitar el radio de impacto, las CDN y las funciones en el borde (edge functions).Leer →10.7 · Intermedio · 21 minIngeniería de plataformasPor qué las organizaciones crean plataformas internas para desarrolladores, los caminos dorados (golden paths) y Backstage, gestionar la plataforma como un producto con autoservicio y guardrails, reducir la carga cognitiva, medir el éxito con DORA y SPACE, y evitar las trampas habituales.Leer →10.8 · Intermedio · 22 minFinOps y lock-inTratar el costo como una cualidad arquitectónica: las fases de FinOps, la economía unitaria, como el costo por pedido, los factores de costo habituales, los descuentos por compromiso de uso y la capacidad spot, el etiquetado, showback y chargeback, y la dependencia del proveedor (lock-in) como compromiso deliberado con una estrategia de salida.Leer →

Prueba del capítulo

Comprueba lo que has entendido del capítulo 10

Opcional: 20 preguntas de opción múltiple y 2 respuestas escritas breves, elegidas de nuevo cada vez de un banco de 72 preguntas. Nota de aprobado: 80%. Superar todas las pruebas de capítulo y después la evaluación final da derecho al Certificado de Finalización Be Wise.

Haz la prueba del capítulo 10 en la app

Lecturas recomendadas