Diferença de performance de uma aplicação com cenários idênticos

MySQL

PHP

30/07/2018

Neste fim de semana fizemos deploy de uma aplicação com base no framework Magento, que foi exaustivamente testada em vários cenários, com alta carga de usuários fazendo várias requisições ao banco de dados, como consultas, atualizações e inserções, todo o percurso dos clientes finais foi simulado.

Nos testes as configurações eram idênticas as que estavam na hora do deploy, a única diferença era o subdomínio, que estavamos usando um de homologação e depois apontamos para o www, e para nossa surpresa a aplicação ficou totalmente instável, apresentando erros de banco de dados, na verdade apenas um erro:

MySQL error 2006: mysql server has gone away

Este erro ocorreu em diversas tabelas, e na aplicação de testes não ocorreu nem uma vez, com 50 usuários simultâneos fazendo compras, e na hora do deploy estavamos com 20 usuários (segundo o analytics).

A configuração da infra é:

- 2 Web servers
- 1 File server
- RDS
- Servidor para Redis

A pergunta é: Como é possível que em casos idênticos de configuração a aplicação se comportou tão diferente? o subdomínio tem alguma influência nisto?

Obs: se precisarem de mais detalhes, favor solicitar

Obrigado
Matheus

Matheus

Curtidas 0

Respostas

Carlos Augusto

Carlos Augusto

30/07/2018

Não tem nada relacionado o subdominio.

Olhando a documentação oficial, de fato parece que houve um consumo excessivo do banco de dados.
Perguntas:
Você possui duas infras ? Uma de teste e uma de produção replicadas ?
-se não possui os testes poderiam ter engarrafado o banco e quando você virou a chave pra produção já era tarde.
-sua aplicação permite upload ? Portanto você poderia estar recebendo arquivos grandes dos clientes que não passou no seu testes.
-Os logs da aplicação e do banco dizem algo mais específico ? Algum memória no máximo da máquina, ou erro excesso de threads.

Você poderia colocar um cache meio do caminho para os dados que não alterão tanto.
Ou colocar um banco de dados para leitura e outros dois para escrita e interligando eles (o de escrita replica para o de leitura) assim você não teria problemas de leitura e a aplicação não quebraria.



Referencias:
https://dev.mysql.com/doc/refman/8.0/en/gone-away.html
https://matomo.org/faq/troubleshooting/faq_183/
GOSTEI 0
POSTAR