Padrões de carga de computação
Se o tráfego para um recurso de nuvem (como uma VM, um conjunto de VMs ou um aplicativo Web) fosse constante e inalterável, não haveria necessidade de dimensionar. Um administrador de nuvem pode simplesmente provisionar o número de instâncias necessárias para lidar com a carga e ponto final. Mas os padrões de tráfego mudam ao longo do tempo, às vezes de maneira previsível, ás vezes não. No mundo real, os administradores precisam diagnosticar a carga sobre os recursos que gerenciam e usar o dimensionamento para garantir que o sistema possa acompanhar a demanda.
Antes de discutirmos como dimensionar, discutiremos por que dimensionamos, dividindo alguns dos padrões comuns de carga que as VMs e outros recursos de nuvem experimentam.
Crescimento consistente
Um dos motivadores mais comuns para a necessidade de dimensionar é o crescimento consistente na demanda. A Figura 1 mostra o tráfego para o site da empresa durante um período de 24 meses. A empresa está crescendo rapidamente e o tráfego para seu site reflete isso. Se presumirmos que um servidor Web possa lidar com 5.000 solicitações por unidade de tempo, a empresa começará com, talvez, três ou quatro servidores Web, mas em questão de mais dois anos, precisará de 20 deles para acompanhar a demanda crescente e continuar atendendo bem seus clientes.
Figura 1: Crescimento consistente.
O crescimento consistente está entre os padrões de carga pelos quais é mais fácil compensar, porque a alteração é contínua e gradual. Provavelmente, podemos dimensionar usando servidores físicos, já que podemos prever quando o próximo servidor (ou conjunto de servidores) será exigido e ter semanas, se não meses, para preparação. No entanto, a computação em nuvem nos permite colocar novos servidores virtuais online em questão de minutos. E embora a tendência de 24 meses mostre um crescimento estável e previsível, as cargas podem flutuar substancialmente dentro de períodos de tempo menores. A computação em nuvem é muito mais adaptável a microtendências do que o dimensionamento com servidores físicos.
Cargas em flutuação constante
A elasticidade rápida oferecida pela computação em nuvem é essencial quando as cargas flutuam de maneira imprevisível em períodos de tempo relativamente curtos. A Figura 2 mostra a carga em um site da Web em um período de 24 horas. Supondo novamente que um servidor possa lidar com 5.000 solicitações por unidade de tempo, o número de servidores necessários varia de dois a 16 ao longo do dia. Poderíamos acomodar esse tráfego mantendo 16 servidores Web virtuais sempre online, mas lembre-se de que os provedores de serviço de nuvem cobram pelas VMs mesmo quando estão ociosos. A capacidade em excesso não apenas gastaria energia, mas aumentaria o custo para um valor próximo do dobro.
Figura 2: Carga em flutuação constante.
Cargas cíclicas
A Figura 3 mostra uma carga que aumenta e diminui em um padrão regular e um pouco previsível. Por exemplo, a demanda aumenta durante o horário de trabalho e cai novamente durante o anoitecer e o restante da noite. Em seu pico, essa carga exige cerca de 20 servidores para lidar com a demanda, novamente supondo 5.000 solicitações por unidade de tempo por servidor. Não é possível realizar um rodízio de servidores físicos 24 horas por dia, mas os servidores virtuais podem ser facilmente provisionados e desprovisionados segundo um agendamento, a fim de garantir que a capacidade do servidor seja aproximadamente igual à demanda. Servidores físicos que ficam ociosos ou pouco utilizados 12 horas por dia representam gasto de capital indesejado e consumo de energia desnecessário. Os servidores virtuais também têm um custo, mas podem ser desprovisionados quando não forem necessários e recriados rapidamente quando a demanda assim exigir.
Figura 3: Carga cíclica que se repete a cada 24 horas.
Intermitências imprevisíveis
Um dos padrões mais difíceis de lidar sob um ponto de vista de custo e manutenção é aquele que incorre em intermitências imprevisíveis (Figura 4). Se os picos forem previsíveis, por exemplo, se o site da Web atender a um serviço de entrega de pizza que apresenta cargas maiores em fins de semana e feriados, o provisionamento de capacidade extra poderá ser planejado. Mas, se esses picos não forem previsíveis, devemos estar preparados para lidar com eles a qualquer momento.
Figura 4: Intermitências imprevisíveis.
Podemos prever custos excessivos (o custo dos servidores provisionados para lidar com picos de carga, mas que são relativamente ociosos durante os horários de tráfego menor) como a área entre a parte superior da curva e uma linha horizontal desenhada cruzando o ponto mais alto. Nesse caso, o custo de fornecer capacidade para 100.000 solicitações por unidade de tempo para a carga na Figura 4 é consideravelmente maior do que o custo de fornecer uma capacidade equivalente na Figura 3.
Se pudermos prever a magnitude da demanda de pico (não necessariamente o momento em que ela ocorre) e não nos preocuparmos com os custos, poderemos fornecer a capacidade adequada o tempo todo, provisionando servidores suficientes para lidar com as cargas mais altas. A computação em nuvem nos permite colocar os recursos online quando eles são necessários e, quando não são, colocá-los offline (e parar de incorrer em encargos para eles). A elasticidade é promovida pelo dimensionamento de recursos de nuvem. Vamos examinar o conceito de dimensionamento mais detalhadamente e ver por que ele é um fator fundamental na economia da computação em nuvem.