Autoescalado de Milvus en Kubernetes con EC2 y Almacenamiento Persistente con Respaldo en S3
Una plataforma de AI con datos vectoriales en rápido crecimiento (embeddings para búsqueda, recomendaciones y RAG) necesitaba que su base de datos vectorial Milvus escalara automáticamente según la carga de consultas y el volumen de datos, con un almacenamiento duradero y rentable que no se perdería si los pods se reiniciaran o los nodos fueran reemplazados.
Discuta Su Proyecto
El Desafío
Ejecutar Milvus a escala en producción presentaba varios desafíos de infraestructura:
- Capacidad Fija — Las implementaciones estáticas de Milvus no podían manejar picos de carga de consultas de 10x durante las horas pico
- Riesgo de Pérdida de Datos — Los reinicios de pods en almacenamiento efímero causaban reconstrucciones de índices que tomaban horas en colecciones grandes
- Ineficiencia de Costos — El sobreaprovisionamiento para la carga pico significaba pagar por computación inactiva el 70% del tiempo
- Costos de Almacenamiento — Los volúmenes de block storage vinculados a instancias eran caros para conjuntos de datos vectoriales de varios terabytes
- Reconstrucciones de Índices — Reindexar millones de vectores después de un reemplazo de nodo tomaba horas de inactividad
- Durabilidad Multi-AZ — El almacenamiento de un solo AZ no podía sobrevivir a fallas de availability zone
Nuestra Solución
Implementamos Milvus en Kubernetes (EKS) con Horizontal Pod Autoscaling para los nodos de consulta, Cluster Autoscaler para la computación y Amazon S3 como backend de almacenamiento persistente, eliminando el riesgo de pérdida de datos y reduciendo los costos de almacenamiento en aproximadamente un 80%.
Arquitectura
- Orquestación: Amazon EKS (Elastic Kubernetes Service)
- Computación: instancias EC2 (tipos de instancias mixtos) gestionadas por Cluster Autoscaler
- Base de Datos Vectorial: Milvus implementado mediante Helm chart en modo distribuido
- Almacenamiento de Objetos: Amazon S3 para archivos de segmentos, archivos de índices y persistencia de binlog
- Metadatos: clúster etcd para la coordinación y metadatos de Milvus
- Cola de Mensajes: Streaming de mensajes para el pipeline de logs de Milvus
- Monitoreo: Prometheus + Grafana para métricas de Milvus y señales de autoescalado
Arquitectura Distribuida de Milvus en Kubernetes
Implementación de Componentes
Milvus se ejecuta en modo distribuido con tipos de nodos dedicados, cada uno implementado como una carga de trabajo de Kubernetes con escalado independiente:
- Nodos Proxy — Gestionan las conexiones de clientes y el enrutamiento de solicitudes
- Nodos de Consulta — Ejecutan búsquedas vectoriales y cargan segmentos en memoria
- Nodos de Datos — Gestionan las rutas de escritura y vacían segmentos a S3
- Nodos de Índices — Construyen índices vectoriales y escriben en S3
- Coordinador — Coordinación del clúster y asignación de marcas de tiempo
- etcd — Almacenamiento de metadatos y descubrimiento de servicios
- Cola de Mensajes — Streaming de logs y log de escritura anticipada
Autoescalado Horizontal de Pods (HPA)
Autoescalado de Nodos de Consulta
Los nodos de consulta son el objetivo principal de escalado: cargan segmentos vectoriales en memoria y ejecutan búsquedas. El escalado se basa en múltiples métricas, incluyendo la utilización de CPU, la utilización de memoria, la profundidad de la cola de consultas y la latencia de consultas P99. El HPA se configura con réplicas mínimas/máximas apropiadas, escalado rápido para manejar picos y un escalado descendente gradual para evitar el "flapping".
Autoescalado de Nodos de Índices
Los nodos de índices escalan en función de los trabajos de construcción de índices pendientes: escalan hacia arriba cuando la cola de construcción tiene elementos pendientes y vuelven a escalar hacia abajo cuando están inactivos.
Cluster Autoscaler de EC2
Estrategia de Instancias
- Grupos de Nodos: Múltiples grupos de nodos con diferentes tipos de instancias para la optimización de costos
- Carga de Trabajo de Consulta: Instancias optimizadas para memoria para segmentos vectoriales en memoria
- Carga de Trabajo de Índices: Instancias optimizadas para computación para la construcción de índices intensiva en CPU
- Spot Instances: Los nodos de índices y los nodos de datos no críticos se ejecutan en spot instances para ahorros significativos
- Bajo Demanda: Nodos de consulta y coordinadores en instancias bajo demanda para mayor estabilidad
Comportamiento de Escalado
Cuando el HPA crea nuevos pods que no se pueden programar, el Cluster Autoscaler aprovisiona nuevas instancias EC2 en el grupo de nodos apropiado. Los nuevos nodos de consulta luego cargan sus segmentos asignados desde S3 a la memoria y comienzan a atender consultas, completándose el proceso total de escalado ascendente en minutos.
Almacenamiento Persistente con Respaldo en S3
Por qué S3 en lugar de Block Storage
S3 ofrece ventajas significativas sobre el block storage para Milvus:
- ~80% menos costo de almacenamiento para grandes conjuntos de datos
- Durabilidad de 11 nueves con replicación multi-AZ integrada
- Escalado ilimitado sin redimensionamiento manual de volúmenes
- Independiente del Pod — Datos siempre disponibles independientemente del ciclo de vida del pod o del nodo
- Sin AZ lock-in — Datos accesibles desde cualquier availability zone
Flujo de Datos con S3
- Ruta de Escritura: Los nodos de datos almacenan inserciones en memoria, luego vacían segmentos sellados a S3
- Construcción de Índices: Los nodos de índices leen segmentos de S3, construyen índices y escriben los archivos de índices de vuelta a S3
- Ruta de Consulta: Los nodos de consulta descargan segmentos e índices de S3, los cargan en memoria y atienden consultas
- Recuperación: Al reiniciar un pod, los nodos de consulta vuelven a descargar los segmentos asignados de S3 (sin pérdida de datos)
Optimización del Rendimiento de S3
- Ajuste del tamaño de segmento equilibra los costos de solicitudes de S3 vs. la frescura de los datos
- Caché local en SSD en almacenamiento de instancias NVMe evita lecturas repetidas de S3 para segmentos "calientes"
- Descargas paralelas permiten un inicio rápido de los nodos de consulta
- Políticas de ciclo de vida archivan datos antiguos en niveles de almacenamiento más económicos
Monitoreo y Observabilidad
La implementación incluye monitoreo integral a través de Prometheus y Grafana:
- Rendimiento de Consultas — Distribución de latencia, QPS, tasa de aciertos de caché
- Visión General del Clúster — Conteo de nodos, estado de pods, utilización de recursos
- Salud del Almacenamiento — Uso de S3, conteo de segmentos, tasas de vaciado
- Eventos de Autoescalado — Eventos HPA, escalado de nodos, latencia de programación de pods
- Alertas — Alertas automatizadas para alta latencia, riesgo de OOM, fallas de vaciado y límites de capacidad
Características Clave
- HPA de Nodos de Consulta — Escalado automático basado en CPU, memoria, latencia y profundidad de cola
- Cluster Autoscaler de EC2 — Aprovisionamiento dinámico de nodos con tipos de instancias mixtos
- Persistencia en S3 — Durabilidad de 11 nueves, ~80% más económico que el block storage, sobrevive a fallas de AZ
- Spot Instances — Nodos de índices y de datos en spot para ahorros significativos en computación
- Caché Local en SSD — El caché NVMe elimina las lecturas repetidas de S3 para segmentos "calientes"
- Recuperación sin Tiempo de Inactividad — Los reinicios de pods recargan segmentos de S3 sin pérdida de datos
- Multi-AZ — Almacenamiento en S3 + grupos de nodos multi-AZ para tolerancia total a fallas de AZ
- Observabilidad — Prometheus + Grafana con métricas específicas de Milvus y visibilidad de autoescalado
Resultados
Stack Tecnológico
caseStudyDetail.more Casos de Estudio
Explore más de nuestras implementaciones técnicas
Catant Plataforma de Gestión de RRHH y Fuerza Laboral
Catant es una plataforma modular de gestión de RRHH y fuerza laboral que ayuda a las empresas a gestionar empleados, nóminas, asistencia y cumplimiento desde un único panel.
Kickly: Plataforma de Proyectos Impulsada por AI para Startups
Kickly es una plataforma de gestión de proyectos impulsada por AI diseñada para startups, que combina automatización inteligente de tareas, colaboración en equipo y seguimiento del progreso en tiempo real en un solo producto.
¿Listo para Transformar su Negocio?
Hablemos sobre cómo podemos aplicar soluciones similares a sus desafíos.