Un escalado más rápido de los recursos de base de datos es esencial para mantener bases de datos eficientes y eficaces, especialmente con el aumento de la presión de la ingestión de datos, las crecientes demandas de consulta y la necesidad de gestionar las conmutaciones por error sin problemas. Dado que el tráfico de consultas impulsado por las aplicaciones se gestiona principalmente mediante servicios de índices, un escalado más rápido de los servicios de reequilibrio de índices es fundamental para conseguir aplicaciones de alto rendimiento.
Para el servicio de índices, la operación de escalado (también denominada reequilibrar) consiste en mover índices/réplicas/particiones individuales entre los nodos de servicio de índices disponibles en el clúster. El objetivo es minimizar los desequilibrios de carga y optimizar las métricas de utilización de recursos, como la CPU y la memoria, en todos los nodos.
Este artículo explora las limitaciones y mejoras hechas al proceso de rebalanceo de índices en la versión 7.6 de Couchbase-Server. Introduce un nuevo flujo de rebalanceo basado en transferencias de archivos eficientes, ofreciendo beneficios significativos como reducciones sustanciales en el tiempo de rebalanceo y utilización optimizada de recursos, incluyendo menor consumo de CPU y memoria.
Resumen del reequilibrio del servicio de índices
A alto nivel, el reequilibrio del servicio de índices funciona en 3 fases:
Planificación
-
- En el fase de planificaciónLa información de todos los índices de todos los nodos del clúster se recopila junto con sus estadísticas de carga. La carga de un índice se deriva de varios factores como la utilización de la CPU, la utilización de la memoria, la tasa de escaneado, la tasa de procesamiento de mutaciones, la utilización del disco, etc.
- Se utiliza un algoritmo de optimización para minimizar la variación de carga en el clúster. Por ejemplo, si un nodo de servicio de índices experimenta un tráfico de mutación y escaneado significativamente mayor que los demás, el algoritmo redistribuye los índices para equilibrar la carga global y reducir la varianza.
- El algoritmo de optimización decide los movimientos de índices desde sus nodos existentes a nuevos nodos en un entorno simulado para llegar a una distribución que minimice la varianza de carga en el clúster.
Fase de ejecución
-
- En función del plan final decidido en la fase de planificación, los índices se trasladan de sus nodos existentes a nuevos objetivos.
- Esta fase es la que más contribuye al tiempo de reequilibrio de los índices, directamente afectada por el método de movimiento y el número de índices implicados.
Eliminación de índices en los nodos de origen
-
- Una vez que los índices de los nuevos nodos de destino estén completamente reconstruidos y listos para gestionar consultas, todas las solicitudes de escaneo entrantes para esos índices se redirigirán a los nuevos nodos.
- Los índices de los nodos de origen existentes se eliminarán una vez que los índices correspondientes de los nuevos nodos estén listos para servir tráfico de escaneado.
En Fase de ejecuciónEn la actualidad, se basa en la reconstrucción de los índices que se trasladan mediante la retransmisión y el reprocesamiento de todos los documentos del servicio de datos. Aunque este esquema funciona bien desde el punto de vista funcional, presenta los siguientes inconvenientes:
-
- Aumento de los plazos de reajuste de los índices
- Exploraciones más lentas
- Procesamiento de mutaciones más lento
Estos inconvenientes se deben principalmente a:
Gastos generales de recursos durante el reequilibrio
-
- El servicio de datos debe retransmitir todos los documentos relevantes para el índice con el fin de reconstruir los índices. A menudo, la retransmisión de todos los datos requiere un backfilling desde el disco, lo que puede suponer una presión adicional sobre éste.
- El proceso del proyector tiene que volver a procesar todos los documentos para extraer los datos relevantes para este índice, lo que puede consumir más CPU y memoria. Estos gastos generales también pueden crear contención de recursos para el tráfico incremental de los índices existentes.
- También para el proceso de indexación, la construcción de índices añade una considerable sobrecarga de recursos en CPU, memoria y E/S de disco debido al nuevo tráfico de mutación entrante. En general, se requieren operaciones de lectura de E/S aleatorias durante ciertas etapas de la creación de índices, lo que ralentiza todo el proceso de creación de índices.
Desorganización del grupo de trabajo
-
- Los requisitos de memoria debidos a la reconstrucción de índices durante reducen la memoria disponible para los índices existentes.
- El conjunto de trabajo de los índices existentes puede ser desalojado de la memoria
- Esto hace que las exploraciones y el procesamiento de mutaciones se ralenticen si los datos relevantes no están disponibles en la memoria y deben obtenerse del disco.
Reequilibrio de las transferencias de ficheros
El reequilibrio de la transferencia de archivos es un método para reducir la sobrecarga de la reconstrucción de índices. En lugar de reconstruir los índices, el nodo de origen transfiere directamente los archivos de datos indexados al nodo de destino sin interactuar con el servicio de datos. Una vez finalizada la transferencia de datos, el servicio de índices se pondrá al día con las mutaciones que se hayan producido durante la transferencia transmitiéndolas desde el servicio de datos. Las exploraciones y mutaciones seguirán procesándose para los índices existentes independientemente del estado de la transferencia.
La transferencia de datos entre los nodos de origen y destino se realiza mediante un protocolo personalizado basado en el modelo HTTP de solicitud-respuesta. El nodo de origen contiene un cliente capaz de leer secuencialmente datos indexados del disco y publicar los datos en el nodo de destino como múltiples blobs binarios pequeños. La transferencia de datos siempre está cifrada. El nodo de destino alberga un servidor que recibe estos blobs binarios, los descifra y reconstruye los datos indexados durante el proceso de transferencia. Todos los datos recibidos por el servidor en el nodo de destino se almacenan de forma persistente en el disco.
Una vez finalizada la transferencia de datos, el nodo de destino recupera el índice del disco y retrocede hasta un punto de recuperación válido disponible dentro de los datos transferidos. A continuación, solicita al servicio de datos que transmita las mutaciones que se hayan producido desde la generación de ese punto de recuperación. Una vez procesadas todas las mutaciones necesarias, el índice se convierte en listo para escanear en el nodo de destino y posteriormente se elimina del nodo de origen.
Dado que la mayoría de los datos indexados se transfieren directamente, sin necesidad de reconstruirlos, la sobrecarga asociada a la reconstrucción de índices se elimina durante la transferencia de datos. Esto ha mejorado significativamente la velocidad de reequilibrio al tiempo que reduce el consumo asociado de CPU y memoria. Como resultado, el impacto en el conjunto de trabajo también es mínimo, lo que permite que los escaneos y el tráfico de mutación se procesen a velocidades similares a las anteriores al reequilibrio.
Los únicos gastos generales de recursos en que se incurre con las transferencias de archivos son los relacionados con la propia transferencia de datos y la recuperación de las mutaciones que puedan haberse producido durante el proceso de transferencia. La utilización de recursos durante la transferencia de datos y el proceso de recuperación puede desglosarse del siguiente modo:
-
- Ancho de banda de lectura de disco (nodo de origen) – Eficiente, gracias a las lecturas secuenciales.
- CPU y memoria (nodo de origen) – Mínimo, debido a la publicación de pequeñas manchas binarias.
- CPU y memoria (nodo de destino) – Mínimo, debido al procesamiento de pequeñas manchas binarias.
- Ancho de banda de escritura en disco (nodo de destino) – Eficiente, debido a las escrituras principalmente secuenciales.
- Ancho de banda de lectura de disco (recuperación, nodo de destino) – Mínimo, ya que sólo es necesario recuperar una parte de los datos.
Para minimizar las interrupciones en las operaciones críticas de exploración y mutación, tanto los nodos de origen como los de destino restringen el ancho de banda del disco a un valor configurable, por defecto 200 MB/seg, durante el reequilibrio. Esta tasa elegida empíricamente garantiza una eficiencia equilibrada y un impacto mínimo en el rendimiento, con un consumo de recursos observado de menos de 2 núcleos de CPU y decenas de MB de memoria por nodo.
Resultados de rendimiento con reequilibrio de transferencia de archivos
Configuración de referencia
-
- Configuración del clúster:
- Nodos de servicio de datos: 4
- Nodos índice: 3
- Datos:
- Volumen: 1.000 millones de documentos
- Tamaño medio del documento: 230 bytes
- Distribución: Compartido entre 2 colecciones en un solo cubo
- Índices:
- Tipo: Particionado
- Replicación: 1 réplica por índice
- Número de particiones: 3 por índice
- Total de instancias: 18 (3 índices * 3 particiones * 2 réplicas)
- Tamaño medio del campo de índice secundario: 140 bytes
- Uso total del disco: ~710 GB (en todas las instancias)
- Recursos del Servicio de Índices:
- Cuota de memoria: 128 GB por nodo
- Núcleos de CPU: 80 por nodo
- Configuración del clúster:
Comparación
Este benchmark de rendimiento compara dos métodos de rebalanceo para tiempos de rebalanceo, CPU y utilización de memoria para el caso de rebalanceo swap:
-
- Reequilibrio de la Reconstrucción del Índice (Reequilibrio DCP) – Reconstruye los índices desde cero durante el reequilibrio.
- Reequilibrio en la transferencia de archivos – Transfiere directamente los archivos de datos de índice existentes entre nodos.
Reequilibrio-intercambio
-
- Comenzamos con 2 nodos de índice en el clúster, cada uno de los cuales contiene alrededor de 355 GB de datos indexados en 9 instancias de índice en cada nodo.
- Añadimos un nuevo nodo índice y eliminamos uno existente.
- Todos los datos indexados del nodo eliminado se transfieren al nodo recién añadido.
- El tráfico de exploración sigue llegando a los nodos iniciales hasta que se completa la transferencia de datos.
Comparación del tiempo de reequilibrio del swap
El reequilibrio de la transferencia de archivos se completa en sólo 37 minutosfrente a la asombrosa 272 minutos con el método tradicional de reequilibrio DCP. Esto representa un Mejora 7 veces ¡en velocidad! Esta eficacia se debe en gran medida a la transferencia directa de archivos de datos, en lugar de reconstruirlos por completo. Mientras que la transferencia de datos en sí tardaría teóricamente alrededor de 29,6 minutos (suponiendo una velocidad sostenida de 200 MB/s), el tiempo total de reequilibrio se ajusta bien al tiempo real de reequilibrio de extremo a extremo (incluidas las fases de planificación y recuperación).
Reequilibrar la comparación de CPU
El reequilibrio DCP consume muchos más recursos de CPU que el reequilibrio de transferencia de archivos. Esto se debe a que el proceso de indexación necesita reconstruir todas las mutaciones transmitidas desde el servicio de datos, lo que supone un proceso intensivo desde el punto de vista computacional. Por el contrario, el reequilibrio de transferencia de archivos consume muy poca CPU, con picos ocasionales de uso de la CPU durante el proceso de reequilibrio. fase de recuperación después de la transferencia de datos.
Reequilibrar la comparación de memorias
El reequilibrio DCP también requiere mucha más memoria que el reequilibrio por transferencia de archivos. Durante el proceso de reconstrucción, el proceso de indexación tiene que asignar y gestionar constantemente la memoria para todas las mutaciones entrantes, lo que supone una importante presión sobre los recursos disponibles. Sin embargo, el reequilibrio de transferencia de archivos funciona de forma diferente. Dado que transfiere directamente los archivos de datos al disco en lugar de reconstruirlo todo en memoria, sólo requiere un mínimo de memoria para su procesamiento, lo que reduce significativamente la demanda total de memoria.
Reequilibrio temporal de la utilización de E/S de disco
El reequilibrio de transferencia de archivos mantiene una tasa de E/S de disco constante durante todo el proceso, gracias a la velocidad de transferencia controlada. Este estrangulamiento garantiza una eficiencia equilibrada y minimiza el impacto en el rendimiento. Pueden producirse picos ocasionales durante el fase de recuperación donde se procesan las mutaciones, pero en general, la E/S de disco permanece estable. Por el contrario, el reequilibrio DCP sufre una saturación casi constante de la E/S del disco debido a su enfoque de reconstrucción intensiva, lo que puede provocar cuellos de botella en el rendimiento.
Reequilibrio del ancho de banda de transferencia en el nodo de origen
Mientras que DCP aprovecha una tire de en el que los nodos de destino recuperan los datos directamente, la transferencia de archivos se basa en la nodo fuente que empuja activamente los datos hacia el exterior. El resultado es un notablemente superior out_bytes_por_segundo métrico (datos enviados) para el nodo de origen durante el reequilibrio de transferencia de archivos. En el reequilibrio DCP, esta métrica se aproxima a cero si no se está ejecutando ninguna exploración activa, ya que las extracciones de datos solo se producen bajo demanda.
Otras comparaciones del tiempo de reequilibrio
Ya hemos hablado de los impresionantes ahorros de tiempo conseguidos durante las operaciones de intercambio de reequilibrio (movimiento directo de datos entre los nodos que se añaden y eliminan). Nos complace informar de ganancias similares en otros dos escenarios: reequilibrio en (añadir nuevos nodos de índice y redistribuirles índices) y reequilibrio (eliminando nodos índice y redistribuyendo sus índices entre los nodos restantes). En la tabla siguiente se resumen las mejoras generales del tiempo de reequilibrio observadas en una configuración similar a la descrita anteriormente.
| Tipo de reequilibrio | Tiempo de reequilibrio DCP (min) | Tiempo de reequilibrio de la transferencia de archivos (min) |
| Reequilibrio (2 nodos → 3 nodos) | 123,6 min | 12,3 min |
| Reequilibrio (3 nodos → 2 nodos) | 144,7 min | 36,3 min |
Activación del reequilibrio de transferencias de archivos
El reequilibrio de transferencia de archivos está activado por defecto en las implantaciones de Capella. Para las implantaciones autoalojadas, el usuario final debe activarlo manualmente (desde la interfaz de usuario o mediante solicitudes de línea de comandos). Encontrará más información en la página documentación de reequilibrio.
Resumen
El método tradicional de reequilibrio de Couchbase Index Service sufre de un alto uso de recursos y largos tiempos de reequilibrio debido a la reconstrucción del índice. El nuevo reequilibrio por transferencia de archivos aborda este problema transfiriendo directamente archivos de datos entre nodos, lo que reduce significativamente la sobrecarga de recursos (CPU, memoria, E/S de disco) y los tiempos de reequilibrio. Los tiempos de reequilibrio de índices han mejorado hasta 7 veces en algunos casos, como el reequilibrio de intercambio. Esto se traduce en un escalado más rápido, un mejor rendimiento de las aplicaciones y una utilización más eficiente de los recursos del clúster.
-
- Más información Novedades de Couchbase Server 7.6.




