Testes de benchmark quantificam a sobrecarga de desempenho causada pela ativação de logs de auditoria em instâncias do ApsaraDB for MongoDB para auxiliar na decisão sobre habilitar esse recurso.
Conclusões dos testes
A ativação de logs de auditoria afeta o desempenho da instância da seguinte forma:
Cargas de trabalho somente de escrita (operações puras de inserção ou atualização): o uso de CPU aumenta aproximadamente 3 pontos percentuais (aumento relativo de 15% a 20%), sem alteração significativa no tempo de resposta ou no throughput.
Cargas de trabalho mistas de leitura e escrita: o uso de CPU não apresenta mudança significativa, mas o desempenho geral de leitura e escrita diminui cerca de 15% a 20%. O tempo médio de resposta de escrita aumenta entre 500 e 700 μs e o de leitura entre 150 e 300 μs, enquanto o throughput cai de 15% a 20%.
Ambiente de teste
|
Parâmetro |
Instância ECS de teste de estresse |
Instância MongoDB |
|
Região e zona |
China (Hangzhou) Zone J |
China (Hangzhou) Zone J |
|
Tipo de rede |
VPC |
VPC |
|
Família de tipos de instância |
Computação otimizada c8i |
Dedicada |
|
Tipo de instância |
ecs.c8i.4xlarge (16 vCPU, 32 GB) |
mdb.shard.8x.16xlarge.d (64 vCPU, 512 GB) |
|
Tipo de armazenamento |
Disco em nuvem ESSD PL0 (disco do sistema), sem disco de dados |
Disco em nuvem ESSD PL1 |
|
Largura de banda |
100 Mbps |
350 Mbps |
|
Espaço de armazenamento |
40 GiB (disco do sistema) |
470 GB |
|
Topologia |
- |
Instância de conjunto de réplicas padrão (3 nós: 1 nó primário, 1 nó secundário e 1 nó oculto) |
|
Versão da imagem |
CentOS 7.8 64 bits |
- |
|
Versão do kernel da instância |
- |
MongoDB 6.0 (versão menor do kernel 7.0.23) |
|
Read/Write Concern |
- |
Read/write concern padrão |
A instância ECS de teste de estresse e a instância do ApsaraDB for MongoDB estão na mesma região e zona. O tempo de ida e volta (RTT) entre elas é de aproximadamente 0,104 ms.
Ferramenta de teste
Estes testes de benchmark usam o YCSB (Yahoo! Cloud Serving Benchmark) 0.17.0, uma ferramenta de código source aberto.
O YCSB é uma ferramenta de benchmark baseada em Java com suporte a vários bancos de dados. Para instruções de instalação e uso, consulte YCSB.
Procedimento de teste
-
Adicione o primary private IP address da instância ECS à lista de permissões de IP da instância do ApsaraDB for MongoDB. Para obter instruções, consulte Modify IP whitelist.
NotaFaça login no ECS console e localize o primary private IP address da instância ECS na seção Network Information da página Instance Details.
Conecte-se remotamente à instância ECS. Para obter instruções, consulte Connect to an ECS instance.
-
Use a ferramenta YCSB para carregar os dados de teste.
./bin/ycsb load mongodb -s -p workload=site.ycsb.workloads.CoreWorkload -p recordcount=10000000 -p mongodb.url="mongodb://root:xxx@dds-bp1be0f4f3bbdxxxx.mongodb.rds.aliyuncs.com:3717,dds-bp1be0f4f3bbdxxxx.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-xxxx" -threads 300Modifique os parâmetros a seguir conforme necessário:
recordcount=10000000: quantidade total de registros a carregar na instância MongoDB. Este teste carrega 10 milhões de registros.-
mongodb.url="mongodb://root:xxx@dds-bp1be0f4f3bbdxxxx.mongodb.rds.aliyuncs.com:3717,dds-bp1be0f4f3bbdxxxx.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-xxxx": string de conexão da instância MongoDB. Este teste conecta-se ao banco de dados admin usando a conta root.NotaEncontre a string de conexão na seção Database Connections da página Internal Connections no ApsaraDB for MongoDB console.
threads=300: número de threads simultâneas do cliente.
-
Execute o comando a seguir para realizar o teste de benchmark. O exemplo abaixo mostra o comando para uma carga de trabalho de 100% de atualizações:
./bin/ycsb run mongodb -s -p workload=site.ycsb.workloads.CoreWorkload -p recordcount=10000000 -p operationcount=500000000 -p insertproportion=0 -p readproportion=0 -p updateproportion=1 -p requestdistribution=zipfian -p mongodb.url="mongodb://root:xxx@dds-bp1be0f4f3bbdxxxx.mongodb.rds.aliyuncs.com:3717,dds-bp1be0f4f3bbdxxxx.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-xxxx" -threads 300 -target 100000Ajuste os seguintes parâmetros:
recordcount=10000000: total de registros carregados na instância MongoDB. Esse valor deve ser idêntico ao definido na Etapa 3.operationcount=500000000: quantidade total de operações de leitura e escrita a executar. Este teste realiza 500 milhões de operações.insertproportion=0: proporção de operações de inserção. O valor varia de 0 a 1, onde 1 representa 100%.readproportion=0: proporção de operações de leitura. O valor varia de 0 a 1.updateproportion=1: proporção de operações de atualização. O valor varia de 0 a 1.mongodb.url="mongodb://root:xxx@dds-bp1be0f4f3bbdxxxx.mongodb.rds.aliyuncs.com:3717,dds-bp1be0f4f3bbdxxxx.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-xxxx": string de conexão da instância MongoDB. Obtenha esse valor conforme descrito na etapa anterior.threads=300: número de threads simultâneas do cliente.target=100000: throughput alvo em operações por segundo (ops/s). A meta deste teste é 100.000 ops/s.
Resultados dos testes
Ambiente
|
Tipo de instância |
Versão do MongoDB |
recordcount |
threads |
|
64 vCPU, 512 GB (dedicada) |
MongoDB 6.0 (versão menor do kernel 7.0.23) |
10000000 |
300 |
Cenários de teste
insert:read:update=100:0:0: carga de trabalho pura de inserção. O log de auditoria está ativado para operações de inserção.insert:read:update=0:0:100: carga de trabalho pura de atualização. O log de auditoria está ativado para operações de atualização.insert:read:update=50:50:0: 50% de inserções e 50% de leituras. O log de auditoria está ativado para operações de inserção e consulta.insert:read:update=0:50:50: 50% de leituras e 50% de atualizações. O log de auditoria está ativado para operações de consulta e atualização.insert:read:update=30:70:0: 30% de inserções e 70% de leituras. O log de auditoria está ativado para operações de inserção e consulta.insert:read:update=0:70:30: 70% de leituras e 30% de atualizações. O log de auditoria está ativado para operações de consulta e atualização.
Métricas
CpuUsage: utilização de CPU da instância.MongoDB_RT: tempo médio de resposta da instância, incluindowrites_avg_rt(tempo médio de resposta de escrita) ereads_avg_rt(tempo médio de resposta de leitura).MongoDB_Opcounters: número de operações de consulta, inserção e atualização por segundo.
Resultados dos testes
A tabela a seguir resume como a ativação de logs de auditoria afeta o desempenho em cada cenário.
|
Cenário de teste |
CpuUsage |
MongoDB_RT |
MongoDB_Opcounters |
|
Inserção pura (100:0:0) |
Aumento de 3 pontos percentuais (+15%) |
Sem alteração significativa |
Sem alteração significativa |
|
Atualização pura (0:0:100) |
Aumento de 3 pontos percentuais (+20%) |
Sem alteração significativa |
Sem alteração significativa |
|
50% inserção + 50% leitura (50:50:0) |
Sem alteração significativa |
writes_avg_rt: +700 μs (+20%); reads_avg_rt: +300 μs (+250%) |
query: -5.000 (-20%); insert: -5.000 (-20%) |
|
50% leitura + 50% atualização (0:50:50) |
Sem alteração significativa |
writes_avg_rt: +500 μs (+18%); reads_avg_rt: +150 μs (+200%) |
query: -5.000 (-15%); update: -5.000 (-15%) |
|
30% inserção + 70% leitura (30:70:0) |
Sem alteração significativa |
writes_avg_rt: +600 μs (+20%); reads_avg_rt: +300 μs (+270%) |
query: -12.000 (-20%); insert: -5.000 (-20%) |
|
70% leitura + 30% atualização (0:70:30) |
Sem alteração significativa |
writes_avg_rt: +500 μs (+20%); reads_avg_rt: +150 μs (+150%) |
query: -10.000 (-15%); update: -5.000 (-15%) |
Análise
Cargas de trabalho somente de escrita: o uso de CPU aumenta ligeiramente, mas o tempo de resposta e o throughput permanecem estáveis.
Cargas de trabalho mistas de leitura e escrita: o uso de CPU permanece inalterado, porém o throughput geral cai entre 15% e 20%, e os tempos de resposta de leitura e escrita aumentam consideravelmente.
O aumento percentual de reads_avg_rt parece elevado (150% a 270%) porque a linha de base é baixa (aproximadamente 100 μs). O aumento absoluto é de apenas 150 a 300 μs.