Reequilíbrio é um recurso central do gerenciamento de cluster do Couchbase Server. Ele permite a redistribuição de serviços quando os nós são adicionados ou removidos de um cluster. Esse recurso pode ajustar os dados e os índices, além do processamento de consultas e eventos, entre os nós de um cluster para equilibrar o uso de recursos, inclusive memória e CPU, uniformemente entre os nós. O rebalanceamento é uma operação on-line-ele é executado simultaneamente com as cargas de trabalho normais do cluster-portanto, é fundamental que ele realize seu trabalho em tempo hábil, sem interromper os aplicativos de produção.

O Couchbase Server 7.1 traz inúmeras melhorias de desempenho e redução do uso de recursos para o Rebalance for the Global Secondary Index Service por meio de um novo recurso, Índice de loteamento inteligente é criado durante o rebalanceamentoou "Smart Batching". Continue lendo para saber mais sobre esses aprimoramentos do Rebalance para o Serviço de Índice.

Rebalanceamento do índice

O Rebalance for the Index Service redistribui índices inteiros, réplicas e partições de índices individuais em todos os nós de índice disponíveis para equilibrar as demandas de memória e CPU uniformemente entre os nós. (Este artigo usa o termo abreviado "índices" para se referir coletivamente a índices, réplicas e partições). O Rebalanceamento do serviço de índice tem duas fases principais:

  1. Planejamento
  2. Movimento

No Fase de planejamentoO Planejador de índices usa um algoritmo de recozimento simulado para otimizar o layout desejado dos índices nos nós com base na memória real e estimada e no uso da CPU, levando em conta o custo de mover os índices para novas residências em outros nós.

O Fase de movimento começa depois que o Planejador produziu um plano desejado para o novo layout de índice e é onde o trabalho pesado de mover os índices é realizado. Observe que os índices não são realmente "movidos" no sentido de copiá-los de um nó para outro; em vez disso, seus metadados são movidos e os índices são reconstruídos em seus novos locais a partir de fluxos de campos de dados indexados do Data Service. Dependendo do número e do tamanho dos índices que precisam ser movidos, essa fase pode se estender por uma boa parte do tempo do relógio de parede e pode exigir muito dos recursos do cluster.

O recurso Smart Batching da versão 7.1 reduz o tempo gasto e a quantidade de recursos consumidos em comparação com as versões anteriores do Couchbase Server. Ele também permite maior simultaneidade do que era possível em versões anteriores se um caso de uso priorizar a redução do tempo de execução acima da minimização do uso de recursos do Rebalance.

Loteamento inteligente

Durante o Rebalanceamento do serviço de índice, o trabalho de mover os índices dos nós atuais para os destinos recém-planejados é feito em lotes de tamanho limitado para evitar muito impacto nas cargas de trabalho de produção em execução simultânea. O tamanho padrão do lote é três, o que não foi alterado em relação às versões anteriores, mas consulte a seção "Nota sobre o tamanho do lote" no final deste artigo para saber como um administrador pode aumentar esse tamanho.

O recurso Smart Batching traz inúmeras melhorias ao Rebalance for the Index Service:

  1. Aumenta o desempenho do Rebalance em
    • Aumento do paralelismo do pipeline
    • Opcionalmente, aumentar a simultaneidade geral
  2.  Reduz o consumo de recursos por meio de
    • Otimização do compartilhamento de fluxo de dados
  3.  Reduz o impacto sobre as cargas de trabalho de produção ao
    • Reparo de réplicas antes de mover os índices
    • Reduzir a simultaneidade em nós de índice com carga mais pesada

 Vamos dar uma breve olhada em cada um deles.

Aumento do paralelismo do pipeline 

Aumento do paralelismo do pipeline é realizado de várias maneiras. Primeiro, o Smart Batching sobrepõe lotes de movimentos de índice. O algoritmo anterior precisava aguardar a conclusão de um lote inteiro de movimentações antes de iniciar o lote seguinte, criando um efeito de "polo longo" em que a movimentação mais longa em cada lote atrasava o início do lote seguinte; assim, o nível geral de simultaneidade oscilava para cima e para baixo em pulsos, em vez de permanecer relativamente estável. Em vez disso, o Smart Batching inicia um novo lote de movimentações de índice quando apenas um subconjunto do lote anterior é concluído, mantendo o nível geral de simultaneidade mais próximo do máximo desejado.

Em segundo lugar, o Smart Batching sobrepõe as quedas de índices e partições com compilações de outros índices. A "movimentação" do índice consiste, na verdade, em mover os metadados, criar o índice no novo nó e, em seguida, descartá-lo do nó original. O algoritmo antigo tinha que aguardar a conclusão de todas as compilações de índice em um lote antes de iniciar qualquer uma das descargas. O Smart Batching sobrepõe os processos de eliminação de índices criados anteriormente com a criação de novos índices.

Por fim, o Smart Batching move todos os índices diferidos simultaneamente, em vez de fazê-lo em pequenos lotes. Os índices diferidos são aqueles que foram criados como diferidos (WITH {"defer_build": true}), mas para os quais ainda não foi emitido nenhum comando de compilação. Existem apenas os metadados para esses índices, que são muito pequenos (aproximadamente o tamanho do índice CRIAR ÍNDICE N1QL) para que não precisem ser criados em seus nós de destino e, portanto, não consumam quase nenhum recurso do cluster para serem movidos. As versões anteriores as moviam em pequenos lotes, cada um dos quais tinha que ser concluído antes que o próximo fosse iniciado, consumindo mais tempo do relógio de parede.

Aumentar a simultaneidade geral

