O documento discute os principais pontos para realizar planejamento de capacidade para ambientes distribuídos, incluindo determinar objetivos, arquitetura do sistema, aquisição de hardware, escalabilidade horizontal e vertical, uso de cálculos aproximados e a diferença entre capacidade e performance. A medição contínua de dados é essencial para garantir que o planejamento esteja alinhado com as necessidades em evolução.
Lei geral de proteção de dados por Kleber Silva e Ricardo Navarro (Pise4)
Capacity Planning para Ambiente Distribuído, por Marcelo Otto
1. Capacity Planning para Ambiente Distribuído
Resumo da apresentação
Determinado os Objetivos
Não é possível começar a fazer a mistura de concreto antes de saber o que se
está construindo. Da mesma forma não se deve começar o planejamento de capacidade
antes de determinar as necessidades da aplicação, sistema ou site.
O planejamento de capacidade envolve uma série de pressupostos relacionados
às razões pelas quais se precisa da mesma, onde algumas destas suposições são óbvias,
outras não. Por exemplo: se não é conhecido quais técnicas utilizar para que páginas
web carreguem em menos de três segundos, haverá muita dificuldade em determinar
quantos servidores serão necessários para atender esse requisito. Também será ainda
mais difícil determinar quantos servidores serão necessários adicionar devido a um
possível crescimento do tráfego.
Pode-se dizer então que talvez devamos apelar ao senso comum, contudo, é
curioso como muitas organizações não têm criada uma lista de requisitos operacionais
rudimentares. Esperar até que os usuários percebam respostas lentas ou tempo limite
inadequado não é uma boa estratégia.
Arquitetura do Sistema
O estilo de dirigir afeta o consumo de combustível de um carro. Um princípio
similar pode ser aplicado para a arquitetura do ambiente. O correto desenho da
arquitetura e escolhas adequadas aos projetos tem efeito maior sobre a eficiência no uso
de capacidade do que qualquer sintonia e refinamento dos servidores. O correto
dimensionamento em tempo de projeto pode ser mais vantajoso e menos trabalhoso do
que ajustes pós-implantação.
Aquisição de Hardware
A escolha do hardware certo para cada componente da arquitetura pode afetar de
maneira fundamental os custos envolvidos. Quando o assunto são servidores,
independente da plataforma de sistema operacional será necessário ter uma idéia básica
(adquirida de medição e padrões de uso) de como deverá ser utilizado o investimento
financeiro.
Antes de pesquisar atentamente os preços dos fornecedores de hardware, deve-se
estar ciente do que se está tentando alcançar, qual é o escopo do projeto e qual máquina
atenderá suas necessidades, porém sem faltar e nem sobrar, deve haver equilíbrio pleno
para garantia da eficiência. Este servidor será obrigado a fazer um intenso trabalho da
CPU? Será que vai precisar de uma grande quantidade de memória para realizar o
trabalho? Deve ser escolhido o hardware correto de acordo com que o projeto exige e
2. considerando altos padrões de eficiência! Não há, por exemplo, necessidade de adquirir
um processador top de linha se o projeto mesmo após crescimento vegetativo não vier a
utilizar a capacidade oferecida, assim como não é eficiente adquirir um servidor com
grande capacidade em outros tipos de recursos que não venham a ser utilizados. A
garantia do correto equilíbrio entre as necessidades dos projetos e os recursos
disponibilizados é fundamental!
Escalabilidade Vertical e Horizontal
Ser capaz de escalar horizontalmente significa ter uma arquitetura que permite a
adição de capacidade com a simples adição de itens similares de hardware na infra-
estrutura existente. Por exemplo, um segundo servidor web para compartilhar a carga de
visitantes ao site. Ser capaz de escalar verticalmente é a capacidade de aumentar os
recursos internamente em um servidor, como CPUs, GPUs, memória, discos, placas de
rede, etc.
A escala horizontal é amplamente reconhecida por suas vantagens em relação à
escala vertical, principalmente no que se refere à aplicações web e infra-estrutura em
nuvem, como ambientes virtualizados que podem receber vários servidores “lado a
lado”, onde mesmo estes servidores sendo de diferentes configurações é possível seu
crescimento horizontal para prover maior capacidade para a nuvem. Ser capaz de
escalar horizontalmente significa projetar seu aplicativo e/ou infra-estrutura para lidar
com vários níveis de abstração de dados e distribuição.
Para escala vertical há o perigo de depender continuamente da mesma na
aplicação ou infraestrutura envolvida, significa estar sempre atualizando os
componentes de um único computador e atrelar as necessidades de incremento de
capacidade às possibilidades de upgrade do mesmo, sendo que com isto os custos e os
riscos podem aumentar drasticamente, além de com isto cria-se o risco de ter um único
ponto de falha que comprometa todo o sistema, ou seja, a adoção de escala horizontal
traz ainda benefícios em termos de disponibilidade.
Porém, a escolha de qual tipo de escalabilidade será adotada deve sempre levar
em consideração se a arquitetura do projeto a suporta.
Matemática rápida
Disciplinas de engenharia também utilizam cálculos aproximados, ou seja, nem
sempre existem fórmulas que retornarão resultados de previsibilidade exatos. Isso já é
muito mais do que um palpite ou mera especulação, porém ainda é menos que um
cálculo exato de matemática. Este reconhecido método também pode ser utilizado para
calcular a capacidade computacional de um ambiente, onde muitas vezes não é possível
determinar valores absolutos, porém é possível determinar aproximações bastante
confiáveis.
As equipes de gerenciamento de capacidade procuram fazer julgamentos e
previsões sobre uma paisagem em rápida mutação em um ambiente quase que
“orgânico”, diante disto aproximações serão necessárias e é importante perceber o que
isso significa em termos de limitações no processo. Estar consciente de quando um
detalhe é necessário e quando é dispensável pode ser crucial para os orçamentos e os
modelos de previsão de custos. Detalhes desnecessários significam tempo perdido,
porém a falta de um detalhe importante pode ser fatal.
3. Capacity e Performance são Coisas Diferentes
A relação entre “Performance/Tuning” e “Capacity Planning” é muitas vezes
incompreendida. Um afeta o outro, contudo eles têm objetivos diferentes!
O Capacity Planning determina o que seu sistema precisa e quando ele vai
precisar (o que/quanto/onde), usando os consumos medidos (por testes ou do ambiente
atual) como ponto de partida para uma implantação ou planejamento para o crescimento
vegetativo.
O planejamento de capacidade deve acontecer sem levar em conta o que você
pode otimizar em termos de “sintonia fina” do ambiente. A primeira etapa do processo é
aceitar o desempenho atual do sistema, a fim de estimar o que será necessário no futuro.
Futuramente pode-se descobrir que é possível reduzir o consumo com otimizações (ou
tuning), porém isso deve ser encarado como ganho através de ajustes de componentes.
Processos de troubleshooting de performance sem que não haja falta de
capacidade de recursos não devem ser encarados como matéria direta de Capacity
Planning, afinal se a capacidade provida é adequada então os componentes e/ou
aplicações é que devem efetuar seus ajustes para resolver problemas de performance,
afinal uma CPU a 30% de consumo com uma aplicação retornando transações de 5
segundos quando o desejado seria 2 segundos provavelmente não será resolvido com
adição de mais CPUs.
O Capacity Planning pode auxiliar nos processos de melhorias de performance,
porém não deve ser utilizado como único recurso para tal.
Meça, Meça e Meça!
O único homem que eu conheço que se comporta sensatamente é o meu alfaiate;
ele toma minhas medidas novamente a cada vez que ele me vê. O resto continua com
suas velhas medidas e espera que eu me encaixe nelas. - George Bernard Shaw.
Autor
Marcelo Otto