Consulta SQL++ / N1QL

Teste de cargas de trabalho N1QL com o Apache JMeter

Um dos principais recursos que o Couchbase oferece para consultar dados JSON é uma linguagem N1QL. A N1QL permite que os usuários acessem e modifiquem o conteúdo de seus documentos JSON com instruções SQL familiares. Muitas vezes, durante a fase de desenvolvimento de um novo aplicativo, é necessário simular determinadas cargas de trabalho de produção para determinar se o novo aplicativo atenderia aos SLAs exigidos em termos de tempo de resposta e simultaneidade em um cenário de teste de estresse. Normalmente, a estrutura dos documentos JSON no bucket já está definida e as consultas N1QL de produção existentes são conhecidas antecipadamente. Como parte do benchmarking de um novo aplicativo, temos que definir as cargas de trabalho N1QL existentes e recém-adicionadas e, opcionalmente, parametrizá-las, depois executar essas cargas de trabalho com diferentes níveis de simultaneidade e medir o desempenho da consulta.

Neste artigo do blog, gostaria de falar sobre a ferramenta Apache JMeter, que pode ajudar nessa empreitada. Você também pode assistir ao vídeo dessa demonstração aqui.

Apache JMeter

O Apache JMeter é um aplicativo gratuito de código aberto baseado em Java, usado para projetar e executar testes de desempenho abrangentes de aplicativos da Web, bancos de dados, serviços da Web SOAP e REST, FTP, LDAP e servidores de e-mail, protocolos TCP e SMTP. O JMeter pode emular uma carga de trabalho pesada no servidor e ajudar a analisar o desempenho em diferentes cenários de teste. O JMeter vem com uma GUI que é usada para projetar e executar testes enquanto mede uma variedade de métricas de desempenho, como tempo de resposta médio, mínimo e máximo, desvio padrão, taxa de transferência etc. A adição de elementos do plano de teste (grupos de threads, listeners, samplers etc.) ao plano de teste pode ser feita facilmente clicando com o botão direito do mouse em um elemento na árvore e escolhendo um novo elemento na lista "adicionar". Um dos meus recursos favoritos fornecidos pelo JMeter é a capacidade de alterar facilmente o número de threads simultâneos que executam uma carga de trabalho específica. Depois que um cenário de teste tiver sido projetado no JMeter, ele poderá ser salvo no arquivo com a tag .jmx extensão. Para fazer testes de carga e obter os melhores resultados, é recomendável executar um cenário de teste já criado em um modo CLI sem GUI, fornecendo .jmx para o executável do JMeter.

Você pode saber muito mais sobre os recursos do JMeter baixando-o em https://jmeter.apache.org/ e leitura de tutoriais/documentação.

Configuração de um cenário de teste 

Para minha demonstração, tenho o JMeter e o servidor Couchbase em execução no meu Mac. Defini duas cargas de trabalho simples com instruções N1QL para o bucket "travel-sample". A primeira carga de trabalho, intitulada "Workload 1 - Read" (Carga de trabalho 1 - Leitura), executa 5 threads simultâneas em que cada thread seleciona aleatoriamente consultas N1QL de um conjunto de 10 consultas, conforme mostrado abaixo. Para o meu cenário de teste, planejo manter a taxa de destino de "Workload 1 - Read" durante 120 segundos.

Antes de executar o teste, uma conexão com o servidor Couchbase deve ser autenticada por meio do "HTTP Authorization Manager".

Para ilustrar a aplicação de parâmetros à cláusula WHERE, parametrizei a consulta "Select 3" com intervalos de IDs de país, baixo e alto. Esses parâmetros seriam extraídos do arquivo countries.dat. Você pode parametrizar as consultas N1QL por meio do elemento de teste "CSV Data Set Config", conforme mostrado abaixo.

Cada instrução N1QL é enviada ao Couchbase a partir do sampler "HTTP Request" por meio de um método POST.

A segunda carga de trabalho "Carga de trabalho 2 - CRUD" tem uma inserção simples, 3 seleções, operações de atualização e exclusão. O objetivo do teste é medir as características de desempenho da segunda carga de trabalho "Carga de trabalho 2 - CRUD" ao executá-la em nome de 1 thread fazendo 10 iterações autônomas (ou seja, sozinho no universo) e depois com a "Carga de trabalho 1 - Leitura" executada em paralelo. As consultas definidas para cada carga de trabalho têm complexidade e perfis de desempenho diferentes, com tempo de resposta variando de menos de um segundo a vários segundos, quando executadas individualmente.

Execução de testes e medição do desempenho 

Depois que o cenário de teste foi definido, tudo o que tive de fazer foi executar um teste do JMeter pressionando o botão verde Iniciar no menu superior ou fornecendo o arquivo .jmx ao script executável do jmeter. Para medir e visualizar os resultados de desempenho, adicionei vários ouvintes em "Workload 2 - CRUD". O ouvinte "Summary Report" fornece estatísticas resumidas do teste e de cada instrução N1QL individual. "View Results Tree" pode ser usado para fins de depuração para verificar o status, a solicitação e os dados de resposta de cada amostra. Há muitos outros ouvintes disponíveis no JMeter. Os resultados de desempenho da "Carga de trabalho 2 - CRUD" quando executada de forma autônoma são apresentados abaixo com tempos de resposta medidos em milissegundos. Observe que a primeira carga de trabalho "Workload 1 -Read" foi desativada durante essa execução. Você pode desativar facilmente determinadas partes do seu plano de teste clicando com o botão direito do mouse no elemento de teste e escolhendo a opção "Disable" (Desativar).

Durante a execução seguinte, ambas as cargas de trabalho estavam ativas e notei imediatamente a diferença no tempo de resposta, especialmente em uma consulta "Select with Join" mais complexa, com um tempo médio decorrido que saltou de 600 ms para quase 2,6 s. Obviamente, a CPU estava no máximo quando vários threads estavam em execução no meu Mac, portanto, esses números são fornecidos apenas para fins ilustrativos.

Os resultados do teste também podem ser visualizados com o listener "Response Time Graph", conforme mostrado abaixo. O tempo decorrido da consulta "Select with Join", representado pela linha amarela, diminuiu após a conclusão da primeira carga de trabalho.

Em conclusão

O JMeter não é a única ferramenta disponível para executar testes de estresse e avaliar o desempenho. O Couchbase fornece algumas outras ferramentas cbc-pillowfight e cbc-n1qlback para testar o desempenho de operações de chave/valor e instruções N1QL. YCSB é outra ferramenta de benchmarking que pode ser usada para testar vários bancos de dados NoSQL. Você pode encontrar vários artigos sobre YCSB e YCSB-JSON na página de blogs do Couchbase.

 

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Autor

Postado por Pavel Novokshonov, engenheiro sênior de soluções, Couchbase

Pavel é engenheiro de soluções sênior da Couchbase. Anteriormente, ele trabalhou na Teradata Corporation, Harrahs Entertainment e NCR em diferentes funções, incluindo gerenciamento de banco de dados, consultoria, engenharia de desempenho e pré-vendas técnicas.

2 Comentários

  1. Existe um driver do couchbase para o jmeter?

    1. Pavel Novokshonov, engenheiro sênior de soluções, Couchbase dezembro 7, 2020 em 1:03 pm

      Há um driver JDBC do Couchbase (fornecido pela CData) que você pode usar com o JMeter, mas nunca o testei.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.