O ApsaraDB for MongoDB oferece suporte a logs de auditoria. Testes de benchmark quantificam a sobrecarga de desempenho dessa ativação, o que ajuda a avaliar se convém ativar os logs de auditoria nas suas instâncias.
Conclusões dos testes
A ativação dos logs de auditoria afeta o desempenho da instância do ApsaraDB for MongoDB da seguinte forma:
Cargas de trabalho exclusivamente de escrita (operações puras de inserção ou atualização): o uso de CPU aumenta em 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 alteração significativa, mas o desempenho geral de leitura e escrita diminui em aproximadamente 15% a 20%. Especificamente, o tempo médio de resposta de escrita aumenta em 500 a 700 μs, e o de leitura aumenta em 150 a 300 μs, enquanto o throughput cai entre 15% e 20%.
Ambiente de teste
|
Parâmetro |
Instância ECS do teste de estresse |
Instância do MongoDB |
|
Região e zona |
China (Hangzhou) Zona J |
China (Hangzhou) Zona J |
|
Tipo de rede |
VPC |
VPC |
|
Família de tipos de instância |
Compute-optimized c8i |
dedicated |
|
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 secundária do kernel 7.0.23) |
|
Read/Write Concern |
- |
Read/Write Concern padrão |
A instância ECS do teste de estresse e a instância do ApsaraDB for MongoDB estão na mesma região e zona. O Round-Trip Time (RTT) entre elas é de aproximadamente 0.104 ms.
Ferramenta de teste
Os testes de benchmark utilizam a ferramenta de código aberto YCSB (Yahoo! Cloud Serving Benchmark) 0.17.0.
O YCSB é uma ferramenta de benchmark baseada em Java com suporte a vários bancos de dados. Para obter 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 mais instruções, consulte Modificar lista de permissões de IP.
NotaAcesse o console do ECS e encontre 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 mais instruções, consulte Conectar-se a uma instância ECS.
-
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 seguintes parâmetros conforme necessário:
recordcount=10000000: O número total de registros a carregar na instância do 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": A string de conexão da instância do MongoDB. Este teste conecta-se ao banco de dados admin com a conta root.NotaEncontre a string de conexão na seção Database Connections, na página Internal Connections do console do ApsaraDB for MongoDB.
threads=300: O número de threads simultâneas do cliente.
-
Execute o comando a seguir para o teste de benchmark. O exemplo abaixo mostra o comando para uma carga de trabalho de 100% de atualização:
./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: O número total de registros carregados na instância do MongoDB. Esse valor deve ser idêntico ao da Etapa 3.operationcount=500000000: O número total de operações de leitura e escrita a executar. Este teste executa 500 milhões de operações.insertproportion=0: A proporção de operações de inserção. O valor varia de 0 a 1, em que 1 representa 100%.readproportion=0: A proporção de operações de leitura. O valor varia de 0 a 1.updateproportion=1: A 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": A string de conexão da instância do MongoDB. Obtenha esse valor conforme descrito na etapa anterior.threads=300: O número de threads simultâneas do cliente.target=100000: O throughput alvo em operações por segundo (ops/sec). O alvo para este teste é de 100.000 ops/sec.
Resultados dos testes
Ambiente
|
Tipo de instância |
Versão do MongoDB |
recordcount |
threads |
|
64 vCPU, 512 GB (dedicated) |
MongoDB 6.0 (versão secundária do kernel 7.0.23) |
10000000 |
300 |
Cenários de teste
insert:read:update=100:0:0: Carga de trabalho de inserção pura. O log de auditoria registra operações de inserção.insert:read:update=0:0:100: Carga de trabalho de atualização pura. O log de auditoria registra operações de atualização.insert:read:update=50:50:0: 50% de inserções e 50% de leituras. O log de auditoria registra as 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 registra as 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 registra as 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 registra as operações de consulta e atualização.
Métricas
CpuUsage: A utilização de CPU da instância.MongoDB_RT: O tempo médio de resposta da instância. Incluiwrites_avg_rt(tempo médio de resposta de escrita) ereads_avg_rt(tempo médio de resposta de leitura).MongoDB_Opcounters: O número de operações de consulta, inserção e atualização por segundo.
Resultados dos testes
A tabela a seguir resume as alterações de desempenho após a ativação dos logs de auditoria 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% de inserção + 50% de 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% de leitura + 50% de 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% de inserção + 70% de 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% de leitura + 30% de 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 exclusivamente de escrita: o uso de CPU aumenta ligeiramente, mas o tempo de resposta e o throughput permanecem estáveis. A ativação de logs de auditoria em cenários exclusivamente de escrita gera sobrecarga mínima.
Cargas de trabalho mistas de leitura e escrita: o uso de CPU permanece inalterado, mas o throughput geral cai entre 15% e 20%, e os tempos de resposta de leitura e escrita aumentam visivelmente.
O aumento percentual de reads_avg_rt parece alto (150% a 270%) porque a linha de base é baixa (cerca de 100 μs). O aumento absoluto é de apenas 150 a 300 μs.