Escalabilidade em aplicações web
Escalabilidade é a capacidade de uma aplicação lidar com o crescimento em número de acesso, usuário e volume de informações sendo manipuladas sem afetar a experiência do usuário.
Se você pesquisar sobre escalabilidade em aplicação web provavelmente encontrará algo como: escalabilidade vertical e escalabilidade horizontal é poderá ficar se perguntando o que isso no primeiro momento. Calma, continue lendo que irei explicar o que sei sobre o assunto.
Escalabilidade vertical
Se trata de um tipo de escalabilidade onde você incrementa os recursos de hardware de uma máquina como: cpu, ram e disco para que seja possível manipular o alto crescimento em número de acesso, usuário e volume de informações.
A imagem abaixo descreve bem a escalabilidade vertical:
Incrementar os recursos de hardware da máquina é relativamente fácil quando vocè está usando IAAS(infraestrutura como serviço) com Aws, Azure e Digital ocean pois basta você acessar o painel de algumas desses serviços é alterar as configurações da máquina, em questão de minutos estará pronto.
Mas há pontos que devem ser observados como:
- Existe um limite de recursos de hardware que pode ser incrementado em um máquina.
- Se ocorrer algum problema na máquina ou no data center onde fica a máquina sua aplicação para de funcionar, pois não está lidando com tolerância a falha.
- Muita das vezes sua aplicação não precisa de todos os recursos de hardware que ela tem. Apenas em momentos de pico de acesso da aplicação. Com isso você acaba pagando por um recurso que está ocioso na maioria do tempo.
Escalabilidade horizontal
Se trata de um tipo de escalabilidade onde é incrementado o número de máquinas com a aplicação para que seja possível manipular o alto crescimento em número de acesso, usuário e volume de informações.
Há um item muito importante nesse tipo de escalabilidade que é o load balancer responsável por distribuir o acesso entre as máquinas.
A imagem abaixo descreve bem a escalabilidade horizontal:
Nesse caso basta apenas criar um máquina com aplicação é quando ela estiver pronta o load balancer começará a enviar requisições para ela.
Uma coisa muito interessante que nesse tipo de escalabilidade se você configurar suas máquinas em diferentes regiões você terá tolerância a falha, pois se uma máquina parar ou o data center em que está essa máquina de um tiver algum problema sua aplicação continua operando devido existir outras máquinas em diferentes regiões rodando.
Se estiver usando algum IAAS(infraestrutura como serviço) como Aws existe o autoscaling que é um serviço onde permite incrementar ou decrementar o número de máquinas automaticamente baseado em algumas configurações. Exemplo de cenário: quando o grupo de máquinas chegar a 80% de processamento o autoscaling cria mais duas máquinas, é quando o processando cair para 30% processamento remove duas máquinas.
Mas há pontos que devem ser observados como:
- Se sua aplicação utiliza autenticação por sessão você deve utilizar sticky session no seu load balancer para que a requisição do usuário autenticado seja enviado para o mesma máquina que ele se autenticou. Caso não seja feito, você terá problema em manter um usuário autenticado na sua aplicação.
- Se sua aplicação trabalhar com upload de arquivos é armazená os arquivos na máquina você terá problemas. Exemplo: você faz o upload de um arquivo na máquina 1, em uma próxima requisição o load balancer envia essa requisição para máquina 2 essa máquina não possui o arquivo que foi feito o upload. Então isso poderá gerar algum problema para você, recomendação utilize algum serviço de storage com S3 para não precisar lidar com esse problema.
Escalabilidade vertical ou horizontal qual é a melhor?
Se você tem um aplicação onde ela possui um número fixo de clientes é não irá crescer utilize escalabilidade vertical onde você criar um máquina que irá suportar a interação desses clientes. Caso sua você tenha certeza que aplicação irá receber um grande número de clientes é continuará crescendo o número de acesso utilize escalabilidade horizontal.
Mas se sua aplicação tem um número pequena é mesmo assim apresenta lentidão então recomendo você ler esse artigo:
Nesse artigo dou dicas sobre coisas que podem ser feita para melhorar a performance de uma aplicação.
Supervisor de produção/Qualidade/Certificação ISO/Industria 4.0
4 aParabéns, muito bom !!!!
Especialista Linux na LanLink Informática Ltda.
4 aMuito bom, Tiago. Tirando alguns errinhos de digitação que eu acho foram provocados pelo famigerado corretor automático é um boa introdução ao assunto. Parabéns.