Programar a cloud
Conceber programas que estão destinados para a cloud requer considerações especiais. Consoante o tipo da aplicação e da carga esperada, os programadores podem utilizar algumas das funcionalidades fornecidas por fornecedores de serviços cloud para melhorar a escalabilidade e manutenção dos programas. A utilização de sistemas de dimensionamento automáticos e balanceadores de carga permite aos programadores aumentar ou diminuir a infraestrutura de forma dinâmica, com base na utilização de hardware ou um fator de carga de computação de programas.
Existem múltiplas considerações que um programador tem de ter em conta ao desenvolver ou migrar uma aplicação para a cloud, sobretudo se tais considerações disserem respeito ao desempenho e segurança.
Fatores de desempenho para aplicações na cloud
O ambiente num datacenter centrado na cloud é diferente do que os programadores podem estar habituados ao conceber e implementar aplicações numa infraestrutura própria. Alguns programadores têm dificuldade em otimizar ou melhorar o desempenho das suas aplicações porque não têm acesso à estrutura do hardware físico ou às especificações em clouds públicas. Tentaremos enumerar algumas das principais preocupações, com particular ênfase para os fatores que afetam o desempenho da aplicação na cloud:
Largura de banda e latência de recursos
Uma das principais preocupações para o desenvolvimento e implementação de aplicações na cloud é a latência. Os programadores têm de planear as suas aplicações com requisitos rigorosos de latência em mente. Uma abordagem consiste em compilar a distribuição das localizações dos clientes. Tal permitirá aos programadores encontrar o conjunto ideal de localizações de datacenter que podem ser utilizadas para otimizar o desempenho e capacidade de resposta do utilizador final. Tal é particularmente verdade nas aplicações Web, onde os pedidos individuais de HTTP para conteúdo Web estático podem representar uma fração importante dos tempos de carregamento de páginas Web.
Além da latência, as aplicações também podem ter requisitos rigorosos de largura de banda, sobretudo os que lidam com conteúdos multimédia avançados, como áudio e vídeo. Muitos fornecedores de serviços cloud permitem aos programadores na cloud que especifiquem parâmetros de desempenho durante o aprovisionamento sob a forma de requisitos IOPS para recursos de computação e armazenamento. Além disso, muitos fornecedores de serviços cloud permitem aos programadores a configuração de redes virtuais. A implementação e adoção de networking e armazenamento definidos pelo software (abordado em módulos posteriores) fornecem informações adicionais sobre técnicas mais recentes utilizadas pelos datacenters para gerir o tráfego de múltiplos clientes, gerindo simultaneamente os requisitos individuais conforme especificado nos SLOs do cliente.
As técnicas acima mencionadas direcionam-se principalmente ao conteúdo estático. Um problema muito mais difícil é a otimização da latência do acesso a sistemas de armazenamento de dados distribuídos, sobretudo os que têm de lidar com escritas e atualizações. Vamos aprender mais sobre estas preocupações em módulos posteriores.
Arquitetura multi-inquilino
As aplicações em datacenters públicos são normalmente executados em infraestruturas partilhadas. Este aspeto dos serviços na cloud levantam várias questões importantes. Embora as tecnologias modernas de virtualização forneçam um ambiente isolado em termos de ambiente de aplicação e segurança, não conseguem normalmente garantir o isolamento de desempenho. Como tal, os recursos virtualizados nas clouds não podem garantir sempre um desempenho consistente. O desempenho de um recurso num determinado momento é uma função da carga total sobre os recursos de todos os inquilinos, também conhecido como a interferência que ocorre noutros inquilinos que partilham o mesmo hardware.
Alguns fornecedor de serviços cloud dão aos clientes a possibilidade de aprovisionar determinados tipos de recursos (tais como VMs) em hardware dedicado. Tal proporciona uma proteção contra grandes flutuações no desempenho dos recursos, fornecendo um desempenho bastante consistente para os recursos. No entanto, as instâncias de hardware dedicados custam consideravelmente mais do que as instâncias regulares a pedido, uma vez que o Azure precisa de atribuir um servidor exclusivamente para os recursos.
Um aspeto relacionado da arquitetura multi-inquilino é a questão da variação do aprovisionamento, em que os pedidos idênticos de recursos virtuais nas clouds públicas não são mapeados de forma idêntica nos recursos físicos, causando assim uma variação do desempenho.1 Por exemplo, dois pedidos idênticos para máquinas virtuais (VM1
e VM2
) podem ser encaminhados para duas máquinas físicas (A
e B
). A máquina física A pode ter quatro outros inquilinos a competir por recursos na mesma máquina, ao passo que a máquina B pode ter apenas dois. Ao cliente é cobrado o mesmo valor pelas máquinas virtuais VM1
e VM2
, mas poderá observar-se um desempenho diferente nestas máquinas.
Definições de segurança
As clouds públicas estão sujeitas a um aumento nos vetores de ataques, como vimos na unidade 1. Os programadores têm de ser extremamente cautelosos e garantir que seguem as melhores práticas, protocolos e procedimentos ao implementar e fazer a manutenção de aplicações na cloud. Como resultado, podem ocorrer overheads de desempenho adicionais devido à utilização dos protocolos de segurança mandatados pelas clouds públicas.
Como já abordámos estes protocolos num módulo anterior, não iremos debatê-los novamente em detalhe. Qualquer código numa cloud pública deve passar por um rigoroso processo de revisões de código de origem manuais e automatizados e análise estática, bem como por uma análise dinâmica de vulnerabilidade e testes de penetração. As diretrizes para implementar aplicações de forma segura são mostradas na página seguinte.
Referências
- Rehman, M.S e Sakr, M.F (2010). Descobertas iniciais para a variação de provisionamento na computação em nuvem da Segunda Conferência Internacional do IEEE de 2010 sobre Tecnologia e Ciência de Computação em Nuvem (CloudCom)