Scalability vs Elasticity
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
Na nuvem
On premisses
No Kubernetes
Com Nginx
Global 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.
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.
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
- https://aws.amazon.com/ec2/instance-types/
- https://docs.aws.amazon.com/pt_br/autoscaling/ec2/userguide/auto-scaling-groups.html
- https://www.ibm.com/blog/cloud-scalability-scale-up-vs-scale-out/
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á!!
|