La gestión eficiente de cargas de trabajo batch en entornos distribuidos a gran escala presenta desafíos fundamentales en la asignación de recursos, la equidad y la latencia. Históricamente, muchas organizaciones han desarrollado soluciones propietarias para estas necesidades, como el Compute Managed Batch (CMB) de Netflix. Sin embargo, la evolución del ecosistema de Kubernetes ha madurado, ofreciendo componentes especializados que abordan estos problemas de manera más estandarizada y con mayor ritmo de innovación.
El problema central es cómo orquestar millones de trabajos batch con garantías de capacidad, priorización y reparto justo de recursos, mientras se mantiene la compatibilidad con la infraestructura de cómputo existente. La decisión de Netflix de adoptar Kueue, un sistema de colas de trabajos nativo de Kubernetes, representa un patrón común en la industria: la migración de sistemas internos altamente personalizados a soluciones de código abierto que se integran mejor con plataformas de orquestación modernas, reduciendo la deuda técnica y acelerando el desarrollo de nuevas características como la preemption.
Esta transición no solo busca modernizar la pila tecnológica, sino también mejorar métricas operativas clave como la utilización de recursos y el tiempo de respuesta para cargas de trabajo críticas, al tiempo que se mantiene la transparencia para el usuario final. La integración con Kubernetes permite a Netflix aprovechar características avanzadas de programación y gestión de recursos sin reemplazar su programador de pods subyacente (kube-scheduler), lo cual es crucial para mantener la eficiencia y evitar la fragmentación del placement de trabajos.
Arquitectura del Sistema
La arquitectura original de Compute Managed Batch (CMB) de Netflix se basaba en un sistema propietario de colas y lógica de programación que interactuaba con Titus, la plataforma de contenedores de Netflix. CMB gestionaba una jerarquía de 'tenants' (inquilinos), que podían ser internos (para agrupar otros tenants) o 'leaf tenants' (para ejecutar trabajos). Cada tenant tenía una configuración de capacidad que definía recursos reservados y la posibilidad de usar capacidad compartida global. La programación se realizaba en base a prioridades y un reparto justo inicial, pero carecía de preemption, lo que significaba que los trabajos admitidos se ejecutaban hasta su finalización independientemente de los cambios en la demanda o la prioridad.
La nueva arquitectura, denominada Netflix Batch, reemplaza la lógica de colas y programación de CMB con Kueue. Kueue opera sobre primitivas de Kubernetes como v1.Pod y batch/v1.Job, y se integra con el kube-scheduler existente en cada 'cell' (clúster de Kubernetes) de Titus. La federación de Titus enruta los trabajos a las 'Kueue-enabled cells' mediante un 'Kueue router' personalizado. Los 'internal tenants' de CMB se convierten en 'Cohorts' de Kueue, y los 'leaf tenants' se transforman en una combinación de ClusterQueue y LocalQueue. La configuración de capacidad de los tenants se mapea a 'resource flavors' y 'nominal quotas' en Kueue.
Kueue introduce la preemption, permitiendo que trabajos de mayor prioridad desalojen a trabajos de menor prioridad para liberar recursos. También soporta 'all-or-nothing scheduling' y 'topology aware scheduling'. La configuración de preemption se define en el ClusterQueue (ej. reclaimWithinCohort: Any, withinClusterQueue: LowerPriority). Esta integración permite a Netflix mantener la semántica de reserva de capacidad mientras mejora la utilización de recursos al permitir que los tenants tomen prestados recursos no utilizados de otros tenants, con la capacidad de recuperarlos cuando sea necesario.
Flujo de Migración de CMB a Netflix Batch (Kueue)
- 1 CMB Tenant Tenant existente en Compute Managed Batch (CMB) con configuración de capacidad.
- 2 Enrollment UI Operador activa la migración para un tenant en la interfaz de usuario.
- 3 Conversión Sistema convierte 'Internal Tenants' a 'Cohorts' y 'Leaf Tenants' a 'ClusterQ...
- 4 Capacidad a Kueue Configuración de capacidad mapeada a 'resource flavors' y 'nominal quotas'.
- 5 Netflix Batch (Kueue) Trabajos gestionados por Kueue en Titus cells.
Flujo de Ejecución de Trabajo con Netflix Batch (Kueue)
- 1 Usuario/App Envía un trabajo batch a la API de Netflix Batch.
- 2 Titus Federation Enruta el trabajo a una Kueue-enabled cell.
- 3 Kueue Router Componente personalizado que dirige el trabajo a Kueue.
- 4 Kueue Gestiona la cola, aplica políticas de fair sharing y preemption.
- 5 kube-scheduler Programa los pods del trabajo en los nodos disponibles.
- 6 Ejecución del Trabajo El trabajo se ejecuta en la infraestructura de Titus.
| Capa | Tecnología | Justificación |
|---|---|---|
| orchestration | Kubernetes | Plataforma de orquestación de contenedores subyacente para Titus y Kueue. |
| orchestration | Kueue | Sistema de colas de trabajos y gestión de cuotas nativo de Kubernetes, reemplazando la lógica de scheduling de CMB. vs YuniKorn, Volcano Altos QPS, Burst, y groupKindConcurrency para satisfacer las necesidades de throughput de Netflix. |
| compute | Titus | Plataforma de contenedores de Netflix, que ejecuta las cargas de trabajo batch y se integra con Kueue. Federación de cargas de trabajo a través de múltiples células (clústeres de Kubernetes) y reservas de capacidad federadas. |
Trade-offs
Ganancias
- ▲ Utilización de recursos
- ▲ Tiempo de respuesta para cargas críticas
- ▲ Capacidad de burst para tenants
- ▲ Reducción de deuda técnica
Costes
apiVersion: kueue.x-k8s.io/v1beta2
kind: ClusterQueue
metadata:
name: "team-a-cq"
spec:
preemption:
reclaimWithinCohort: Any
withinClusterQueue: LowerPriorityFundamentos Teóricos
El problema de la asignación de recursos y la programación justa en sistemas distribuidos ha sido un tema central en la investigación de sistemas operativos y bases de datos desde sus inicios. Conceptos como la 'fair sharing' (reparto justo) se remontan a algoritmos de programación de CPU como el 'Weighted Fair Queuing' (WFQ) propuesto por Demers, Keshav y Shenker en 1989, que busca garantizar una porción justa de recursos a diferentes flujos o usuarios. La evolución de estos principios a entornos distribuidos a gran escala es lo que Kueue y sistemas similares buscan implementar.
La preemption, una característica clave que Kueue aporta a Netflix, es un concepto fundamental en la programación de sistemas operativos, donde un proceso de mayor prioridad puede interrumpir la ejecución de uno de menor prioridad para tomar el control de la CPU. En el contexto distribuido, esto se extiende a la gestión de recursos de cómputo, donde la preemption permite una asignación más dinámica y eficiente, mejorando la latencia para trabajos críticos y la utilización general del clúster. La implementación de la preemption en sistemas distribuidos introduce complejidades adicionales relacionadas con la consistencia del estado y la recuperación de fallos, problemas que han sido ampliamente estudiados en papers sobre sistemas de colas y schedulers distribuidos.