A replicação em cadeia reduz a carga no nó primário, mas pode aumentar o atraso de replicação. Este documento apresenta benchmarks do impacto no desempenho em instâncias de conjunto de réplicas do ApsaraDB for MongoDB com 3, 7 e 15 nós para ajudar na escolha da configuração ideal.
Replicação em cadeia
O que é replicação em cadeia?
O MongoDB oferece suporte à replicação em cadeia. Esse mecanismo ocorre quando um nó secundário de um conjunto de réplicas sincroniza dados a partir de outro nó secundário. Embora essa abordagem reduza a carga no nó primário, ela pode aumentar o atraso de replicação em determinadas topologias de rede. Para mais informações, consulte Self-Managed Chained Replication.
Na replicação em cadeia, não é necessário que todos os nós formem uma única cadeia. Um nó secundário pode escolher uma source de sincronização diferente do nó primário com base em métricas como tempo de ida e volta (RTT). O diagrama abaixo ilustra várias topologias de conjuntos de réplicas de cinco nós que utilizam replicação em cadeia.
Configure replicação em cadeia
Ative ou desative a replicação em cadeia ajustando o parâmetro settings.chainingAllowed na página Parameter Settings do console. Para mais detalhes sobre como ajustar parâmetros, consulte Definir parâmetros do banco de dados.
Caso a replicação em cadeia cause atrasos na replicação, desative-a para otimizar o desempenho da sincronização.
Por motivos de segurança, não é possível execute o comando replSetReconfig em instâncias do ApsaraDB for MongoDB. Modifique os parâmetros diretamente no console.
Teste de impacto no desempenho da instância
Ambiente de teste
Crie uma instância ECS e uma instância de conjunto de réplicas do ApsaraDB for MongoDB. Para mais informações, consulte Criar uma instância de conjunto de réplicas e Criar uma instância ECS usando o assistente.
Arquitetura da instância ApsaraDB for MongoDB: conjunto de réplicas padrão com três nós, composto por um nó primário, um nó secundário e um nó oculto. Configurações maiores incluem nós secundários e somente leitura adicionais.
Tempo de ida e volta (RTT) de rede entre as instâncias ECS e ApsaraDB for MongoDB: média de 0,103 ms quando ambas as instâncias estão na mesma região e zona.
A tabela a seguir lista as configurações de instância utilizadas neste teste.
|
Parâmetro |
Instância ECS |
Instância ApsaraDB for MongoDB |
|
Região e zona |
China (Beijing) zone H |
China (Beijing) zone H |
|
Tipo de rede |
VPC |
VPC |
|
Família da instância |
Compute-optimized c6 |
Dedicated |
|
Tipo de instância |
ecs.c6.xlarge (4 vCPU, 8 GiB) |
ecs.c7.xlarge (4 vCPU, 8 GiB) |
|
Tipo de armazenamento |
ESSD PL0 |
ESSD PL1 |
|
Sistema operacional |
Alibaba Cloud Linux 3.2104 LTS 64-bit |
4.19.91-26.al7.x86_64 |
|
Versão do MongoDB |
N/A |
Versão principal: 5.0 Versão base secundária: 5.0.30 |
Ferramenta de teste
Este teste utiliza a ferramenta de benchmark open-source YCSB 0.17.0.
O Yahoo! Cloud Serving Benchmark (YCSB) é uma ferramenta baseada em Java para avaliar o desempenho de bancos de dados. Para instruções de instalação e uso, consulte o repositório oficial do YCSB.
Procedimento
Adicionar um endereço IP à lista de permissões. Acesse o console ECS, localize o endereço IP privado principal da sua instância ECS na página de detalhes da instância e adicione-o à lista de permissões da sua instância ApsaraDB for MongoDB.
-
Carregue os dados de teste usando o YCSB.
./bin/ycsb.sh load mongodb -s -p workload=site.ycsb.workloads.CoreWorkload -p recordcount=5000000 -p mongodb.url="mongodb://test:****@dds-bp13e84d11****.mongodb.rds.aliyuncs.com:3717/admin" -p table=test -threads 8Parâmetros:
recordcount: número total de registros a serem carregados na instância ApsaraDB for MongoDB.mongodb.url: string de conexão da instância ApsaraDB for MongoDB. Neste teste, a conta do banco de dados éteste o banco de dados éadmin. Encontre a string de conexão na página Database Connection, na seção Internal Connections - VPC do console do ApsaraDB for MongoDB.threads: quantidade de threads simultâneas do cliente.
Visualize os resultados do teste YCSB e os dados de monitoramento da instância. Na página Monitoring Information, acesse a aba Node Monitoring. Selecione o intervalo de tempo do teste e visualize as métricas de CPU utilization, QPS, and average response time do nó primário. Para mais informações, consulte Monitoramento de nós (anteriormente monitoramento básico).
Resultados do teste
Parâmetros
Write Concern: nível de confirmação solicitado ao MongoDB para operações de escrita. Este teste utiliza os seguintes valores:
{w:"majority"}: configuração padrão. A escrita é confirmada após ser replicada para a maioria dos nós votantes no conjunto de réplicas.{w: 1}: a escrita é confirmada assim que o nó primário a valida.
Resultados detalhados do teste
Instância de 3 nós
Topologia do conjunto de réplicas: um nó primário, um nó secundário e um nó oculto.
Write concern: {w:"majority"}
|
Item |
Replicação em cadeia ativada |
Replicação em cadeia desativada |
|
Throughput (ops) |
5.277 |
5.241 |
|
CPU utilization |
65% |
65% |
|
QPS (count) |
|
|
|
Average response time (μs) |
|
|
Write concern: {w:1}
|
Item |
Replicação em cadeia ativada |
Replicação em cadeia desativada |
|
Throughput (ops) |
15.075 |
14.785 |
|
CPU utilization |
93% |
93% |
|
QPS (count) |
|
|
|
Average response time (μs) |
|
|
Instância de 7 nós
Topologia do conjunto de réplicas: um nó primário, cinco nós secundários e um nó oculto.
Write concern: {w:"majority"}
|
Item |
Replicação em cadeia ativada |
Replicação em cadeia desativada |
|
Throughput (ops) |
3.005 |
4.312 |
|
CPU utilization |
56% |
85% |
|
QPS (count) |
|
|
|
Average response time (μs) |
|
|
Write concern: {w:1}
|
Item |
Replicação em cadeia ativada |
Replicação em cadeia desativada |
|
Throughput (ops) |
14.414 |
11.492 |
|
CPU utilization |
91% |
93% |
|
QPS (count) |
|
|
|
Average response time (μs) |
|
|
Instância de 15 nós
Topologia do conjunto de réplicas: um nó primário, cinco nós secundários, um nó oculto e oito nós somente leitura.
Esta configuração possui 7 nós votantes e 8 nós não votantes (nós somente leitura não votam).
Write concern: {w:"majority"}
|
Item |
Replicação em cadeia ativada |
Replicação em cadeia desativada |
|
Throughput (ops) |
2.932 |
3.123 |
|
CPU utilization |
58% |
91% |
|
QPS (count) |
|
|
|
Average response time (μs) |
|
|
Write concern: {w:1}
|
Item |
Replicação em cadeia ativada |
Replicação em cadeia desativada |
|
Throughput (ops) |
14.093 |
7.500 |
|
CPU utilization |
90% |
94% |
|
QPS (count) |
|
|
|
Average response time (μs) |
|
|
Comparação de desempenho e resumo
-
Para um número fixo de nós, a configuração de write concern determina se desativar a replicação em cadeia degrada o desempenho de escrita.
Write concern:
{w:1}Em instâncias de 3 nós, a degradação de desempenho ao desativar a replicação em cadeia é insignificante.
Em instâncias de 7 nós, desativar a replicação em cadeia causa uma degradação de desempenho de aproximadamente 20,3%.
Em instâncias de 15 nós, o desempenho cai 46,8% e a utilização de CPU do nó primário aumenta significativamente.
Write concern:
{w:"majority"}Em instâncias de 3 nós, a perda de desempenho ao desativar a replicação em cadeia é insignificante.
-
Em instâncias de 7 e 15 nós, desativar a replicação em cadeia pode melhorar o desempenho em aproximadamente 6,5% a 43,5%.
Motivo da melhoria de desempenho: desativar a replicação em cadeia encurta o caminho de sincronização para todos os nós do conjunto de réplicas, facilitando o atendimento à condição de maioria e reduzindo a latência de cada operação de escrita.
Impacto dos nós não votantes: com um número fixo de 7 nós votantes, o ganho de desempenho obtido ao desativar a replicação em cadeia diminui à medida que mais nós não votantes são adicionados, devido ao aumento da carga de replicação no nó primário.
-
**Com as mesmas configurações de
chainingAllowedewriteConcern, o desempenho de escrita diminui conforme o número de nós aumenta. A degradação é mais significativa quando a replicação em cadeia está desativada.**Na configuração padrão (
chainingAllowed:trueewriteConcern:{w:"majority"}), a degradação de desempenho não é significativa ao expandir de 7 para 15 nós, pois um conjunto de réplicas pode ter no máximo 7 membros votantes, mantendo inalterada a condição de maioria.O desempenho com
writeConcern:{w:1}é significativamente superior ao obtido comwriteConcern:{w:"majority"}, independentemente de a replicação em cadeia estar ativada. Esse comportamento é esperado dado o funcionamento dos write concerns.Com uma configuração fixa de write concern, desativar a replicação em cadeia aumenta a utilização de CPU do nó primário de forma mais expressiva à medida que o número de nós cresce, em comparação com o cenário em que ela permanece ativada.
Agrupado por configuração

Agrupado por quantidade de nós

Melhores práticas
Em implantações com poucos nós, ativar ou desativar a replicação em cadeia não gera impacto significativo no desempenho da instância ou na utilização de CPU.
-
Para implantações com muitos nós:
Se o
writeConcernfor{w:1}, recomenda-se ativar a replicação em cadeia.Se o
writeConcernfor{w:"majority"}, equilibre a carga do nó primário (como a utilização de CPU) com o desempenho da instância. Desativar a replicação em cadeia melhora o desempenho de escrita, mas aumenta significativamente a carga no nó primário.























