A equipe de engenharia do Slack revelou a estratégia de teste de carga que se tornou uma parte crítica do pipeline de entrega contínua e sugere que este método promove uma maior participação dos engenheiros, já que esses profissionais (do Slack) afirmaram que tinham pouca experiência em testes de carga e conseguiram construí-la do zero usando o Go, além de usar uma abordagem metódica que oferece um roteiro para outros engenheiros que enfrentam desafios semelhantes.
O serviço Enterprise Key Management (EKM) foi projetado para permitir que os usuários usem as próprias chaves de criptografia/descriptografia de dados no Slack, incluindo dados de mensagens, portanto, havia uma preocupação real de que isso afetaria o desempenho. O teste de carga abordou esse risco, mas o transformou em um serviço com engenheiros capacitados em toda a organização para adotá-lo como parte das ferramentas padrão. O foco contínuo na simplicidade, escalabilidade e usabilidade ao testar o novo serviço de gerenciamento de chaves corporativas (EKM), revelou questões não relacionadas à mudança pretendida. Os engenheiros então, identificaram seis etapas-chave para a estratégia, resumidas a seguir:
- Identificar caminhos críticos de teste;
- Reunir dados de base (valores de referência);
- Criar ambientes de testes consistentes;
- Consolidar ferramentas de testes;
- Automatizar o provisionamento de máquinas;
- Simplificar o rastreamento e a análise de métricas.
A equipe criou e usou uma única ferramenta de interface de linha de comando que forneceu um controle refinado sobre a taxa e a concorrência de chamadas de API, bem como válvulas de segurança. Também utilizaram uma combinação de goroutines (threads virtuais leves) e canais (mecanismos de comunicação inter-goroutine) para alcançar a simultaneidade de carga. Isso permitiu que formas diferentes de carga fossem ajustadas e simuladas em qualquer API especificada. Tendo construído o serviço de teste de carga para o EKM, descobriram vários caminhos de código não relacionados que estavam gerando carga excessiva em outros sistemas ou estavam executando operações custosas e desnecessárias.
Um benefício importante veio da agregação de todas as ferramentas de teste de carga em um serviço para gerar e executar chamadas de API em um único local. Além disso, investiram na automação da toolchain para provisionar uma máquina configurada com dependências relevantes em menos de cinco minutos, apenas utilizando uma única linha de comando via prompt. Ao automatizar o fornecimento de novas máquinas de teste, rapidamente conseguiram acelerar e preencher um ambiente de teste e controle para que pudessem comparar os resultados com valores de referência. Aqui está a visão geral desse serviço:
Usando uma ferramenta de linha de comando para gerar e gerenciar o teste de carga no Slack (imagem tirada do Slack Blog)
O script do Slack "loadtest --bootstrap"
executou as seguintes etapas:
- Criou um servidor de desenvolvimento;
- Instalou a versão mais recente do conjunto de ferramentas Go;
- Configurou o PATH e o git;
- Clonou e instalou o repositório do loadtest e suas dependências;
- Executou um teste simples para confirmar se o ferramental está instalado corretamente.
A ferramenta de teste de carga executou chamadas para as APIs que, por sua vez, testaram toda a camada da rede de distribuição de conteúdo para o balanceador de carga, do HAProxy em diante, até a solicitação chegar ao seu host web. Também otimizaram ainda mais a criação de etapas básicas de remediação no script para que os engenheiros gastassem menos tempo na depuração manual de erros comuns.
Os provedores de serviços de nuvem, como AWS, GCS e Azure, permitem uma ampla variedade de ferramentas de teste de carga de código aberto. De acordo com Alexander Podelko, o Apache JMeter era a "ferramenta de teste de carga mais popular [de 2018]", tendo superado o MicroFocus Loadrunner. A matriz de ferramentas de código aberto está crescendo continuamente, no entanto, o GOAD com tecnologia AWS Lambda foi selecionado por alguns como tendo a interface e interação preferidas após seu showcase no Gopher Gala 2016. De acordo com a equipe do Slack, foi a criação de um serviço de teste de carga que reuniu todas as ferramentas do Slack que o tornou um dos "multiplicadores de força da produtividade do desenvolvedor" e resultou em melhorias de serviço não relacionadas.