Verifique se as instâncias de conjunto de réplicas do ApsaraDB for MongoDB com diferentes especificações conseguem atingir o número máximo de conexões. Para isso, execute testes de estresse a partir de uma instância ECS que acesse as instâncias do ApsaraDB for MongoDB na mesma VPC.
Ambiente de teste
Crie uma instância ECS e uma instância de conjunto de réplicas do ApsaraDB for MongoDB. Consulte Criar uma instância de conjunto de réplicas e Criar uma instância ECS.
A tabela a seguir lista as configurações das instâncias utilizadas neste teste.
|
Item de configuração |
Instância ECS |
Instância do ApsaraDB for MongoDB com discos em nuvem |
Instância do ApsaraDB for MongoDB com discos locais |
|
Região e zona |
Beijing Zone H |
Beijing Zone H |
Beijing Zone H |
|
Tipo de rede |
Virtual Private Cloud (VPC) |
VPC |
VPC |
|
Categoria da instância |
c6e, família de instâncias otimizadas para computação com desempenho aprimorado |
Uso geral e dedicada |
Uso geral e dedicada |
|
Tipo de instância |
ecs.c6e.2xlarge |
Três tipos de instância testados. Resultados do teste. |
Dois tipos de instância testados. Resultados do teste. |
|
Tipo de armazenamento |
Discos Enterprise SSD (ESSD) AutoPL |
ESSDs |
SSDs locais |
|
Imagem ou versão do mecanismo |
Alibaba Cloud Linux 3.2104 LTS 64 bits |
4.19.91-26.al7.x86_64 |
3.10.0-327.ali2017.alios7.x86_64 |
|
Versão do kernel |
N/D |
|
|
A instância do ApsaraDB for MongoDB utiliza uma arquitetura de três nós: primário, secundário e oculto.
As instâncias ECS e do ApsaraDB for MongoDB estão na mesma zona, com um RTT médio de 0.103 ms.
Ferramenta de teste
-
YCSB (Yahoo Cloud Serving Benchmark) 0.17.0.
NotaO YCSB é uma ferramenta de benchmark de banco de dados baseada em Java. Para instalação e uso, consulte YCSB no GitHub.
Um programa personalizado para teste de estresse de conexões. Consulte Informações adicionais sobre o teste de estresse para 96.000 conexões.
Método de teste
-
Adicione o primary private IP address da instância ECS a uma lista de permissões da instância do ApsaraDB for MongoDB. Para mais informações, consulte Modificar uma lista de permissões.
NotaAcesse o ECS console e visualize o Primary Private IP Address da instância ECS na seção Configuration Information da página Instance Details.
Conecte-se à instância ECS. Para mais informações, consulte Criar e gerenciar uma instância ECS usando o ECS console (versão express).
-
Utilize a ferramenta YCSB para carregar os dados de teste.
./bin/ycsb.sh load mongodb -s -p workload=site.ycsb.workloads.CoreWorkload -p recordcount=10000000 -p mongodb.url="mongodb://test:****@dds-bp13e84d11****.mongodb.rds.aliyuncs.com:3717/admin" -p table=test -threads 8Modifique as seguintes configurações:
recordcount=1000000: total de registros carregados na instância do ApsaraDB for MongoDB.
-
mongodb.url="mongodb://test:**@dds-bp13e84d11**.mongodb.rds.aliyuncs.com:3717/admin": string de conexão da instância do ApsaraDB for MongoDB. Conta:
test, banco de dados:admin.NotaAcesse o ApsaraDB for MongoDB console. Na página Database Connection, encontre a string de conexão na seção Internal Connections - VPC.
threads 8: número de threads de cliente simultâneas.
-
Execute o teste de estresse:
./bin/ycsb.sh run mongodb -s -p workload=site.ycsb.workloads.CoreWorkload -p recordcount=10000000 -p operationcount=5000000 -p readproportion=50 -p updateproportion=50 -p requestdistribution=zipfian -p mongodb.url="mongodb://test:****@dds-bp13e84d11****.mongodb.rds.aliyuncs.com:3717/admin&maxPoolSize=8000" -p table=test -threads 8000Modifique as seguintes configurações:
recordcount=1000000: total de registros carregados na instância do ApsaraDB for MongoDB.
operationcount=5000000: total de operações de leitura e gravação.
insertproportion=0: proporção de inserção.
readproportion=50: proporção de leitura.
updateproportion=50: proporção de atualização.
-
mongodb.url="mongodb://test:**@dds-bp13e84d11**.mongodb.rds.aliyuncs.com:3717/admin": string de conexão da instância do ApsaraDB for MongoDB. Conta:
test, banco de dados:admin.NotaAcesse o ApsaraDB for MongoDB console. Na página Database Connection, encontre a string de conexão na seção Internal Connections - VPC.
Especifique o parâmetro
maxPoolSize. Caso contrário, o valor padrão de 100 será aplicado, o que pode causar errosMongoWaitQueueFullExceptione impedir que o teste atinja o número máximo de conexões alvo.
-
Visualize os dados de monitoramento. Consulte Monitoramento de nó (anteriormente monitoramento básico).
Na aba Node Monitoring, selecione o intervalo de tempo do teste e visualize as métricas de CPU Utilization, Memory Usage, QPS, Connections e Connection Usage.
Informações adicionais sobre o teste de estresse para 96.000 conexões
O YCSB depende do Java. A memória heap da JVM é limitada, portanto, testes com mais de 20.000 threads simultâneas retornam o erro Cannot allocate memory.
Aumentar o JAVA_OPTS não resolve esse problema. Em vez disso, utilize um programa personalizado para teste de estresse: ele gera threads ciclicamente, e cada uma cria um MongoClient que executa uma consulta e mantém a conexão aberta sem liberá-la.
Um único cliente de teste de estresse possui portas limitadas e não consegue atingir 96.000 conexões (necessário para especificações de 32 núcleos e 128 GB). Execute o mesmo programa em várias máquinas.
Consulte o intervalo de portas atual:
sysctl net.ipv4.ip_local_port_range
Exemplo de saída:
net.ipv4.ip_local_port_range = 40000 65535
Expanda o intervalo de portas antes do teste:
sudo sysctl -w net.ipv4.ip_local_port_range="10240 65535"
Resultados do teste
Instância que utiliza ESSDs
Instância dedicada com 4 núcleos e 8 GB de memória
Número máximo de conexões: 8.000
|
QPS |
Conexões |
Utilização de conexão |
Utilização de CPU |
Uso de memória |
|
|
|
|
|
|
A granularidade de nível de minuto na aba Node Monitoring pode não exibir o pico de conexões. As conexões reais atingiram 8.000, o que pode ser verificado por meio de monitoramento granular ou do subdocumento connections na saída do serverStatus.
Instância dedicada com 32 núcleos e 128 GB de memória
Número máximo de conexões: 96.000
|
QPS |
Conexões |
Utilização de conexão |
Utilização de CPU |
Uso de memória |
|
|
|
|
|
|
O teste de 96.000 conexões utiliza uma ferramenta diferente dos testes de 8.000 e 16.000, portanto, as métricas de QPS, CPU e memória não são diretamente comparáveis.
Instância de uso geral com 8 núcleos e 32 GB de memória
Número máximo de conexões: 16.000
|
QPS |
Conexões |
Utilização de conexão |
Utilização de CPU |
Uso de memória |
|
|
|
|
|
|
Instâncias que utilizam discos locais
Instância de uso geral com 16 núcleos e 64 GB de memória
Número máximo de conexões: 32.000
|
QPS |
Conexões |
Utilização de conexão |
Utilização de CPU |
Uso de memória |
|
|
|
|
|
|
Com a granularidade de nível de minuto, alguns pontos de dados apresentam lacunas para a instância de 16 núcleos e 64 GB, pois os comandos de coleta expiraram com a CPU em 100%. As conexões reais nesses pontos permaneceram em 32.000.
Instância dedicada com 2 núcleos e 16 GB de memória
Número máximo de conexões: 8.000
|
QPS |
Conexões |
Utilização de conexão |
Utilização de CPU |
Uso de memória |
|
|
|
|
|
|
Resumo
As instâncias de conjunto de réplicas do ApsaraDB for MongoDB de todas as especificações e tipos de armazenamento testados atingiram o número máximo de conexões.
Após atingir o máximo, as conexões subsequentes são rejeitadas. As aplicações sofrem com alta latência ou solicitações travadas devido a falhas de conexão.
Mais conexões simultâneas consomem mais CPU e memória. Ajuste a quantidade de conexões com base nos requisitos do seu negócio.
























