Un aspecto integral de cualquier sistema distribuido es proporcionar sin problemas alta disponibilidad (HA) y capacidades de equilibrio de carga a su usuario. Sin apenas intervención del usuario, los índices secundarios globales de Couhbase1 (GSI) proporciona a sus usuarios tanto HA como equilibrio de carga dentro de un clúster couchbase.
Qué es Index Planner
Index Planner es una librería utilizada por el servicio de indexación de Couchbase para determinar la colocación óptima de los índices. Proporciona soporte para la colocación de índices HA-aware y balanceo de carga para el servicio de indexación Couchbase. El planificador de índices se utiliza para decidir la ubicación óptima de los índices en dos casos de uso, (1) Creación de nuevos índices y (2) Reequilibrio del Servicio de Índices es decir, cuando se añaden o eliminan nodos indexadores del clúster.2.
Cómo funciona Index Planner
Dado un conjunto de "nodos" que alojan el servicio de indexación de Couchbase (pueden tener diferentes configuraciones de hardware), y un conjunto de índices con sus propios "parámetros de carga", Index Planner proporciona al usuario la colocación óptima3 de estos índices en estos nodos indexadores. Colocar de forma óptima cientos de índices -con diferentes valores de los parámetros de carga- en decenas de nodos indexadores requiere explorar un espacio de soluciones muy amplio. Por tanto, encontrar "la" solución óptima de forma determinista requiere un tiempo exponencial. Por lo tanto, en lugar de encontrar "la" solución óptima, Index Planner utiliza métodos probabilísticos. recocido simulado para encontrar una solución globalmente óptima aproximada. Experimentalmente, se ha demostrado que el recocido simulado da buenos resultados para el algoritmo de colocación de índices del servidor couchbase.
Los parámetros de carga que tiene en cuenta el Planificador de Índices son (1) el tamaño del índice (2) la huella de memoria del índice (3) la tasa de escaneado del índice (4) la tasa de ingestión de datos del índice, etc., por nombrar sólo algunos. Todos estos parámetros de carga ayudan al Planificador de Índices a calcular la carga generada por cada índice y, a su vez, a calcular la carga que supone para cada nodo indexador la colocación de un índice específico. En el momento de creación de índicesLos valores reales de los parámetros de carga son desconocidos. Por lo tanto, a efectos de la creación de índices, el Planificador de índices se ejecuta con "valores estimados" de estos parámetros de carga. Durante el reequilibrio, el Planificador de índices obtiene los valores de estos parámetros de carga del índice de estadísticas.
Ejemplo 1:
Consideremos un cluster Couchbase con 3 nodos indexadores idénticos - "Nodo 1", "Nodo 2" y "Nodo 3". Supongamos que los nodos Nodo 1 y Nodo 2 ya alojan 1 índice cada uno - index1 e index2 respectivamente. Si el usuario añade un nuevo índice "index3", basándose en la distribución de carga actual, Index Planner colocará el nuevo índice en el Nodo 3.
De este modo, el planificador de índices se encarga de distribuir los índices entre todos los nodos de índice disponibles en el clúster. Para proporcionar más capacidades de equilibrio de carga y proporcionar HA, el servicio de indexación permite a los usuarios crear réplicas de índices. En las siguientes secciones hablaremos de las réplicas de índices.
Planificador de índices para la colocación de réplicas de índices
Para una alta disponibilidad, se aconseja siempre a los usuarios que creen uno o varios réplicas de índices (en función de sus requisitos de HA). El servicio de indexación de Couchbase implementa la política de réplica maestro-maestro. Así, todas las réplicas del cluster pueden servir consultas entrantes4. El servicio de indexación de Couchbase se asegura de que las peticiones de escaneo se distribuyan uniformemente entre todas las réplicas del índice.
Index Planner "siempre" se asegura de que las réplicas del mismo índice se coloquen en diferentes nodos indexadores. Esto proporciona a los usuarios una alta disponibilidad.
Ejemplo 2:
En el mismo cluster del Ejemplo 1, supongamos que los nodos Nodo 1 y Nodo 2 ya alojan 2 réplicas de índice cada uno, y que el Nodo 3 no aloja ninguna réplica de índice5. Así, si el usuario añade un nuevo índice "index3" con dos réplicas (réplica0 y réplica1), basándose en la distribución de carga actual, Index Planner colocará una de las réplicas del nuevo índice en el nodo Nodo 3, pero la segunda réplica NO se colocará en el Nodo 3 - incluso si esto significa una distribución de carga relativamente desigual entre los nodos.
Notas: Cada réplica de índice se identifica por su id (es decir, replicaId) que empieza por cero. Además, el usuario puede especificar el número necesario de réplicas en el momento de la creación del índice utilizando el parámetro "num_replica", donde "num_replica" = 1 significa que se crearán un total de 2 instancias de índice (con replicaId 0 y replicaId 1).
Planificador de índices para el conocimiento de las zonas de estanterías
El gestor de clústeres de Couchbase ofrece a los usuarios la posibilidad de agrupar los nodos del clúster para formar Grupos de servidores. Cada grupo de servidores puede asignarse a una zona de conmutación por error en el centro de datos. Por ejemplo, todos los nodos de un único "rack" del centro de datos pueden pertenecer a un único grupo de servidores.
Index Planner es "rack zone aware" y siempre coloca las réplicas de un mismo índice en diferentes grupos de servidores. Si el número de grupos de servidores es inferior al número de réplicas, los grupos de servidores pueden alojar más de 1 réplica.
Ejemplo 3:
Consideremos un cluster Couchbase con 4 nodos indexadores idénticos - "Nodo 1", "Nodo 2", "Nodo 3" y "Nodo 4". El Nodo 1 y el Nodo 2 pertenecen al "Grupo de Servidores 1" y el Nodo 3 y el Nodo 4 pertenecen al "Grupo de Servidores 2". Supongamos que los nodos Nodo 1 y Nodo 2 ya alojan 1 índice cada uno: índice1 - réplica0 e índice2 - réplica0 respectivamente. Ahora, si el usuario añade un nuevo índice "index3" con 2 réplicas (réplica0 y réplica1) al cluster. Entonces, Index Planner añadirá una réplica al Nodo 3 o Nodo 4 para distribuir la carga. Pero, la segunda réplica tiene que ir al Grupo de Servidores 1, porque el Nodo 3 o Nodo 4 - perteneciente al Grupo de Servidores 1 - ya está alojando una réplica. Index Planner toma esta decisión aunque suponga una distribución de la carga relativamente desigual entre varios nodos.
Planificador de índices para la distribución de particiones de índices
Los usuarios de Couchbase pueden crear índice particionado para obtener una mejor distribución de la carga -con respecto a la construcción del índice- y para obtener resultados de escaneo más rápidos para índices grandes. Con la ayuda de un índice particionado, los datos del índice se distribuirán entre varias particiones en función del valor hash de la clave de partición. El planificador de índices es consciente de las particiones y puede distribuir las particiones de índices entre varios nodos indexadores, basándose en la carga de creación de índices y en la carga de escaneado de índices.
El planificador de índices distribuye las particiones de un índice entre tantos nodos indexadores como sea posible. Esto es útil para distribuir la carga de escaneo del índice así como la carga de construcción del índice entre esos nodos indizadores. Sin embargo, Index Planner no garantiza una distribución uniforme de las particiones entre todos los nodos indexadores disponibles. Esto ayuda a los usuarios a conseguir una mejor distribución de la carga total en el cluster, cuando hay múltiples índices particionados y no particionados con diferentes "parámetros de carga".
Ejemplo 4:
Consideremos un cluster Couchbase con 4 nodos indexadores idénticos - "Nodo 1", "Nodo 2", "Nodo 3" y "Nodo 4". Supongamos que los nodos "Nodo 1" ya alojan 2 índices no particionados. Ahora, si el usuario añade un índice particionado6 "index3" (con 4 particiones), Planificador de índices mayo distribuir las 4 particiones del nuevo índice sólo entre el Nodo 2, Nodo 3 y Nodo 4. Esto garantizará una mejor distribución general de la carga en el clúster.
Los índices particionados pueden tener réplicas. Cada partición de un índice tiene su propio conjunto de réplicas de partición. Index Planner se asegura de que las réplicas de partición también se distribuyan entre los nodos indexadores y entre diferentes grupos de servidores para garantizar la distribución de carga necesaria y una alta disponibilidad.
En la siguiente parte de este blog, vamos a discutir cómo couchbase servicio de indexación utiliza Index Planner para diversos casos de uso.
1 En este blogpost, el término "índice" se utilizará sólo para los Índices Secundarios Globales de Couchbase.
2 Los índices que residen en los nodos no eliminados del clúster no se ven afectados por el reequilibrio.
3 Una colocación óptima significa la mejor distribución posible de la carga que cumpla todos los requisitos de HA.
4 Las réplicas del Índice Secundario Global se construyen y mantienen de forma completamente independiente. Las consultas entrantes - servidas por estas réplicas - se adhieren al Couchbase GSI modelo de coherencia.
5 Los usuarios pueden acabar con este tipo de distribución de índices cuando empiezan con dos nodos en el clúster, crean índices con 2 réplicas cada uno y luego añaden un tercer nodo al clúster.
6 Para los índices particionados, los identificadores de partición empiezan por 1. El identificador de partición 0 se utiliza para los índices no particionados.