quarta-feira, 10 de abril de 2013

Provando a estabilidade do seu software

Recentemente, passamos por um problemão aqui com as nossas aplicações. Houve uma mudança na arquitetura e falhamente não efetuamos testes de stress antes de subir a versão. É obvio que assim que o site começou a ter muitos acessos ele começou a cair. Resultado: tivemos que fazer rollback de tudo, e como foi uma mudança de arquitetura isso implicou em substituição de servidores, que embora sejam virtualizados, ainda não é rapida assim a sua substuição, deixando o site por algumas horas fora.
Isso gerou um grande stress para o negócio e sabemos claramente que houveram falhas tanto na área de dev como na área de infra. O importante é o que aprendemos com erros e o que fazemos para que eles não se repitam. Nesse caso fizemos um acerto com a infra, e ao invés de fazer várias mudanças na arquitetura fizemos apenas uma das alterações e aplicamos a versão para minimizar os locais de erro.
Após estudamos uma estratégia de testes de stress e junto com a equipe de Web Analitcs verificamos qual seria a quantidade de acessos simultâneos para testar a estabilidade. Como responsável pelos testes preparei scripts no Jmetter para testar isso, e após scripts e usuários configurados no Jmetter colocamos a rodar. Resultado: derrubamos os sites(em homologação é claro). Após vários ajustes de arquitetura, conseguimos estabilizar o ambiente e só com uma grande quantidade de acessos é que derrubamos o site, quantidade essa que não se replica em número de acessos em produção. Se você está pensando em verificar a estabilidade do seu software vamos as seguintes dicas:
1) Conheça bem a arquitetura do seu sistema, isso vai ajudar muito a você determinar o quanto seu teste é válido. Por exemplo aqui nós temos balanceamento e um stick, ou seja sempre que eu realizava testes com o Jmetter na minha máquina estava sobrecarregando somente um dos servers, pois quando eu caia no balancer ele reconhecia meu IP e me mandava sempre para o mesmo server. Para resolver isso forçamos junto com a infra que a minha máquina caisse em um servidor e a máquina de outro colega caisse em outro server, e dividimos as conexões.
2) Se você não é o gerenciador do ambiente, mantenha contato com eles para juntos avaliarem a melhor forma de stressar seu ambiente.
3) Escolha a ferramenta certa para testar seu software.
4) Estude a ferramente e como você irá conseguir tirar melhor proveito dela para seu teste.
5) Não esqueça de incluir este tempo na sua preparação do teste e que para que esse teste tenha sucesso, você deve garantir que os outros atributos de qualidade sejam garantidos:
 * Seu software precisa estar funcional!
* Seu software precisa ser confiavel!
 * Seu software precisa ser usável!
 * Seu software precisa ser eficaz!
* Seu software precisa ser manutenivel!
* Seu software precisa ser portável!
6) Use os principios da agilidade e sempre entregue valor ao seu cliente!
Quer saber mais sobre Jmetter? Acompanhe meu próximo post.

Nenhum comentário:

Postar um comentário