Programando a nuvem

Concluído

A criação de programas destinados à nuvem requer considerações especiais. Dependendo do tipo de aplicativo e da carga esperada, os desenvolvedores podem utilizar alguns dos recursos fornecidos pelos provedores de nuvem para aprimorar a escalabilidade e a capacidade de manutenção dos programas. O uso de sistemas de escala automática e de balanceadores de carga permite que os desenvolvedores aumentem ou reduzam a infraestrutura dinamicamente com base na utilização do hardware ou em algum fator de carga computado pelo programa.

O desenvolvedor precisa levar vários aspectos em consideração ao desenvolver ou migrar um aplicativo para a nuvem, especialmente aqueles relacionados ao desempenho e à segurança.

Fatores de desempenho para aplicativos na nuvem

O ambiente de um datacenter voltado para a nuvem é diferente do que os desenvolvedores podem estar acostumados ao projetar e implantar aplicativos em uma infraestrutura própria. Alguns desenvolvedores acham difícil ajustar ou aprimorar o desempenho dos aplicativos, pois em nuvens públicas eles não têm acesso às especificações nem ao layout do hardware físico. Tentaremos listar algumas das principais preocupações, com ênfase específica nos fatores que afetam o desempenho dos aplicativos na nuvem:

Largura de banda e latência dos recursos

Uma preocupação primária no desenvolvimento e da implantação de aplicativos em nuvem é a latência. Os desenvolvedores precisam planejar os aplicativos tendo requisitos rígidos de latência em mente. Uma abordagem é compilar a distribuição das localizações dos clientes. Isso permite que os desenvolvedores encontrem o conjunto ideal de localizações de datacenter que pode ser usado para otimizar o desempenho e a capacidade de resposta para o usuário final. Isso é especialmente verdadeiro para aplicativos Web, em que solicitações HTTP individuais de conteúdo estático da Web podem representar uma fração importante do tempo de carregamento das páginas da Web.

Além da latência, os aplicativos também podem ter requisitos rígidos de largura de banda, especialmente aqueles que lidam com conteúdo multimídia avançado, como áudio e vídeo. Muitos provedores de nuvem permitem que os desenvolvedores de nuvem especifiquem os parâmetros de desempenho durante o provisionamento na forma de requisitos de IOPS para os recursos de computação e armazenamento. Além disso, muitos provedores de nuvem permitem que os desenvolvedores configurem redes virtuais. A implementação e a adoção de rede e de armazenamento definidos pelo software (abordadas em módulos posteriores) proporcionam insights adicionais sobre as técnicas mais recentes usadas pelos datacenters para gerenciar o tráfego de vários clientes ao mesmo tempo que gerenciam requisitos individuais, conforme especificado nos SLOs dos clientes.

As técnicas mencionadas acima são voltadas principalmente para o conteúdo estático. Um problema muito mais complicado é otimizar a latência do acesso a sistemas de armazenamento de dados distribuídos, especialmente aqueles que precisam lidar com gravações e atualizações. Aprenderemos um pouco mais sobre essas preocupações em módulos posteriores.

Multilocação

Normalmente, aplicativos em datacenters públicos são executados em uma infraestrutura compartilhada. Esse aspecto dos serviços de nuvem gera várias questões importantes. Embora forneçam um ambiente isolado em termos da segurança e do ambiente do aplicativo, as tecnologias de virtualização modernas normalmente não são capazes de garantir o isolamento do desempenho. Dessa forma, recursos virtualizados em nuvens não podem garantir um desempenho uniforme a todo momento. O desempenho de um recurso em qualquer momento determinado é uma função da carga total sobre os recursos de todos os locatários, também conhecida como a interferência causada por outros locatários que compartilham o mesmo hardware.

Alguns provedores de nuvem, como o Azure, possibilitam que os clientes provisionem determinados tipos de recursos (como VMs) em hardware dedicado. Isso proporciona proteção contra grandes flutuações de desempenho do recurso, entregando aos recursos um desempenho razoavelmente uniforme. No entanto, instâncias de hardware dedicadas custam consideravelmente mais do que as instâncias sob demanda comuns, uma vez que o Azure precisa atribuir um servidor exclusivamente aos recursos.

Um aspecto relacionado da multilocação é a questão da variação de provisionamento, em que solicitações idênticas para recursos virtuais em nuvens públicas não são mapeadas de maneira idêntica para os recursos físicos, causando assim uma variação no desempenho.1 Por exemplo, duas solicitações idênticas para máquinas virtuais (VM1 e VM2) poderiam ser roteadas para dois computadores físicos diferentes (A e B). O computador físico A poderia ter quatro outros locatários competindo por recursos nele, enquanto o computador B poderia ter apenas dois. É cobrado do cliente o mesmo valor pelas máquinas virtuais VM1 e VM2, mas ele pode ter uma experiência de desempenho diferente nelas.

Configurações de segurança

Como vimos na unidade 1, as nuvens públicas estão sujeitas a mais vetores de ataque. Os desenvolvedores precisam dedicar muita atenção a seguir melhores práticas, protocolos e procedimentos ao implantar e manter aplicativos na nuvem. Como resultado, pode haver sobrecargas de desempenho adicionais devido ao uso dos protocolos de segurança exigidos pelas nuvens públicas.

Como discutimos esses protocolos em um módulo anterior, não os discutiremos em detalhes novamente. Qualquer código implantado em uma nuvem pública deve passar por um processo rígido de revisões manuais e automatizadas do código-fonte e de análise estática, bem como análises de vulnerabilidades dinâmicas e testes de penetração. As diretrizes para a implantação segura de aplicativos são mostradas na próxima página.


Referências

  1. Rehman, M.S e Sakr, M.F (2010). Initial Findings for Provisioning Variation in Cloud Computing da Segunda Conferência Internacional da IEEE sobre Tecnologia e Ciência da Computação em Nuvem (CloudCom) de 2010