Benchmarks abertos para teste de carga de servidores e aplicativos da web

Esta é uma coleção de utilitários com base nas recomendações dos residentes do Hacker News e GitHub. A lista inclui: Locust, Vegeta, Slow_cooker, k6 e Siege. Eles são usados ​​por engenheiros da DICE, EA e Buoyant, além de desenvolvedores do Kubernetes e Load Impact. Vamos falar sobre essas ferramentas.


Fotos - Victor Freitas - Unsplash

Locust.io


Ferramenta para sites de teste de estresse. Todos os scripts são escritos em Python. Uma interface da web especial criada no Flask permite monitorar os resultados em tempo real. Os autores da Locust são engenheiros suíços, entre os quais funcionários das empresas DICE e EA envolvidas no desenvolvimento e publicação de jogos de computador.

A ferramenta é baseada em um conceito interessante: Gafanhotos ("gafanhotos") emulam o comportamento de um enxame de insetos (usuários virtuais), "atacando" o site durante o teste. As solicitações são formadas usando uma biblioteca de rede para organizar a computação paralela - evento . Aqui está um exemplo de um teste simples, fornecido no site oficial do projeto:

from locust import HttpLocust, TaskSet, task class WebsiteTasks(TaskSet): def on_start(self): self.client.post("/login", { "username": "test_user", "password": "" }) @task def index(self): self.client.get("/") @task def about(self): self.client.get("/about/") class WebsiteUser(HttpLocust): task_set = WebsiteTasks min_wait = 5000 max_wait = 15000 

Locust usa a biblioteca de solicitações. Esse complemento para ferramentas Python padrão simplifica o trabalho com HTTP e SSL e torna o código mais visual. A propósito, a documentação de solicitações pode ser usada como uma folha de dicas para testes de depuração no Locust.

Esta ferramenta de teste de estresse existe há mais de sete anos. Durante esse período, uma extensa comunidade se formou em torno dela - no GitHub, mais de 10 mil estrelas . Locust foi usado na avaliação do desempenho da rede Battlelog para a série de jogos Battlefield. Armin Ronacher, autor do framework Flask, falou positivamente sobre a ferramenta.

Entre as desvantagens do Locust , há um desempenho bastante baixo e erros periódicos na estimativa do tempo de resposta dos sites. A ferramenta também não sabe como criar gráficos, mas o problema é resolvido carregando os resultados na forma de arquivos CSV e renderizando gráficos no editor de tabelas.

Se quiser conhecer o Locust mais de perto, preste atenção na documentação da ferramenta. Você também pode recomendar uma performance de Alexei Romanov da Wargaming no Python Meetup. Ele fala sobre como escrever scripts que imitam o comportamento do usuário.

Vegetablea


Utilitário de linha de comando Go para testar serviços HTTP escritos em Go. Ele pode ser conectado como uma biblioteca para criar suas próprias ferramentas de teste de carga. O Vegeta foi desenvolvido por um dos autores da plataforma Sourcegraph de código aberto, um mecanismo para revisar e navegar no código-fonte usado pela Lyft, Uber e Yelp.

O Vegeta avalia as capacidades dos recursos da rede, "bombardeando" seus pedidos com uma frequência definida. Por exemplo, para verificar localhost, basta digitar o seguinte comando:

 echo "GET http://localhost/" | vegeta attack -duration=5s | tee results.bin | vegeta report 

Por padrão, o Vegeta trabalha com o fluxo de leitura de comandos padrão (stdin), para que o recurso para teste seja transmitido por eco. O parâmetro duration indica a duração do teste. O relatório será gerado no arquivo results.bin. Vegeta gera relatórios em formato de texto, mas é capaz de desenhar gráficos . Você pode gerá-los com o seguinte comando:

 vegeta plot -title=Results results.bin > results-plot.html 

Uma grande comunidade se formou em torno do Vegeta - 12 mil estrelas no GitHub . A ferramenta foi usada até pelos desenvolvedores do Kubernetes para avaliar o desempenho de sua plataforma - então o Vegeta gerou cerca de 10 milhões de solicitações por segundo para um cluster de milhares de nós.

A documentação que descreve todas as funções e sinalizadores para os testes Vegeta está no repositório no GitHub . Você também pode encontrar arquivos executáveis ​​pré-compilados lá.