Opcionalmente, aumentar a simultaneidade geral é um aprimoramento que o Smart Batching oferece ao possibilitar tamanhos máximos de lote maiores, permitindo que mais movimentações de índice sejam feitas simultaneamente. O tamanho padrão do lote de três não foi alterado em relação às versões anteriores; no entanto, agora é possível definir o tamanho do lote para números maiores que 10, o que não era suportado anteriormente. Como nas versões anteriores, o Serviço de índice ainda criará no máximo 10 fluxos de dados por vez para compilações de índices, para evitar sobrecarregar os nós de índice ou de dados, mas com o compartilhamento de fluxo (descrito no próximo item), mais de 10 índices totais podem ser compilados simultaneamente enquanto consomem esses fluxos, o que não era suportado anteriormente.

Compartilhamento de fluxo de dados

Otimização do compartilhamento de fluxo de dados significa construir lotes de modo que várias compilações de índices compartilhem o mesmo fluxo de dados com a maior frequência possível. O Smart Batching prefere programar índices que possam compartilhar um fluxo no mesmo lote, o que reduz a quantidade de recursos do cluster, especialmente a CPU, consumidos nos nós de índice e de dados durante o processo de criação. Anteriormente, o subconjunto de índices movidos em um lote era essencialmente aleatório.

O compartilhamento de fluxo é otimizado pela seleção preferencial de índices para um lote que compartilhará um fluxo com índices já selecionados para o lote.

    • As partições do mesmo índice são as mais preferidas porque não só compartilham o mesmo fluxo de dados, mas também exigem exatamente o mesmo conjunto de chaves de índice, minimizando o volume de campos de dados que precisam ser transmitidos.
    • Os índices na mesma coleção são preferidos se não houver partições suficientes do mesmo índice para preencher um lote. Eles também compartilharão um fluxo, mas, em geral, exigirão chaves diferentes, de modo que nem todos os campos de dados do fluxo serão compartilhados por todos os índices que o consumirem.

Reparo de réplicas

Reparo de réplicas antes de mover os índices significa que o Smart Batching reconstruirá as réplicas de índice que foram perdidas devido a failovers de nós anteriores antes de programar qualquer movimentação regular de índice. Como todas as réplicas de um Global Secondary Index estão disponíveis para leituras e gravações, a criação das que faltam primeiro distribuirá mais rapidamente a carga de trabalho de produção entre os nós que se concentraram em menos réplicas devido à perda de algumas. Antes do Smart Batching, não havia priorização dos reparos de réplicas, portanto, eles eram misturados aleatoriamente com outras movimentações de índices. Os reparos de réplicas ainda são agrupados como outras movimentações, na nova forma de sobreposição já descrita, porque ainda exigem compilações de índices, que são o aspecto que mais consome recursos do Rebalanceamento de índices.

Redução da simultaneidade 

Reduzir a simultaneidade em nós de índice com carga mais pesada é o aprimoramento final do Rebalance que o recurso Smart Batching traz para o Couchbase Server 7.1. Ao criar um novo lote de trabalho, o Smart Batching considera o tamanho dos índices já presentes em cada nó para decidir se prefere criar outro índice em um nó específico no lote atual (feito para nós com carga leve) ou, em vez disso, selecionar uma criação de índice para o próximo nó em uma sequência de nós round-robin (feito para nós com carga mais pesada).

A criação de mais índices no mesmo nó aumenta as chances de compartilhamento de fluxo, mas também consome mais CPU e memória nesse nó enquanto as compilações estão em andamento. Os nós são considerados levemente carregados se o tamanho do conjunto residente na memória (RSS) tiver uma média de pelo menos 50% (índices secundários globais padrão, também conhecidos como Plasma) ou se a memória total do Serviço de Índice já usada no nó for no máximo metade da cota de memória atribuída (índices otimizados para memória). Antes do recurso Smart Batching, o algoritmo Rebalance não levava em conta a carga do nó.

Suporte a loteamento inteligente para clusters de nível misto

Todos os benefícios do Smart Batching também se aplicam a clusters com nós de diferentes níveis de versão, desde que pelo menos um nó de índice esteja executando o Couchbase Server 7.1 ou superior, exceto pelo paralelismo específico do pipeline de índice sobreposto e quedas de partição com compilações de outros índices.

Observação sobre o tamanho do lote

O tamanho do lote padrão do Rebalanceamento de índice permanece em seu valor histórico de três. Embora a interface do usuário do Couchbase Server não exponha esse parâmetro de configuração, um usuário com privilégios de administrador do Couchbase pode alterá-lo na linha de comando em qualquer nó de índice por meio de:

A alteração será propagada automaticamente para todos os nós de índice e será lembrada durante as reinicializações do nó e do cluster.

Conclusão

O Couchbase Server 7.1 traz muitos aprimoramentos novos e interessantes para o recurso Rebalance principal que aumentam a velocidade e reduzem o impacto dos Rebalanceamentos do Serviço de Índice. Este artigo deve ajudá-lo a se familiarizar com as novas alterações de alto nível, bem como a entender alguns dos detalhes mais refinados que tornam o Rebalanceamento de Índice realmente mais inteligente no Couchbase Server 7.1.

Há muitos outros recursos e aprimoramentos fornecidos nesta versão - leia esta visão geral de O que há de novo no Couchbase Server 7.1 para se atualizar.

Autor

Postado por Kevin Cherkauer, engenheiro de software sênior, Couchbase

2 Comentários

  1. Por que não mover fisicamente os índices em vez de reconstruí-los? Os GSI são basicamente pares (chave secundária, pk) - eles seriam válidos mesmo se você apenas movesse fisicamente os arquivos e isso consumiria menos recursos. O que estou perdendo aqui?

Deixar uma resposta