Scalability vs Elasticity

Image: Infra as Code

O trabalho de uma pessoa na área de Sysadmin, (simmm sysadmin), DevOps e SRE é fazer infraestruturas e produtos digitais funcionarem perfeitamente, mesmo quando milhares de pessoas acessam ao mesmo tempo. O modelo de pensamento deve sempre ser: fazer um build mais rápido, testar mais rápido, fazer um deploy mais rápido, e além disso é fundamental pensarmos que as infraestruturas tenham as capacidades de Escalabilidade e Elasticidade. Mas Léo, eu nunca ouvi falar sobre isso, ahhh!! meu jovem… este post é justamente para explicar alguns conceitos que são importante serem conhecidos, pois no seu dia a dia, você vai precisar perguntar, entender, explicar, defender e criticar posições técnicas baseados nos conceitos de Escalabilidade e Elasticidade, vamos lá conhecer alguns deles!!!

O que é Escalabilidade?

Imagine que você está construindo uma aplicação web ou um App. No começo, ela é pequena e atende perfeitamente a sua audiência e quantidade de usuários. Mas com o tempo, seu App cresce, conquista mais usuários, aí você precisa fazer ajustes, colocar mais capacidades aqui, fazer outros ajustes ali. A Escalabilidade é a capacidade de uma infraestrutura de crescer seus componentes de forma gradual para atender à demandas cada vez maior, a Escalabilidade se divide em duas:

Escalabilidade horizontal

A escalabilidade horizontal, ou do inglês scale-out, no contexto de arquitetura, se refere à capacidade de um sistema de lidar com um aumento de carga adicionando mais recursos. Aumentar o número de servidores para dividir a carga de um trabalho é uma das estratégias, essa divisão da carga pode ser por critérios de uma divisão simples, ou critério de região de origem, por modelos de interação (Leitura, Escrita) com o sistema e replicação de dados são estratégias válidas a serem pesadas.

Ao adicionar mais servidores, o sistema pode lidar com um volume muito maior de requisições. Quando se adiciona mais servidores, aumenta-se também a resiliência do seu ambiente pois seu ocorre uma falha com um dos servidores o impacto no sistema é bem menor.

Load Balancing

Para aplicar as técnicas de escalabilidade horizontal existem diversas formas, isso depende muito do tipo de infraestrutura. O mecanismo mais comum é ter um componente recebe a requisição e repassa para outros componentes processar. O componente recebe a requisição chama-se de Load Balancing e os componentes que recebem as requisições chamamos de instâncias, servidores, Pods, VMs a nomenclatura muda dependendo da arquitetura mas a função é a mesma, veja algumas variações a seguir:

Arquitetura básica

Image: Infra as Code

Na nuvem

Image: Infra as Code

On premisses

Image: Infra as Code

No Kubernetes

Image: Infra as Code

Com Nginx

Image: https://docs.nginx.com/nginx/deployment-guides/google-cloud-platform/high-availability-all-active/

Global Load Balancing

Image: https://avinetworks.com/glossary/geographic-load-balancing/

Ao observar esses diagramas, é possível perceber que algumas nomenclaturas mudam, a arquitetura muda, a configuração com certeza muda também, em alguns casos até a região de atuação muda, mas percebam que as funções são bem semelhantes.

Escalabilidade Vertical

A escalabilidade vertical ou do inglês scale-up, se refere à capacidade de melhorar o desempenho de um sistema ao aumentar uma das capacidades de um dos componentes, adicionando mais CPU, RAM ou espaço de armazenamento.

Aumentar a capacidade de um componente é uma estratégia válida e mais fácil de implementar do que a escalabilidade horizontal, pois em geral envolve trocar um ou dois parâmetros de configuração e zero mudança do lado da aplicação. Entretanto, é importante lembrar que existem limites físicos dos componentes, se for o caso de uma infraestrutura na nuvem o custo $$ pode ser bem alto e às vezes por características da aplicação o aumento de CPU e memória pode não surtir nenhum efeito.

Image: Infra as Code

Estratégias de elasticidade não depende somente de mecanismos de infraestrutura, é uma combinação com as equipes de desenvolvimento e arquitetura, pois o autoscaling está diretamente ligado ao funcionamento da aplicação e de como ela lida com expansões e reduções automáticos.

O que é Elasticidade?

A elasticidade, por sua vez, é a capacidade de um sistema de se adaptar automaticamente à demanda em tempo real. É como ter uma arquitetura que se ajusta sozinha ao tamanho da sua demanda, crescendo ou diminuindo conforme necessário. Como isso funciona?

Aumento automático da capacidade, quando a demanda aumenta, o sistema adiciona automaticamente mais recursos para atender às necessidades. Redução automática da capacidade, quando a demanda diminui, o sistema tem a capacidade de remover os recursos para otimizar os custos. Na AWS e na Azure se consegue isso configurando sua infraestrutura para trabalhar com mecanismos chamados de Grupos do Auto Scaling.

Em uma explicação simplificada, funciona assim: Escolhe-se uma métrica do sistema para funcionar como gatilho de acionamento do auto crescimento, digamos que seja o consumo médio de CPU (existem outras métricas mas vamos escolher essa). Quando sua aplicação chegar a um certo nível de consumo de CPU, por exemplo 50%, dispara auto scaling, e executa uma ação programada e cria-se X réplicas de um determinado componente. Um mecanismo semelhante que é usado para aumentar o número de máquinas é preciso criar um outro para reduzir. Essa é uma parte que é preciso ter cuidado pois reduzir o tamanho de uma infraestrutura pode gerar indisponibilidade se não tiver bem ajustado.

Image: Infra as Code

Estratégias de elasticidade não depende somente de mecanismos de infraestrutura, é combinação com as equipes de desenvolvimento e com o sistemas de monitoração pois o autoscaling além de estar diretamente ligado ao funcionamento da aplicação e de como ela lida com expansões e reduções automáticos.

Qual a Diferença entre Escalabilidade e Elasticidade?

Escalabilidade é a capacidade de crescer, enquanto a elasticidade é a capacidade de se adaptar. A Escalabilidade tem o foco no planejamento de longo prazo, enquanto a elasticidade é uma resposta rápida às mudanças na demanda de um determinado período ou evento.

Conclusão

Como eu disse lá no início, o nosso trabalho é fazer infraestruturas, aplicações web e Apps funcionarem bem, pensar em sistemas escaláveis e elásticos que garantam que seus usuários tenham acesso rápido e eficiente aos serviços, independentemente da carga ou período do ano, isso é pensar em uma melhor experiência do usuário. Do ponto de vista dos custos, ao utilizar recursos apenas quando necessário, você otimiza seus gastos com infraestrutura, e por fim, sistemas mais resilientes são menos propensos a falhas e garantem a continuidade do negócio e fazendo com que os clientes se sintam confiantes a voltarem a utilizar o seus serviços.

Abraços!

Vida longa e próspera a todos!!

Referências

MENTORIA

Curtiu o blog? Quer trocar uma ideia comigo sobre algum post?

Marca Aqui! É um papo gratuito oferecido para quem é leitor do blog, podemos falar de temas como: DevOps, SRE e carreira em TI.


Te convido a ver os outros posts do blog Infra-as-Code garanto que tem coisas legais lá!!


--- --- IMPORTANTE --- ---
As opiniões aqui expressas são pessoais e de responsabilidade única e exclusiva do autor, elas não refletem necessariamente a posição das empresas que eu trabalho(ei) e/ou presto(ei) serviço.