Slow_cooker


Esta é uma ferramenta de teste de carga de servidor, escrita em Go. Foi desenvolvido por engenheiros da Buoyant, que cria uma rede de serviços para o Kubernetes - Linkerd. Faz parte da Cloud Native Computing Foundation e é considerado um concorrente do Google Istio .


Fotos - Joshua Aragon - Unsplash

Geralmente, os utilitários para teste de carga verificam os recursos do servidor, enviando o maior número possível de solicitações em um curto espaço de tempo. Os autores do slow_cooker dizem que sua ferramenta permite avaliar o trabalho do ferro sob uma carga previsível por um longo tempo.

Especialistas dinâmicos usam seu desenvolvimento para testar o Linkerd e outros serviços, como o nginx. O instrumento é bem jovem - ele tem cerca de três anos - então até ter uma grande comunidade. Mas a situação pode mudar no futuro, por exemplo, seu repositório já foi bifurcado no Skysanner, um serviço internacional de busca de passagens aéreas.

Você pode encontrar o código fonte no GitHub .

k6


Uma ferramenta para testes de carga e regressão de microsserviços, contêineres e sites hospedados na nuvem. Está escrito em Go e por desenvolvedores JavaScript do Load Impact - este é um aplicativo para testar a "persistência" dos sites.

O trabalho com o k6 é baseado no modelo tudo como código, quando a lógica de teste e todas as configurações são escritas em JavaScript. Nos scripts, etapas individuais podem ser agrupadas, o que pode ser conveniente para quem está acostumado a seguir os princípios do BDD. Aqui está um exemplo desse grupo:

 import { group } from "k6"; export default function() { group("user flow: returning user", function() { group("visit homepage", function() { // load homepage resources }); group("login", function() { // perform login }); }); }; 

A ferramenta também permite gravar scripts e criar gráficos - a última função é implementada no InfluxDB e no Grafana. E possui integrações com sistemas de CI como Jenkins, Circle CI, Team City e GitLab.

Os usuários dizem que o k6 não consome muitos recursos e possui uma API conveniente. Mas existem várias desvantagens, em particular, o k6 não suporta websocket e não sabe como realizar testes em sistemas distribuídos. Embora os desenvolvedores do k6 no tópico temático do Hacker News tenham dito que esses recursos aparecerão no futuro.

Se você quiser se familiarizar com os recursos do k6, os residentes da HN recomendam começar com a documentação técnica - é detalhada e com exemplos. Se você tiver alguma dúvida, entre em contato com o fórum oficial .

Cerco


O Siege permite carregar servidores Web de teste. O utilitário foi criado pelo engenheiro Jeff Fulmer (Jeff Fulmer), para que os desenvolvedores possam verificar o consumo de recursos de seu código em condições próximas ao combate. O Siege emula um fluxo contínuo de acesso ao site de muitos usuários, como se estivesse mantendo o servidor "sitiado" - daí o nome da ferramenta.

Após o teste, o utilitário mostra: o tempo de varredura, o número de transações por segundo, a taxa de transferência, o número de solicitações com e sem êxito, bem como o número com um código de resposta 200. Aqui está um exemplo de relatório gerado pelo Siege.

O cerco é bastante difundido na comunidade de TI. Por exemplo, uma seção inteira do livro " NGINX High Performance " é dedicada ao teste de carga com sua ajuda. Também é usado por alguns provedores de nuvem.

Entre as desvantagens de Siege, é possível distinguir métodos não-padrão e sintaxe não óbvia para calcular parâmetros de teste - por exemplo, redirecionamentos são considerados transações bem-sucedidas, portanto, seu número pode exceder o número total de solicitações. Se você quiser experimentar o Siege na prática, estude o manual on - line - existem algumas "esquisitices" do sistema.

Leitura adicional no blog 1cloud.ru:

Novidades do kernel 5.3 do Linux - Drivers gráficos, virtualização e outras atualizações
Por que os principais desenvolvedores de navegadores se recusaram novamente a exibir o subdomínio
Por que a Apple mudou os requisitos para desenvolvedores de aplicativos

Source: https://habr.com/ru/post/pt474474/


All Articles