# Plano de ação - Teste de carga Este documento visa esclarecer o procedimento para realização do teste de carga no Flash :zap::rocket:. ## TOC - [Introdução](#Introdução) - [Objetivo](#Objetivo) - [Entidades](#Entidades) - [Entidade de infraestrutura](#Entidade-de-infraestrutura) - [Entidade de operação](#Entidade-de-operação) - [Cargas de teste](#Cargas-de-teste) - [Primeira carga](#Primeira-carga) - [Segunda carga](#Segunda-carga) - [Terceira carga](#Terceira-carga) - [Quarta carga](#Quarta-carga) - [Síntese dos resultados](#Síntese-dos-resultados) ### Introdução Ao liberarmos o Flash para produção, nos deparamos com mais de 20 milhões de eventos por semana. Isto pode assustar um pouco de início, mas existe um ponto positivo neste acontecimento, pois tivemos um resultado muito satisfatório e conseguimos validar e estressar o serviço de notificações pelo **lado do servidor** sem escalonamento automático, com baixo uso de CPU e memória. Porém, ainda não conseguimos validar pelo **lado do cliente**. Mas como validaríamos o **lado do cliente**? Para isso, precisaríamos de clientes utilizando o aplicativo mobile para gerar conexões no Flash, e assim, observar o comportamento de sua infraestrutura. Obviamente, precisamos fazer isso antes de liberar para todos os clientes, já que é necessário evitar possíveis problemas e insatisfações com os clientes. Uma possível solução, é realizar o teste de carga, onde geramos conexões automáticas e programadas. Por fim, a estrutura do nosso Flash já está receptível para o teste de carga. E com isso, chegou a hora de estressarmos o mesmo no ambiente de produção. ### Objetivo Estressar e validar o serviço de notificações utilizando o teste de carga, gerando conexões programadas de 1.000 até 25.000. Colher as informações neste período de estresse e sintetizar em resultados ou melhorias. ### Entidades Para esclarecer o papel de cada entidade que participará deste teste e termos o maior aproveitamento possível, segue a descrição de cada uma. #### Entidade de infraestrutura Será responsável por monitorar os logs, métricas e exceções durante a realização de cada carga de teste tomando nota do comportamento observado, positivou ou não, para gerar resultados ou melhorias. #### Entidade de operação Será responsável por utilizar tanto o painel, quanto o aplicativo mobile, observando se está ocorrendo algum comportamento fora do esperado, como: lentidão na chegada dos eventos para o aplicativo mobile, ausência da chegada dos eventos, entre outros. ### Cargas de teste Uma carga de teste, basicamente, é a realização do procedimento de geração de conexões para as entidades envolvidas colherem as informações comportamentais do ecossistema testado. Realizaremos 4 cargas de teste, são elas: 1. 1.000 conexões simultâneas; 2. 5.000 conexões simultâneas; 3. 15.000 conexões simultâneas; 4. 25.000 conexões simultâneas. #### Primeira carga 1.000 conexões simultâneas mais as das entidades operacionais. ###### Ricardo ```shell= node bin/websocket-bench -a 500 -c 5 -t primus -p websockets -v -k -w 1 ws://localhost:3333 ``` ###### Philippe ```shell= node bin/websocket-bench -a 500 -c 5 -t primus -p websockets -v -k -w 1 ws://localhost:3333 ``` #### Segunda carga 5.000 conexões simultâneas mais as das entidades operacionais. ###### Ricardo ```shell= node bin/websocket-bench -a 2500 -c 11 -t primus -p websockets -v -k -w 1 ws://localhost:3333 ``` ###### Philippe ```shell= node bin/websocket-bench -a 2500 -c 11 -t primus -p websockets -v -k -w 1 ws://localhost:3333 ``` #### Terceira carga 15.000 conexões simultâneas mais as das entidades operacionais. ###### Ricardo ```shell= node bin/websocket-bench -a 7500 -c 32 -t primus -p websockets -v -k -w 1 ws://localhost:3333 ``` ###### Philippe ```shell= node bin/websocket-bench -a 7500 -c 32 -t primus -p websockets -v -k -w 1 ws://localhost:3333 ``` #### Quarta carga 25.000 conexões simultâneas mais as das entidades operacionais. ###### Ricardo ```shell= node bin/websocket-bench -a 12500 -c 53 -t primus -p websockets -v -k -w 1 ws://localhost:3333 ``` ###### Philippe ```shell= node bin/websocket-bench -a 12500 -c 53 -t primus -p websockets -v -k -w 1 ws://localhost:3333 ``` Ao término de cada geração de carga, **as entidades terão 15 minutos para colherem as informações**. ***OBS: Concentrem-se em colher apenas as informações durante cada teste de carga, porque ocorrerá o momento certo de passar o feedbacks comportamentais.*** ### Síntese dos resultados Após o término das 4 cargas de teste, iremos conversar sobre as informações comportamentais coletadas. Para assim, gerar os resultados e possíveis melhorias, se for o caso.