Reequilibrar es una característica central de la gestión de clusters de Couchbase Server. Permite la redistribución de servicios cuando se añaden o eliminan nodos de un cluster. Esta característica puede ajustar datos e índices, además del procesamiento de consultas y eventos, entre los nodos de un cluster para equilibrar el uso de recursos, incluyendo memoria y CPU, de manera uniforme entre nodos. El reequilibrio es una operación en línea-se ejecuta simultáneamente con las cargas de trabajo normales del clúster-por lo que es fundamental que realice su trabajo a tiempo sin interrumpir las aplicaciones de producción.
Couchbase Server 7.1 aporta numerosas mejoras de rendimiento y un menor uso de recursos a Rebalance for the Global Secondary Index Service a través de una nueva función, El índice de lotes inteligentes se acumula durante el reequilibrioo "Smart Batching". Siga leyendo para obtener más información sobre estas mejoras de Rebalanceo para el Index Service.
Reequilibrio del índice
El reequilibrio para el servicio de índices redistribuye índices completos, réplicas y particiones de índices individuales entre todos los nodos de índices disponibles para equilibrar las demandas de memoria y CPU de forma uniforme entre los nodos. (En este artículo se utiliza la abreviatura "índices" para referirse colectivamente a índices, réplicas y particiones). Index Service Rebalance tiene dos fases principales:
- Planificación
- Movimiento
En el Fase de planificaciónEl planificador de índices utiliza un algoritmo de templado simulado para optimizar la distribución deseada de los índices en los nodos en función del uso real y estimado de la memoria y la CPU, teniendo en cuenta el coste de mover los índices a nuevas ubicaciones en otros nodos.
En Fase de movimiento comienza después de que el Planificador haya producido un plan deseado para la nueva disposición de los índices y es donde se realiza el trabajo pesado de mover los índices. Tenga en cuenta que los índices no se "mueven" realmente en el sentido de copiarlos de un nodo a otro, sino que se mueven sus metadatos y, a continuación, se reconstruyen los índices en sus nuevas ubicaciones a partir de flujos de campos de datos indexados procedentes del Servicio de Datos. Dependiendo del número y el tamaño de los índices que haya que mover, esta fase puede durar mucho tiempo y puede suponer una gran demanda de recursos para el clúster.
La función Smart Batching de la versión 7.1 reduce tanto el tiempo de ejecución como la cantidad de recursos consumidos en comparación con versiones anteriores de Couchbase Server. También permite una mayor concurrencia de lo que era posible en versiones anteriores si un caso de uso prioriza la reducción del tiempo de ejecución por encima de minimizar el uso de recursos de Rebalance.
Dosificación inteligente
Durante el reequilibrio del servicio de índices, el trabajo de mover índices desde sus nodos actuales a sus nuevos destinos planificados se realiza en lotes de tamaño limitado para evitar un impacto excesivo en las cargas de trabajo de producción que se ejecutan simultáneamente. El tamaño por defecto de los lotes es de tres, sin cambios respecto a versiones anteriores, pero consulte la sección "Nota sobre el tamaño de los lotes" al final de este artículo para saber cómo puede aumentarlo un administrador.
La función Smart Batching aporta numerosas mejoras a Rebalance for the Index Service:
- Aumenta el rendimiento de Reequilibrio en
- Aumentar el paralelismo de las canalizaciones
- Aumento opcional de la concurrencia global
- Reduce el consumo de recursos mediante
- Optimización del intercambio de flujos de datos
- Reduce el impacto en las cargas de trabajo de producción mediante
- Reparación de réplicas antes de mover índices
- Reducción de la concurrencia en los nodos de índice más cargados
Veamos brevemente cada una de ellas.
Aumentar el paralelismo de las canalizaciones
Aumentar el paralelismo de las canalizaciones se consigue de varias maneras. En primer lugar, el Smart Batching solapa los lotes de movimientos del índice. El algoritmo anterior tenía que esperar a que finalizara un lote completo de movimientos antes de iniciar el siguiente, lo que creaba un efecto de "polo largo" en el que el movimiento más largo de cada lote retrasaba el inicio del siguiente; así, el nivel general de concurrencia oscilaba arriba y abajo en pulsos en lugar de permanecer relativamente estable. En cambio, Smart Batching inicia un nuevo lote de movimientos de índice cuando sólo se ha completado un subconjunto del lote anterior, manteniendo el nivel general de concurrencia más cerca del máximo deseado.
En segundo lugar, Smart Batching solapa la creación de índices y particiones con la creación de otros índices. En realidad, el "movimiento" de índices consiste en mover los metadatos, crear el índice en el nuevo nodo y, a continuación, eliminarlo del nodo original. El antiguo algoritmo tenía que esperar a que se completaran todas las construcciones de índices de un lote antes de iniciar cualquiera de las caídas. Smart Batching solapa los procesos de eliminación de índices creados previamente con la creación de índices nuevos.
Por último, Smart Batching mueve todos los índices diferidos de forma concurrente en lugar de hacerlo en pequeños lotes. Los índices diferidos son aquellos que se crearon como diferidos (WITH {"defer_build": true}) pero para los que aún no se ha emitido ninguna orden de compilación. Sólo existen los metadatos de estos índices, que son muy pequeños (aproximadamente del tamaño del correspondiente índice CREAR ÍNDICE N1QL), por lo que no necesitan construirse en los nodos de destino y, por tanto, no consumen casi recursos del clúster. Las versiones anteriores los trasladaban en pequeños lotes, cada uno de los cuales debía completarse antes de iniciar el siguiente, lo que consumía más tiempo de reloj de pared.
Aumento de la concurrencia global
Aumento opcional de la concurrencia global es una mejora que ofrece Smart Batching al permitir tamaños de lote máximos más grandes, lo que permite realizar más movimientos de índice simultáneamente. El tamaño de lote predeterminado de tres no ha cambiado con respecto a versiones anteriores; sin embargo, ahora es posible establecer un tamaño de lote superior a 10, lo que no era posible antes. Como en versiones anteriores, el Servicio de Índices sólo creará un máximo de 10 flujos de datos a la vez para la construcción de índices, para evitar sobrecargar los nodos de Índices o Datos, pero con la compartición de flujos (descrita en el siguiente punto), más de 10 índices totales pueden construirse simultáneamente mientras se consumen esos flujos, lo que antes no era posible.
Compartir flujos de datos
Optimización del intercambio de flujos de datos significa construir lotes de tal forma que varias construcciones de índices compartan el mismo flujo de datos tan a menudo como sea posible. Smart Batching prefiere programar índices que puedan compartir un flujo en el mismo lote, lo que reduce la cantidad de recursos del clúster, especialmente CPU, consumidos tanto en los nodos de índices como en los de datos durante el proceso de construcción. Anteriormente, el subconjunto de índices movidos dentro de un lote era esencialmente aleatorio.
El uso compartido de flujos se optimiza seleccionando preferentemente índices para un lote que compartirán un flujo con índices ya seleccionados para el lote.
-
- Las particiones del mismo índice son las más preferidas porque no sólo compartirán el mismo flujo de datos, sino que también requerirán exactamente el mismo conjunto de claves de índice, lo que minimiza el volumen de campos de datos que hay que transmitir.
- Los índices sobre la misma colección se prefieren entonces si no hay suficientes particiones del mismo índice para completar un lote. Estos también compartirán un flujo, pero en general requerirán claves diferentes, por lo que no todos los campos de datos del flujo serán compartidos por todos los índices que lo consuman.
Reparación de réplicas
Reparación de réplicas antes de mover índices significa que Smart Batching reconstruirá las réplicas de índice que se hayan perdido debido a fallos de nodos anteriores antes de programar cualquier movimiento de índice regular. Dado que todas las réplicas de un índice secundario global están disponibles tanto para lecturas como para escrituras, reconstruir primero las que faltan repartirá más rápidamente la carga de trabajo de producción entre los nodos que se habían concentrado en menos réplicas debido a la pérdida de algunas. Antes de Smart Batching, no existía una priorización de las reparaciones de réplicas, por lo que se mezclaban con otros movimientos de índices de forma aleatoria. Las reparaciones de réplicas se siguen agrupando por lotes como otros movimientos, de la nueva forma solapada ya descrita, porque siguen requiriendo la creación de índices, que es el aspecto del Reequilibrio de Índices que más recursos consume.
Reducir la concurrencia
Reducción de la concurrencia en los nodos de índice más cargados es la última mejora de Rebalanceo que la característica Smart Batching aporta a Couchbase Server 7.1. Al crear un nuevo lote de trabajo, Smart Batching tiene en cuenta el tamaño de los índices ya presentes en cada nodo para decidir si prefiere construir otro índice en un nodo en particular en el lote actual (hecho para nodos poco cargados) o, en su lugar, seleccionar una construcción de índice para el siguiente nodo en una secuencia de nodos round-robin (hecho para nodos más cargados).
Construir más índices en el mismo nodo aumenta las posibilidades de compartir flujos, pero también consume más CPU y memoria en ese nodo mientras avanza la construcción. Se considera que los nodos están poco cargados si el tamaño de su conjunto residente en memoria (RSS) es como mínimo de 50% de media (índices secundarios globales estándar, también conocidos como Plasma) o si la memoria total del servicio de índices ya utilizada en el nodo es como máximo la mitad de su cuota de memoria asignada (índices con memoria optimizada). Antes de la función Smart Batching, el algoritmo de reequilibrio no tenía en cuenta la carga del nodo.
Soporte inteligente de lotes para clústeres de varios niveles
Todos los beneficios de Smart Batching también se aplican a los clusters con nodos de diferentes niveles de liberación, siempre y cuando al menos un nodo de índice se está ejecutando Couchbase Server 7.1 o superior, a excepción de la tubería específica de paralelismo de solapamiento índice y partición gotas con la construcción de otros índices.
Nota sobre el tamaño de los lotes
El tamaño de lote por defecto de Index Rebalance permanece en su valor histórico de tres. Mientras que la interfaz de usuario del servidor Couchbase no expone este parámetro de configuración, un usuario con privilegios de administrador de Couchbase puede cambiarlo desde la línea de comandos en cualquier nodo de índice a través de:
1 2 |
rizo -u <usuario>:<contraseña> http://localhost:9102/settings -X POST \ -d '{"indexer.rebalance.transferBatchSize":}' |
El cambio se propagará automáticamente a todos los nodos del Índice y se recordará en todos los reinicios del nodo y del clúster.
Conclusión
Couchbase Server 7.1 trae nuevas y emocionantes mejoras a la característica principal de Rebalanceo que incrementan la velocidad y reducen el impacto de los Rebalanceos del Servicio de Índices. Este artículo debería ayudarte a familiarizarte con los nuevos cambios de alto nivel, así como ayudarte a entender algunos de los detalles más finos que van en hacer Index Rebalance verdaderamente más inteligente en Couchbase Server 7.1.
En esta versión se han incluido muchas otras funciones y mejoras. Novedades de Couchbase Server 7.1 para ponerse al día.
¿Por qué no mover físicamente los índices en lugar de reconstruirlos? Los GSI son básicamente pares (clave secundaria, pk) - serían válidos incluso si sólo se mueven físicamente los archivos y eso sería menos intensivo en recursos. ¿Qué se me escapa?
Exactamente lo que hemos hecho ahora. https://www.couchbase.com/blog/file-transfer-index-rebalance/