Estrategias de Despliegue y Gestión de Tráfico de APIs
Blue-Green, Canary, Rolling, Failover, Progressive Delivery y los controles de tráfico que hacen seguros los releases de APIs
Guía práctica de releases sin downtime, desplazamiento controlado de tráfico y gateways resilientes
Por João Ricardo Dutra••Material íntegro
Resumen
Se espera que las modernas evolucionen continuamente sin quedar indisponibles. Esa expectativa parece simple, pero cambia toda la arquitectura de la entrega de software. Un ya no es meramente el acto de sustituir un binario por otro; es un movimiento controlado de tráfico, riesgo, configuración, estado y exposición de usuarios. Este artículo explica las principales estrategias de de y los patrones de usados para hacer ese movimiento más seguro: ,, Rolling, ,,, división ponderada de tráfico, feature ,, arquitecturas y ,, y mecanismos relacionados. El objetivo es ofrecer a arquitectos, ingenieros de , profesionales de DevOps, SREs y equipos de plataforma un modelo mental neutral respecto a proveedores pero lo bastante concreto para aplicarse a , balanceadores de carga, recursos de ingress y de Kubernetes, service meshes, plataformas de gestión de en la nube y inversos tradicionales.
Contenido
34.1 Introducción: de las ventanas de mantenimiento a la entrega controlada de software
34.2 La base conceptual: ,, enrutamiento y
34.3 Estrategias centrales de
34.4 Patrones de usados por
34.5 Mecanismos de fiabilidad que hacen los deployments más seguros
34.6 Cómo se relacionan los patrones entre sí
34.7 Elegir la estrategia correcta
34.8 Ejemplo práctico: un rollout controlado de
34.9 Errores comunes y trampas arquitectónicas
34.10 Conclusión
Glosario y Referencias
34.1 Introducción: de las ventanas de mantenimiento a la entrega controlada de software
Durante buena parte de la historia del software, el se trataba como un evento. Un equipo preparaba un , anunciaba una ventana de mantenimiento, detenía un sistema, copiaba archivos nuevos o instalaba un paquete nuevo, reiniciaba servicios y esperaba que producción se comportara como el entorno de pruebas. Ese modelo era tolerable cuando los releases eran poco frecuentes y las aplicaciones estaban relativamente aisladas. Se volvió cada vez más costoso a medida que la web, las aplicaciones móviles, la banca en línea, el comercio electrónico, los servicios en la nube y los ecosistemas orientados a hicieron el software continuamente disponible y profundamente interconectado.
El auge de la Integración Continua y la Entrega Continua cambió la pregunta. En lugar de preguntar "¿Cómo hacemos seguro un grande cada pocos meses?", los equipos de ingeniería empezaron a preguntar "¿Cómo hacemos que los releases pequeños sean rutinarios, observables, reversibles y de bajo riesgo?". Las estrategias de tratadas en este artículo surgieron de ese cambio. El formalizó la idea de mantener dos entornos capaces de operar en producción y conmutar el tráfico entre ellos. Martin Fowler documentó el patrón en 2010 al discutir la entrega automatizada y las prácticas emergentes que pronto se asociarían al movimiento de Continuous Delivery [1]. Los releases se convirtieron después en un método ampliamente usado para exponer solo a una pequeña población a una versión nueva antes de la promoción amplia [2].
La metáfora detrás de "" es anterior al software. Históricamente los mineros usaban canarios como mecanismo de alerta temprana ante gases peligrosos: el ave quedaba expuesta antes que la población humana mayor. El software tomó prestado el mismo principio de gestión de riesgo. En lugar de exponer a todos los clientes a un nuevo de una sola vez, un pequeño porcentaje se convierte en la primera cohorte. Si la telemetría muestra errores, latencia o regresiones de negocio, el rollout puede detenerse antes de que el crezca.
A medida que la infraestructura en la nube, los contenedores, Kubernetes, los service meshes, las feature y los sofisticados maduraron, el se volvió aún más programable. En 2018, el analista de RedMonk James Governor introdujo el término "" tras observar las prácticas de experimentación progresiva de Microsoft. El término amplió la discusión más allá de la automatización del : el software podía desplegarse primero, liberarse después, exponerse gradualmente y gobernarse mediante telemetría, cohortes de usuarios, experimentación y controles automatizados de seguridad [8].
Esta evolución importa más allá de la conveniencia de ingeniería. Un fiable reduce las caídas en sistemas de los que la sociedad depende cada vez más: pagos, servicios gubernamentales, transporte, comunicación, plataformas sanitarias, educación, logística y comercio. Cuando un puede desplazar el 5% del tráfico a una implementación nueva, observar el resultado y revertir el cambio en segundos, el se convierte en una forma de gestión de riesgo operativo. La tecnología es invisible para la mayoría de los usuarios, pero su valor social se hace visible siempre que un servicio crítico permanece disponible durante el cambio.
Para el lector, estos patrones proporcionan un vocabulario para razonar sobre uno de los problemas más difíciles de la ingeniería de producción: cómo cambiar un sistema mientras se está usando. Al final del artículo, y ya no parecerán buzzwords aisladas de DevOps. Encajarán en un modelo más amplio que conecta , enrutamiento de ,,,,, feature , compatibilidad de versiones y .
34.2 La base conceptual: ,, enrutamiento y
Antes de comparar estrategias, conviene separar cuatro conceptos que suelen mezclarse.
: colocar una versión de software o configuración en un entorno donde pueda ejecutarse.
: poner una capacidad a disposición de usuarios o consumidores. Una funcionalidad puede estar desplegada pero aún no liberada.
: controlar qué solicitudes llegan a qué versiones, regiones, o clústeres.
: mantener el servicio disponible cuando componentes, regiones, redes o releases nuevos fallan.
Estas distinciones explican por qué un es tan importante. El se sitúa en la ruta de la solicitud y puede actuar como punto de control programable entre consumidores y . Según la plataforma, puede enrutar por porcentaje, , identidad, path, host, región, versión de , subscription o salud. En otras palabras, el puede convertir una estrategia de en una política de tráfico.
Figura 1 - Separar de es lo que permite controlar la exposición de forma independiente del cambio de infraestructura.
34.2.1 El vocabulario del riesgo: ,, y
: el alcance de usuarios, solicitudes, servicios o regiones afectados si un cambio falla.
: devolver el tráfico o el software a una versión anterior reconocidamente buena.
: corregir la versión nueva y desplegar un corregido en lugar de volver al antiguo.
: un periodo deliberado de observación tras un paso del rollout, que permite que aparezcan métricas y fallos tardíos.
: una sonda o señal usada para determinar si una instancia o debe recibir tráfico.
: si un proceso está listo para servir tráfico de producción, lo que no siempre equivale a simplemente estar vivo.
: un Service Level Objective, como un objetivo de latencia o disponibilidad usado para juzgar si el sigue siendo aceptable.
: la cantidad de falta de fiabilidad tolerada antes de violar un ; suele usarse para equilibrar velocidad de entrega y fiabilidad.
: la capacidad de inferir el comportamiento del sistema a partir de señales como métricas, , trazas, eventos e indicadores de negocio.
34.2.2 El tráfico es fácil; el estado lo complica todo
Los diagramas de suelen mostrar una solicitud pasando limpiamente de la versión v1 a la v2. Los sistemas reales llevan estado. Las sesiones pueden ser sticky. Los pueden cachear respuestas. Los pueden referenciar que cambiaron. Las bases de datos pueden migrar esquemas. Los mensajes asíncronos pueden permanecer en colas. Las conexiones de larga duración como pueden seguir adheridas a un nodo de antiguo. La estrategia de debe, por tanto, ser compatible con el modelo de estado de la aplicación.
Por eso la compatibilidad retroactiva es un prerrequisito oculto para una segura. Durante un rolling o , dos versiones coexisten con frecuencia. Si la v2 escribe una representación de base de datos que la v1 no puede leer, un del 5% aún puede corromper la experiencia del 95% del tráfico que permanece en v1. Técnicas como migraciones de base de datos expand-and-contract, tolerant readers, eventos versionados y cambios aditivos de reducen ese riesgo.
34.3 Estrategias centrales de
Tabla 1 - Las seis estrategias centrales de , su idea central y el trade-off que cada una acepta.
Estrategia
Idea principal
Fortaleza principal
Principal trade-off
Dos entornos capaces de operar en producción; el tráfico se conmuta del entorno actual al nuevo.
Cutover y rápidos
Infraestructura extra y sincronización de estado
Un pequeño porcentaje o cohorte recibe primero la versión nueva; la exposición crece progresivamente.
pequeño
Requiere telemetría fuerte y control de enrutamiento
Las instancias o nodos se reemplazan gradualmente.
Uso eficiente de la infraestructura
Las versiones antigua y nueva coexisten
/ Big Bang
La versión antigua se detiene y la nueva arranca después.
Simplicidad operativa
Downtime y amplio
Anillos sucesivos de usuarios o entornos reciben el cambio por etapas.
Exposición organizativa controlada
Diseño de cohortes y coordinación
Un modelo más amplio que combina exposición gradual, control de funcionalidades, telemetría y automatización.
Control de riesgo granular
Más madurez de plataforma y proceso
34.3.1
El mantiene dos entornos capaces de operar en producción, tan equivalentes como sea práctico. El entorno "blue" representa la versión que sirve el tráfico de producción en ese momento; el entorno "green" contiene la siguiente versión. El equipo despliega y valida el nuevo en green y luego cambia una capa de enrutamiento - comúnmente un balanceador de carga, control de , ingress, service mesh o - para que el tráfico de producción pase a green. La descripción de Fowler enfatiza el problema del cutover: tener dos entornos convierte una actualización in-place arriesgada en una decisión de enrutamiento [1].
Para , el patrón resulta especialmente atractivo cuando hay que actualizar el propio clúster de . Se puede construir una flota nueva de con las mismas definiciones de , políticas, certificados, trust stores, integraciones de identidad, plugins y rutas de red. Tras pruebas sintéticas y validación similar a producción, el balanceador de carga externo envía tráfico a la flota green. Si el clúster nuevo se comporta de forma incorrecta, la organización puede redirigir el tráfico a blue mientras el entorno original sigue intacto.
Antes del cutover
Clientes -> Load Balancer -> Clúster de Gateway BLUE -> Backends de API
Clúster de Gateway GREEN (validado, sin tráfico de producción)
Después del cutover
Clientes -> Load Balancer -> Clúster de Gateway GREEN -> Backends de API
Clúster de Gateway BLUE (mantenido temporalmente para rollback)
Figura 2 - Dos entornos capaces de operar en producción convierten una actualización in-place arriesgada en una decisión de enrutamiento reversible.
Mejor uso: upgrades de de alto riesgo, sustitución de infraestructura, migraciones de configuración y cambios en los que el inmediato resulta valioso.
Atención a: compatibilidad de base de datos, afinidad de sesión, cachés, diferencias de certificados, drift de entorno y el coste de mantener capacidad duplicada temporalmente.
34.3.2
Un expone un nuevo a una porción deliberadamente limitada de tráfico real de producción. La cohorte inicial puede ser 1%, 5%, 10%, un grupo interno de usuarios, una región, un tenant o un grupo de consumidores de . Si las métricas técnicas y de negocio se mantienen sanas, la porción aumenta. Fowler describió el patrón como poner la versión nueva en parte de la infraestructura y enrutar un subconjunto de usuarios hacia ella antes del amplio [2]. Los de nube modernos suelen hacer la idea explícita: Amazon , por ejemplo, admite ajustes de que desvían un porcentaje configurable del tráfico del stage a un [6].
El poder del no es el porcentaje en sí. Es el ciclo de retroalimentación. Un útil compara tasa de error, latencia p95/p99, , saturación, fallos de autorización, errores de dependencias y resultados de negocio entre baseline y candidato. Las plataformas maduras pueden automatizar esa comparación y detener o revertir el rollout cuando se superan los umbrales.
Figura 3 - El valor de un es el ciclo de retroalimentación, no el porcentaje: baseline y candidato deben medirse por separado.
Mejor uso: cambios cuyo comportamiento puede evaluarse con seguridad en una pequeña cohorte de producción y donde el tráfico real aporta evidencia valiosa.
Atención a: de bajo volumen que no generan datos suficientes, operaciones no idempotentes, contaminación de cohortes, acoplamiento oculto de estado y métricas que agregan la versión antigua y la nueva.
34.3.3 Rolling
Un actualiza instancias de forma incremental en lugar de crear un entorno paralelo completo. Si un clúster tiene seis nodos, uno o dos pueden retirarse de servicio, actualizarse, verificarse por y devolverse antes de sustituir los siguientes. Kubernetes usa este modelo para Deployments, sustituyendo gradualmente Pods antiguos por nuevos mientras mantiene la aplicación disponible [4].
Los rolling updates son eficientes en infraestructura y suelen ser la estrategia por defecto de las plataformas de contenedores. El trade-off es la coexistencia: durante el rollout, v1 y v2 sirven tráfico al mismo tiempo. Eso exige compatibilidad de protocolo, evolución segura de la base de datos, comportamiento cuidadoso de caché y manejo predecible de sesiones. Un también puede ser más lento que en porque la flota debe revertirse nodo a nodo.
Figura 4 - Los rolling updates cambian infraestructura duplicada por una ventana de coexistencia en la que ambas versiones deben seguir siendo compatibles.
Mejor uso: servicios , escalados horizontalmente y releases rutinarios donde los entornos duplicados serían innecesariamente costosos.
Atención a: comportamiento con versiones mezcladas, conexiones de larga duración, skew de configuración, elecciones de maxUnavailable/maxSurge y si los checks representan realmente la preparación para producción.
34.3.4 / Big Bang
es conceptualmente la estrategia más simple: detener la versión antigua, sustituirla y luego arrancar la nueva. Las ventanas de mantenimiento tradicionales son esencialmente deployments . El modelo sigue siendo apropiado para algunos sistemas internos, entornos de desarrollo, cargas batch o aplicaciones donde ejecutar dos versiones es técnicamente imposible.
Su debilidad es el tamaño del compromiso. Como no hay solapamiento, la disponibilidad se sacrifica durante la transición. Como cada usuario ve la versión nueva de inmediato, el es máximo. Para una pública o una pasarela de pagos, eso rara vez es deseable salvo que una ventana de mantenimiento sea aceptable y esté explícitamente prevista en el contrato del servicio.
34.3.5
El organiza la exposición del en grupos sucesivos en lugar de solo porcentajes. Una secuencia común puede ser: usuarios de ingeniería, empleados internos, socios seleccionados, un segmento de clientes de bajo riesgo, una región, varias regiones y finalmente la población global. El concepto está fuertemente asociado a servicios de software a gran escala porque las cohortes de usuarios ofrecen una frontera de seguridad más rica que el tráfico aleatorio por sí solo.
Para , los anillos pueden mapearse a , IDs de , tenants, subscriptions, regiones, productos o grupos contractuales de socios. Un puede reconocer al consumidor y enrutarlo a un candidato. Esto hace valioso el cuando "quién" recibe el importa más que "qué porcentaje" lo recibe.
34.3.6
es el concepto paraguas que conecta varias prácticas de este artículo. Extiende la Entrega Continua controlando no solo si el software puede desplegarse, sino cómo se expande la exposición tras el . El enfoque ganó nombre en 2018 cuando James Governor describió "" a partir del modelo de experimentación progresiva de Microsoft [8]. En la práctica moderna suele combinar rollout por etapas, feature ,, experimentación, análisis automatizado y claridad sobre quién decide el .
Una de sus ideas más importantes es la separación entre y . El código puede llegar a la infraestructura de producción mientras una funcionalidad permanece deshabilitada. Una puede entonces exponerla a empleados, luego al 1% de los clientes, luego al 10%, luego al 50% y finalmente a todos. Esto reduce la presión organizativa por convertir cada en producción en un "momento de lanzamiento" irreversible.
34.4 Patrones de usados por
Las estrategias de describen cómo se introducen las versiones. Los patrones de describen cómo se dirigen las solicitudes mientras esas versiones coexisten. En la arquitectura de , las dos capas son inseparables.
34.4.1 División ponderada de tráfico
El envía una porción definida de solicitudes a cada . Un puede enrutar el 95% a v1 y el 5% a v2, luego cambiar los pesos a 80/20, 50/50 y finalmente 0/100. La de Kubernetes documenta exactamente ese estilo de división gradual entre dos versiones de servicio [5]. Los pools de también admiten atributos de peso y prioridad para distribuir solicitudes entre [7].
El enrutamiento por porcentaje no siempre es la opción más segura. Los pueden enrutar de forma determinista usando de la solicitud. Un grupo interno de pruebas puede enviar X--Ring: beta. Una aplicación socia puede identificarse por el client_id de . Una plataforma multi-tenant puede exponer v2 solo a tenants seleccionados. Esto crea cohortes estables, lo que facilita la depuración porque el mismo consumidor alcanza consistentemente el mismo .
Las señales típicas de enrutamiento incluyen:
y
de e identificadores de cliente
, productos o subscriptions
hostnames y paths de
geografía o región
dispositivo o versión de la aplicación
red de origen o identidad interna
34.4.3
Las pueden usar la misma maquinaria de enrutamiento que el , pero el objetivo es distinto. El pregunta principalmente si un es seguro. Las preguntan qué variante produce un mejor resultado. Un puede enrutar cohortes comparables hacia dos algoritmos de recomendación, flujos de checkout, servicios de precios o formatos de respuesta mientras la analítica compara conversión, engagement, latencia u otra métrica de negocio. Como la experimentación de negocio y la de fiabilidad pueden parecerse en la infraestructura, los equipos deben ser explícitos sobre el propósito de la división.
34.4.4 / espejado de tráfico
El duplica solicitudes de producción hacia un sistema candidato mientras la respuesta devuelta al usuario sigue viniendo de la versión establecida. Esto es potente para validar un , runtime, motor de búsqueda, modelo de fraude o implementación de nuevos frente a tráfico realista sin dejar que el candidato afecte las respuestas visibles para el usuario.
Cliente -> API Gateway -> backend v1 -> respuesta devuelta al cliente
\--> copia de la solicitud -> backend shadow v2 -> respuesta ignorada/comparada
Figura 5 - El espejado valida un candidato frente a tráfico real, pero las rutas de escritura duplicadas deben aislarse o neutralizarse.
El espejado exige cuidado con los efectos secundarios. Una solicitud /payments duplicada no debe crear un segundo pago real. Los entornos shadow suelen necesitar transformación de solicitudes, dependencias aisladas, rutas de escritura deshabilitadas, cuentas sintéticas o controles de idempotencia.
34.4.5 y feature
Un coloca código o infraestructura en producción antes de que la capacidad sea ampliamente visible. Las feature son un mecanismo de control común. El código puede estar ya desplegado, pero la funcionalidad permanece deshabilitada o habilitada solo para una cohorte aprobada. En plataformas de , las pueden existir dentro de la aplicación, en la capa de policies del o en un servicio dedicado de gestión de funcionalidades.
Esta separación entre "desplegar" y "liberar" es una de las mejoras de seguridad más fuertes de la entrega moderna. Permite que los equipos de plataforma validen la infraestructura por separado de los equipos de producto que deciden cuándo los usuarios deben ver una funcionalidad.
34.4.6 El versionado de como herramienta de
El versionado suele tratarse como tema de diseño de , pero también es un mecanismo de enrutamiento de releases. Un puede mantener /v1/orders mapeado al existente mientras /v2/orders enruta a una implementación nueva. La selección de versión también puede ocurrir mediante media types, , hostnames o configuración del consumidor. Esto permite que la migración avance en un calendario consumidor a consumidor en lugar de obligar a todos los clientes a actualizar simultáneamente.
34.5 Mecanismos de fiabilidad que hacen los deployments más seguros
34.5.1 , y eliminación automática
Una estrategia de es tan fiable como sus señales de salud. Un proceso puede estar "vivo" y aun así ser incapaz de servir tráfico útil. Los checks deben, por tanto, validar las dependencias que determinan si la instancia puede recibir solicitudes con seguridad. y balanceadores de carga usan esas señales para evitar enrutar tráfico a nodos que están arrancando, drenando, no sanos o desconectados de dependencias críticas.
34.5.2 y apagado ordenado
Cuando un nodo de se retira durante un , normalmente debe dejar de aceptar tráfico nuevo antes de ser terminado. Las sesiones existentes, las solicitudes de , los o las transacciones en curso necesitan tiempo para completarse. Ese periodo se denomina comúnmente , deregistration delay o graceful shutdown. Sin él, un rollout técnicamente "sin downtime" aún puede generar resets de conexión evitables.
34.5.3 Circuit breakers, y pools
El enrutamiento de tráfico y el manejo de fallos se encuentran en el pool. Si un nuevo empieza a fallar, un puede necesitar dejar de enrutar hacia él, reintentar en otra instancia o abrir un para evitar llamadas repetidas a una dependencia no sana. Las plataformas de gestión de en la nube exponen cada vez más estos controles como policies explícitas de ., por ejemplo, documenta pools y configuración de como parte de la gestión de [7].
Los deben diseñarse con cuidado. Reintentar un idempotente suele ser más seguro que repetir un de creación de pago. El necesita una estrategia de idempotencia, presupuesto de reintentos, jerarquía de y conciencia de si la operación puede repetirse con seguridad.
34.5.4 y
Estos patrones describen topología de disponibilidad más que estrategia de , pero están estrechamente relacionados con la . En la arquitectura , múltiples regiones o clústeres de sirven tráfico de producción simultáneamente. En la arquitectura , un entorno secundario permanece listo pero recibe poco o ningún tráfico normal. La segunda reduce la complejidad simultánea; la primera puede mejorar el uso de capacidad y la regional, pero exige mayor consistencia y un diseño de enrutamiento más fuerte.
Figura 6 - La topología de disponibilidad decide lo que el puede realmente hacer: un standby que nunca sirve tráfico rara vez está comprobado.
34.5.5
El es la redirección controlada de tráfico tras un fallo. Puede ocurrir entre nodos, zonas de disponibilidad, regiones, centros de datos o versiones de . Los mecanismos incluyen balanceadores de carga globales, de ,, ingress controllers y service meshes. Un plan de debe especificar tiempo de detección, autoridad de decisión, desplazamiento de tráfico, recuperación de estado y cómo la organización hará el fail back tras el incidente.
34.5.6 frente a
El resulta atractivo porque parece restaurar un estado conocido. Sin embargo, las escrituras en base de datos, los cambios de esquema, los mensajes y los efectos secundarios externos pueden hacer imposible una reversión verdadera. El - desplegar una versión corregida - puede ser más seguro cuando los datos de producción ya evolucionaron. Los de entrega maduros definen por ello ambos caminos por adelantado en lugar de suponer que el siempre es trivial.
34.6 Cómo se relacionan los patrones entre sí
Muchas discusiones sobre estrategias de nacen de tratar los patrones como mutuamente excluyentes. En la práctica, las organizaciones los combinan. Un entorno puede usar desplazamiento de tráfico antes del cambio final. Un puede gobernarse mediante . Un puede usar feature . Las regiones pueden ejecutar cada una su propio de forma independiente. La pregunta útil no es "¿Qué patrón único estamos usando?", sino "¿Qué mecanismos controlan la sustitución de infraestructura, la exposición de usuarios, el enrutamiento de tráfico y la recuperación de fallos?".
Tabla 2 - Los patrones no son rivales; cada uno responde a una pregunta distinta sobre el cambio controlado.
Pregunta que se resuelve
Patrones relevantes
Sustitución de infraestructura
, Rolling,
Control de exposición
,, Feature ,
Direccionamiento de solicitudes
, enrutamiento por , enrutamiento por identidad, versionado de
Validación
,, análisis automatizado de ,
Contención de fallos
,,,
Topología de disponibilidad
,
Modelo operativo
Continuous Delivery,
34.7 Elegir la estrategia correcta
No existe un patrón de universalmente mejor. La elección correcta se deriva del riesgo, la reversibilidad, el estado, el coste, el volumen de tráfico y la capacidad de la organización para observar el resultado.
¿Cuán costoso es el downtime?: Si el downtime es inaceptable, se vuelve menos atractivo y las estrategias sin downtime cobran importancia.
¿Con qué rapidez debe ocurrir el ?: puede ofrecer una reversión de tráfico muy rápida cuando el entorno antiguo permanece intacto.
¿Pueden dos versiones coexistir con seguridad?: y Rolling exigen compatibilidad entre versiones, datos compartidos y dependencias.
¿Hay tráfico suficiente para tener confianza estadística?: Una de bajo volumen puede no revelar regresiones rápidamente durante un del 1%.
¿Puede segmentarse el tráfico de forma determinista?: Si los consumidores pueden identificarse por tenant, o de , un rollout basado en anillos puede ser más seguro que porcentajes aleatorios.
¿Es asumible la infraestructura duplicada?: puede duplicar temporalmente la capacidad de cómputo o de .
¿Cuán madura es la ?: Las estrategias progresivas sin telemetría fiable pueden crear falsa confianza.
¿Son idempotentes las operaciones?: Los reintentos, el espejado y el pueden ser peligrosos para operaciones de escritura sin controles de idempotencia.
¿Cuál es el modelo de migración de la base de datos?: La compatibilidad de esquema suele determinar si el es realmente posible.
34.7.1 Una guía práctica de decisión
Tabla 3 - Un punto de partida, no una regla: el escenario determina qué mecanismo carga con el riesgo.
Escenario
Punto de partida probable
Upgrade de plataforma de con requisito estricto de
frecuente de microservicio
Cambio de comportamiento de de alto riesgo con telemetría fuerte
+
a empleados, luego socios, luego clientes
nuevo que debe probarse con tráfico real pero no puede afectar a los usuarios
Recuperación ante desastres multirregión
o +
Servicio interno pequeño donde el mantenimiento es aceptable
puede bastar
34.8 Ejemplo práctico: un rollout controlado de
Considere una de pagos expuesta a través de un . La versión v1 es estable. La versión v2 introduce una nueva integración de fraud scoring y una ruta de autorización refactorizada. El equipo no quiere exponer todas las transacciones a v2 de inmediato.
Paso 1 - Desplegar sin exposición amplia
Despliegue payments-v2 junto a payments-v1. Mantenga v1 como por defecto. Valide el arranque, los certificados, la validación /, la conectividad , los esquemas y las transacciones sintéticas.
Paso 2 - Crear un pequeño
Enrute el 5% del tráfico elegible a v2. Mantenga los clientes de alto riesgo o no compatibles fijados en v1 si es necesario.
Paso 3 - Observar señales técnicas y de negocio
Compare 5xx, fallos de autenticación, tasa de , latencia p95, fallos de dependencias, latencia del servicio de fraude, tasa de aprobación de pagos y conciliación de transacciones.
Paso 4 - Bake
Mantenga el del 5% el tiempo suficiente para observar trabajos periódicos, efectos de caché, dependencias externas y fallos tardíos.
Paso 5 - Promover gradualmente
Pase al 20%, 50% y 100% si el candidato se mantiene dentro de los umbrales acordados.
Paso 6 - Detener o revertir ante una regresión
Si la tasa de error o los resultados de negocio se degradan, ponga el peso de v2 en 0 e investigue. La clave es que la política de enrutamiento contiene el .
Figura 7 - La promoción es un cambio de política, no un nuevo : cada paso es una decisión informada por la telemetría.
34.8.1 Ejemplo con de la de Kubernetes
El siguiente ejemplo simplificado demuestra la idea usando un HTTPRoute con dos referencias de . La admite división ponderada de tráfico entre versiones de servicio [5].
La promoción se convierte en un cambio de política en lugar de un nuevo . Los pesos pueden pasar de 95/5 a 80/20, luego 50/50 y finalmente 0/100. Un patrón equivalente puede implementarse en muchos , service meshes, ingress controllers y productos de balanceo de carga en la nube, aunque la sintaxis y las capacidades varíen.
34.8.2 Lo que enseña el ejemplo
La lección más importante es que y exposición son decisiones separadas. La versión v2 puede existir en la infraestructura de producción antes de recibir tráfico significativo. El se convierte en una válvula de . La determina si la válvula se abre más. Esa es la esencia de la aplicada a .
34.9 Errores comunes y trampas arquitectónicas
Llamar "" a cualquier montaje de dos servidores: trata de dos entornos capaces de operar en producción y de un cutover controlado, no simplemente de tener redundancia.
Usar sin métricas por versión: Si la telemetría mezcla v1 y v2, el puede fallar mientras los agregados siguen pareciendo sanos.
Suponer que salud significa preparación: Un proceso que devuelve 200 en /health aún puede ser incapaz de alcanzar proveedores de identidad, bases de datos o críticos.
Ignorar la compatibilidad de la base de datos: La base de datos suele dificultar el . Trate la migración de esquema como parte del diseño del .
Espejar escrituras inseguras: El puede duplicar efectos secundarios salvo que el candidato esté aislado o las solicitudes se transformen.
Reintentar operaciones no idempotentes a ciegas: Una política de reintentos puede convertir un transitorio en transacciones de negocio duplicadas.
Dejar el entorno antiguo para siempre: Los entornos deben tener una política explícita de retención y retirada; de lo contrario, la "capacidad temporal de " se convierte en coste permanente y drift.
Elegir porcentajes sin tráfico suficiente: Un del 1% en una de bajo volumen puede no ejercitar los modos de fallo que importan.
Tratar la estrategia de como sustituto de las pruebas: El rollout progresivo reduce la exposición; no elimina la necesidad de pruebas funcionales, de integración, de seguridad, de rendimiento y de .
Ignorar la configuración y los certificados: Los incidentes de provienen a menudo de cambios en policies, rutas, trust stores, certificados, secretos o configuración de identidad, y no del código de la aplicación.
34.10 Conclusión
,,,, y son respuestas distintas a la misma pregunta operativa: ¿cómo puede cambiar un sistema mientras los usuarios siguen dependiendo de él? reduce el riesgo del cutover manteniendo un entorno alternativo listo. limita el inicial. cambia infraestructura duplicada por una sustitución controlada instancia a instancia. añade cohortes deliberadas de usuarios. convierte todos esos mecanismos en un modelo operativo más amplio, guiado por exposición controlada y retroalimentación.
Para las , el es a menudo donde estas ideas se vuelven reales. El puede implementar un . El enrutamiento basado en identidad puede crear anillos de . El enrutamiento por versión puede sostener migraciones largas. El espejado de tráfico puede validar un candidato. La salud del , los circuit breakers, el y el pueden impedir que los problemas de se conviertan en caídas de todo el servicio. El , por tanto, no es meramente un componente de seguridad o de protocolo; puede ser parte del control plane de entrega de software.
Las organizaciones más fuertes no eligen un patrón de moda y lo aplican en todas partes. Diseñan la seguridad del alrededor de los modos de fallo específicos de cada : estado, efectos secundarios, compatibilidad de clientes, volumen de tráfico, criticidad de negocio, y restricciones de . En ese sentido, la estrategia de es arquitectura. Determina no solo cómo llega el código a producción, sino cuánta incertidumbre puede absorber el sistema mientras cambia.
Mi visión es que la es el encuadre más útil para las plataformas de modernas porque trata el como una decisión continua en lugar de un único interruptor. ,, Rolling, feature , división de tráfico y se convierten en herramientas dentro de ese modelo. El objetivo práctico no es el "riesgo cero" - que no existe -, sino menores, detección más rápida, exposición controlada y recuperación más rápida. Esa combinación es lo que convierte el cambio frecuente de una amenaza a la disponibilidad en una capacidad rutinaria de ingeniería.
Conclusiones clave
optimiza el cutover y el .
optimiza el control del .
optimiza la eficiencia de la infraestructura.
optimiza la exposición basada en cohortes.
combina control de exposición con telemetría y automatización.
Los hacen accionables estas estrategias mediante controles de enrutamiento, salud y policies.
Glosario
Tabla 4 - Vocabulario esencial del capítulo.
Término
Definición
Topología de disponibilidad en la que múltiples regiones o clústeres de sirven tráfico de producción simultáneamente.
Topología de disponibilidad en la que un entorno secundario permanece listo pero recibe poco o ningún tráfico normal.
Periodo deliberado de observación tras un paso del rollout, que permite que aparezcan métricas y fallos tardíos.
El alcance de usuarios, solicitudes, servicios o regiones afectados si un cambio falla.
Dos entornos capaces de operar en producción en los que el tráfico se conmuta del entorno actual al nuevo.
expuesto primero a un pequeño porcentaje o cohorte, con exposición que crece progresivamente.
Control que detiene las llamadas repetidas a una dependencia no sana tras un umbral de fallos.
Periodo en el que un nodo deja de aceptar tráfico nuevo pero permite que las solicitudes en curso terminen antes del apagado.
Colocar código o infraestructura en producción antes de que la capacidad sea ampliamente visible.
Colocar una versión de software o configuración en un entorno donde pueda ejecutarse.
Enviar una porción definida de solicitudes a cada , como 95% a v1 y 5% a v2.
La cantidad de falta de fiabilidad tolerada antes de violar un .
Redirección controlada de tráfico tras un fallo, entre nodos, zonas, regiones o versiones de .
Mecanismo de control que mantiene una funcionalidad desplegada deshabilitada o habilitada solo para una cohorte aprobada.
Controlar qué solicitudes llegan a qué versiones, regiones, o clústeres.
Sonda o señal usada para determinar si una instancia o debe recibir tráfico.
Capacidad de inferir el comportamiento del sistema a partir de métricas, , trazas, eventos e indicadores de negocio.
Modelo operativo que controla cómo se expande la exposición tras el , combinando rollout por etapas, , telemetría y automatización.
División cuyo objetivo es descubrir qué variante produce un mejor resultado de negocio, y no si un es seguro.
Si un proceso está listo para servir tráfico de producción, lo que no siempre equivale a simplemente estar vivo.
Estrategia en la que la versión antigua se detiene y la nueva arranca después.
Poner una capacidad a disposición de usuarios o consumidores; una funcionalidad puede estar desplegada pero aún no liberada.
Mantener el servicio disponible cuando componentes, regiones, redes o releases nuevos fallan.
Anillos sucesivos de usuarios o entornos que reciben el cambio por etapas.
Corregir la versión nueva y desplegar un corregido en lugar de volver al antiguo.
Devolver el tráfico o el software a una versión anterior reconocidamente buena.
Estrategia en la que las instancias o nodos se reemplazan gradualmente.
Duplicar solicitudes de producción hacia un sistema candidato mientras el usuario sigue recibiendo la respuesta de la versión establecida.
Un Service Level Objective, como un objetivo de latencia o disponibilidad usado para juzgar si el sigue siendo aceptable.
Los , service meshes, ingress controllers y plataformas de entrega en la nube evolucionan continuamente. Antes de aplicar cualquier ejemplo, confirme la versión del recurso, las capacidades de su implementación y el estado actual de estabilidad de cada funcionalidad en la documentación del proveedor.