# Elasticidade (computação em nuvem)

Na computação em nuvem, a elasticidade é definida como "o grau em que um sistema é capaz de adaptar-se a carga de trabalho através de provisionamento e desprovisionamento de recursos automaticamente, de forma que em cada ponto no tempo, os recursos disponíveis correspondam à demanda atual, tão próxima quanto possível". Elasticidade é uma característica que diferencia a computação em nuvem dos paradigmas de computação propostos anteriormente, tais como computação em grade. A adaptação dinâmica de capacidade, por exemplo, alterando o uso de recursos de computação, para atender a uma variação de carga de trabalho é chamado de "computação elástica".

## Exemplo

Vamos ilustrar a elasticidade através de um exemplo simples de um provedor de serviço que deseja executar um site em uma Infraestrutura de nuvem. No momento $t_{0}$ o site é impopular e uma única máquina (geralmente uma máquina virtual) é suficiente para servir a todos os usuários. No momento $t_{1}$o site, de repente, se torna popular, por exemplo, como resultado de uma multidão relâmpago, e uma única máquina não é mais suficiente para servir a todos os usuários. Com base no número de usuários, simultâneos, acessando o site e os requisitos de recursos do servidor web, pode ser que dez máquinas sejam necessárias. Um sistema elástico deve imediatamente detectar essa condição e prover outras nove máquinas a partir da nuvem, para assim servir a todos os usuários responsivamente.
No momento $t_{2}$ , o site torna-se impopular novamente. As dez máquinas que atualmente estão alocados para o site, estão, na maior parte do tempo inativas e uma única máquina seria suficiente para servir a alguns usuários que estão acessando o site. Um sistema elástico deve imediatamente detectar esta condição, desprover as nove máquinas e liberá-las para a nuvem.

## Finalidade

Elasticidade visa corresponder a quantidade de recursos alocados para um serviço com a quantidade de recursos que ele realmente necessita, evitando o sobre - ou sub-provisionamento. O excesso de provisionamento, por exemplo, a alocação de mais recursos do que o necessário, devem ser evitados, como o provedor de serviços, muitas vezes tem que pagar por recursos que são alocados para o serviço. Por exemplo, uma instância de um Amazon EC2 M4 extra-grande custa US$0.239/hora. Se um serviço alocou duas máquinas virtuais quando somente uma é necessária, o fornecedor de serviços de desperdiça $2,095 a cada ano. Portanto, as despesas de um provedor de serviços são maiores do que o ideal e o lucro é reduzido.
Sub-provisionamento, por exemplo, alocando menos recursos do que o necessário, devem ser evitado, caso contrário o serviço pode não servir seus clientes com um bom serviço. No exemplo acima, sob sobre-provisionamento o site pode fazer ele parecer lento ou inacessível. Os usuários, eventualmente, desistem de acessar, assim, o provedor de serviços perde clientes. No longo prazo, a renda do provedor vai diminuir, o que também reduz o lucro

## Problemas
### O tempo de provisionamento de recursos

Um problema em potencial é que a elasticidade leva tempo. Uma máquina virtual (VM) na nuvem pode ser adquirida a qualquer momento pelo usuário, no entanto, pode demorar vários minutos para que a VM adquirida esteja pronto para uso. O tempo de inicialização da VM é dependente de fatores, tais como tamanho da imagem, tipo da VM, localização do centro de dados (datacenter), o número de VMs, etc. Prestadores de serviços em nuvem têm diferentes desempenho de inicialização de VM. Isto implica que qualquer mecanismo de controle projetado para aplicações elásticas deve considerar em seu processo de decisão o tempo necessário para as ações elasticidade tenham efeito, como provisionamento de outra VM para um componente de uma aplicação específica.

### Monitorando aplicações elásticas

Aplicações elásticas podem alocar e desalocar recursos (como VMs) em demanda específica de componentes de aplicação. Isso faz recursos de nuvem voláteis, e as ferramentas de monitoramento tradicionais que associam o monitoramento de dados com um determinado recurso (i.e. VM), como Gânglios ou Nagios, não são mais adequados para o monitoramento de comportamento de aplicações elásticas. Por exemplo, durante sua vida, um armazenamento de dados de um aplicativo elástico pode adicionar e remover armazenamento de dados das VMs devido ao custo e requisitos de desempenho, variando o número de VMs usadas. Assim, é necessário obter informações adicionais no monitoramento aplicações elásticas, tais como associar a estrutura lógica do aplicativo sobre a infraestrutura virtual subjacente. Este por sua vez gera outros problemas, como a forma de agregar dados a partir de várias VMs para extrair o comportamento do componente de aplicação executando no topo dos VMs, como diferentes métricas podem precisar ser agregados de forma diferente (por exemplo, o uso da cpu pode ser medido, transferência de rede pode ser resumida).

### Requisitos de elasticidade

Quando a implantação de aplicativos em infraestruturas em nuvem (IaaS/PaaS), requisitos de partes interessadas precisam ser considerados, a fim de garantir o adequado comportamento elástico. Apesar de, tradicionalmente, seria tentar encontrar o melhor ponto entre custo e qualidade ou desempenho, para os usuários da nuvem do mundo real os requisitos que dizem respeito ao comportamento são mais complexas e alvo de várias dimensões da elasticidade (por exemplo, SYBL).

### Múltiplos níveis de controle

Aplicativos em nuvem pode ser de vários tipos e complexidades, com vários níveis de artefatos implantados em camadas. Controlar tais estruturas devem levar em consideração uma variedade de questões, sendo rSYBL, uma abordagem neste sentido. Para controle multi-nível, sistemas de controle precisam considerar o impacto do nível inferior de controle tem sobre nível superior e vice-versa (por exemplo, o controle de máquinas virtuais, web containers, ou serviços da web no mesmo momento), bem como os conflitos que podem surgir entre várias estratégias de controle a partir de vários níveis. Estratégias elásticas sob nuvem podem tirar proveito de métodos teóricos de controle(por exemplo, o controle preditivo tem sido experimentada em cenários de nuvem, mostrando vantagens consideráveis com respeito a métodos reativos).

## Veja também

* Microsoft Azure
* Amazon Elastic Compute Cloud