quarta-feira, 12 de setembro de 2007

Gerenciamento de Capacidade para aplicação web – Parte 1


comentado por Bruno Domingues em agosto 3, 2007

Depois de algum tempo resistindo a criar um blog, eu me rendi a essa oportunidade de escrever aqui no blog da Intel em nossa língua pátria. Meu nome é Bruno Domingues, tenho 28 anos, moro em Brasília e trabalho no segmento de governo da Intel, como Especialista de Soluções. Trago uma experiência de 8 anos em função similar na Microsoft, portanto esperem muitos exemplos e comentários nesta plataforma, pelo menos até perder o “vício”.

Vou procurar postar aqui tanto os meus comentários a respeito de notícias, tecnologia e links que eu julgar interessante, sempre do meu ponto de vista, que algumas vezes pode não ser o ponto de vista da Intel, afinal este é um blog. Tenho especial interesse em arquitetura e governança de TI, virtualização, gerenciamento de capacidade/avaliação de desempenho e segurança de forma geral.

Comentários são sempre bem vindos, e pelo fato de estar quase sempre conectado não se assustem se eu responder rapidamente.

Após minha apresentação como preâmbulo, vamos ao que nos interessa: gerenciamento de capacidade para aplicações web.

A arte de estimar a infra-estrutura necessária para uma dada aplicação web pode ser uma tarefa ardilosa se você tem o orçamento restrito, precisa acertar na primeira vez e sua empresa tem grandes expectativas no sucesso do empreendimento, sem muita margem de manobra para qual configuração apostar.

Os primeiros passos a serem dados nesta direção serão conhecer o comportamento dos seus usuários, ou pelo menos tentar predizê-lo, e também conhecer sua aplicação, ie. funcionamento, consumo de recursos computacionais, tempo de resposta, comportamento em sessões concorrentes etc…

Conhecendo o seu usuário:

O primeiro passo para um bom planejamento de capacidade, começa em conhecer bem o seu usuário, quando ele acessa o seu sistema, por quanto tempo ele permanece interagindo com a aplicação bem como ele interage e, mais importante de tudo, qual o tempo de resposta que ele espera.

Para ser didático, vamos trabalhar com o exemplo de uma aplicação de ponto, onde cada funcionário da sua empresa irá precisar efetuar logon na aplicação e dar aceite no horário que estará sendo apresentado na aplicação, porém neste momento vamos abstrair um pouco os detalhes da aplicação e vamos nos concentrar nos usuários.

Pelo fato da aplicação ser um sistema de ponto, é de se esperar que os usuários tenham seus picos de utilização no inicio da manhã quando estão chegando ao trabalho, no período de almoço e ao final do dia. Vamos aqui a título de ilustração assumir que a empresa tenha 5.000 funcionários e que obviamente nem todos efetuam logon ao mesmo tempo em suas estações de trabalho, pois sempre há os atrasados, aqueles que chegam mais cedo por deixarem primeiro os filhos na escola, tem o tempo do elevador, do café e de estacionar o carro, o que faz com que tenhamos uma distribuição no tempo do acesso destes usuários ao sistema, o que nos faz pelo bom senso desprezar a pior das situações, que seria 5.000 usuários acessando ao mesmo tempo o sistema, porém se a pior situação não é ter 5.000 usuários pendurados ao mesmo tempo no sistema, qual seria o razoável?

Para responder a essa pergunta pode-se estimar o pico de acesso dos usuários usando a curva Gauss, pois é um modelo que parece aderir bem à natureza do problema e dai já é o ponto de partida para criar o jogo de “what-if”.

A figura 1 representa o gráfico de uma razoável predição do comportamento de hits no sistema em um dia útil, e permite facilmente deduzir porque usar a curva de Gauss para modelar a carga no site web.

Figura 1 – Carga no web site

Embora o conjunto de dados levantados me traga os dados em horas, o que realmente importa aqui é quanto tempo o usuário precisará esperar para o servidor responder, ou pela lógica reversa, qual será o hardware necessário para que o usuário tenha resposta em até um tempo limite, considerado máximo (assumindo que não há otimizações a serem realizadas na aplicação), portanto é preciso calcular o número de hits/segundo no pico da nossa curva.

Para tal, vejamos a figura 2 que representa a equação da curva de Gauss. A variável y representa o número de usuários em um determinado momento e σ é o desvio padrão. Para aqueles que não têm dedicado muito tempo a estatística ou já não se recordam muito a este respeito, o desvio padrão representa a distância do centro da curva que contém 68% dos elementos do conjunto. Em se movendo três vezes o desvio padrão do centro da curva, 99,7% dos elementos estarão cobertos. O símbolo µ é a localização do centro da curva ou a média. x representa o número de elementos a direita ou esquerda da média.

Figura 2 – Equação da curva de Gauss (σ = desvio padrão, µ = média aritmética)

A curva de Gauss precisa agora estar aderente a nossa estimativa, para tanto é necessário multiplicar a unidade da curva pelas requisições estimadas, e ainda deve-se trabalhar o desvio padrão para obter maior aderência ao conjunto de dados. O resultado final, portanto é a freqüência de usuários por segundo no ponto médio da curva, conforme apresentado na figura 3, onde usei uma planilha eletrônica para realizar tais manipulações estatísticas.

Figura 3 – Manipulação Estatística (GAUSS)

Olhando para o sistema de ponto com mais critério, parece muito ingênuo pensar que uma empresa com 5.000 funcionários de fato tenha em algum dia do ano 5.000 funcionários trabalhando num dado dia, pois existem as férias, licença-médica, maternidade, treinamento, viagem de negócio, trabalho externo etc. portanto vamos adotar de forma “heurística” um ponto de corte conservador, imaginemos 80% dos contribuintes da empresa, ie. 4.000 funcionários, que seria neste caso pior cenário. Mas, para se chegar a estimativa de usuários simultâneos acessando o sistema, iremos recorrer a outra ferramenta de probabilidade e estatística: a distribuição de Poisson.

Poisson é um dos métodos para modelar o uso. A teoria por trás da probabilidade de Poisson é que as requisições ao sistema obedecem a uma curva exponencial para solicitações simultânea de outros usuários. Usando a média, que encontramos na curva de Gauss (1,22 usuários/segundo em média) há uma alta probabilidade que 0, 1, 2 e 3 usuários acessem o sistema simultaneamente com o período de tempo escolhido, porém a probabilidade de seis ou mais usuários acessando o sistema simultaneamente cai drasticamente, conforme figura 4.

Figura 4 – Distribuição de probabilidade de Poisson

Figura 5 – Equação de Poisson (µ=taxa por unidade de tempo, x=0,1,2,...)

Na figura 5, µ é a média do número de usuários requisitando acesso ao site por unidade de tempo. Este número é derivado da fórmula de Gauss. O termo x se refere ao número de usuários entrando no sistema no período.

Podemos utilizar uma planilha eletrônica comum novamente para nos prover a distribuição de Poisson não cumulativa, conforme apresentado na figura 6.

Figura 6 - Manipulação Estatística (POISSON)

Agora que chegamos a estimativa da razão de acesso, que modela em primeiro nível o lado dos usuários, devemos prestar atenção agora para o lado do servidor, ie. aplicação e hardware para completar o tripé que dão base a qualquer gerenciamento de capacidade, porém este será o tema da parte 2 deste assunto.

Texto retirado: http://blogs.intel.com/brasildigital/2007/08/gerenciamento_de_capacidade_pa.html




Nenhum comentário: