domingo, 15 de janeiro de 2012

11 Coisas que todo desenvolvedor deve saber sobre a Nuvem


Cloud computing abre um mundo de possibilidades de software e desenvolvedores, mas de codificação para a nuvem não é necessariamente tão simples como se poderia pensar.
A curva de aprendizado para desenvolvedores pode ser complicado, especialmente para os desenvolvedores web não utilizados para trabalhar com conceitos como threading e tolerância a simultaneidade, a latência asynchronicity, eo fracasso.

Aqui estão 11 coisas que você precisa prestar atenção para fora para quando você começar a desenvolver para a nuvem.

Compliance e Governança
Requisitos legais e operacionais muitas vezes ditam a localização do seu armazenamento de dados e hospedagem, e na nuvem não é diferente. Enquanto a abstração da camada de infra-estrutura é um benefício enorme para o desenvolvimento escalável, você precisa estar ciente de como suas instâncias e serviços são provisionados, ou você pode acabar inadvertidamente enviar seus dados para um país ou estado que viola as leis de privacidade local.

Um serviço de cloud pode ser apoiada por vários centros de dados em vários locais, e muitas vezes não há maneira de saber onde uma instância fisicamente ser gerado. Isto é facilmente esquecido, uma vez que todo o ponto da nuvem deve ser para algum local grau e infra-estrutura independente, mas pode ser crítico para a governação.

Tolerância de falha
Com o potencial de tantos casos e serviços distribuídos, você introduzir muitos mais pontos possíveis de falha do que em uma aplicação tradicional do centro de dados hospedados. Especialmente para os desenvolvedores usado para runtime linguagens interpretadas como PHP, ASP ou ColdFusion, o salto necessário para tolerância a falhas e dados assíncronos pode apresentar uma curva de aprendizado difícil.

Em particular, sua aplicação deve ser arquitetado desde o início para antecipar falha uma instância não começar, os dados não chegam em tempo hábil, ou talvez não chegar a todos. Ambas as camadas seu serviço e sua interface deve atender a isso, e fornecer mecanismos adequados e feedback do usuário.

Por exemplo, digamos que você tem um aplicativo que permite ao usuário fazer upload de um arquivo de vídeo para a conversão, e você gerar uma instância para gerenciá-lo. Se você codificar sincronicamente sua aplicação vai quebrar a instância deve falhar ao iniciar ou um mecanismo de armazenamento perde temporariamente a conexão. Se, por outro lado você arquiteto com enfileiramento e distribuição em mente, seu aplicativo pode alertar o usuário para um atraso ou graciosamente failover e permitir a operação, embora os dados necessários podem ainda não estar pronto.

Mapeamento de serviço
A natureza da nuvem e computação elástica significa que ao contrário do modelo tradicional de hospedagem de endereços de rede fixa para vários serviços, você não vai saber o endereço IP de uma instância de antecedência, e assim que seu pedido deve ser capaz de trabalhar em alto nível sem ser escravo de um local (ou lógica) física.

Isto não é tão diferente de balanceamento de carga própria ou clustering, e pode apresentar os mesmos tipos de problemas, mas aqueles não utilizados para a arquitetura para ambientes devem tomar esta curva de aprendizagem em conta quando se deslocam para a nuvem.

Escalabilidade e Estado
Escalabilidade horizontal é uma das principais razões para se deslocar para arquitetura em nuvem, mas é importante perceber que não a aplicação de todos os processos neste ambiente. Sem capacidade de prever o uso de instância ou conexão contínua, cada pedido de um usuário faz potencialmente pode ser servido por uma instância separada, e por isso você deve gerenciar o estado de acordo.

Ferramental
Linguagens específicas nuvem ainda estão em sua infância, e em desenvolvimento em linguagens familiares em uma infraestrutura de nuvem podem apresentar problemas únicos. Você pode não ser capaz de confiar em seu IDE tanto quanto você usou para-depuradores especial pode ser problemático, e em alguns casos inexistente.

Para aqueles com experiência em linguagens de baixo nível ou de desenvolvimento antes de a prevalência de ferramentas de alta qualidade isso não vai ser uma coisa nova, mas se você nunca depurado um pedido, a "moda antiga", agora é a hora de aprender.

Portabilidade
Este não é um problema para todos, e varia muito em função dos serviços que você usa ea natureza da sua aplicação, mas você pode achar que uma vez desenvolvida para uma nuvem dada infra-estrutura de seu sistema não é mais portátil. Abstração é a chave aqui, tendo em conta que a infância relativa de plataformas cloud faz a adesão a padrões ainda mais importante.

Você pode descobrir que várias normas são suportados ou parcialmente implementadas por seu provedor, e em tal caso, desenvolvendo contra este ambiente vai tornar as coisas difíceis se você precisar migrar para outro serviço devido a questões de governança de preços, ou confiabilidade.

Armazenamento de dados
Desenvolvimento de software tradicional depende de arquivo e armazenamento de dados relacionais mais frequentemente do que não, mas essas soluções não escala bem na nuvem. Os desenvolvedores são obrigados a aprender novas tecnologias, como soluções NoSQL, serviços de dados e grande plataforma proprietária como um (PaaS) Serviço de APIs. Estas novas tecnologias requerem uma mudança fundamental no pensamento, e apresentar novos problemas de codificação desenvolvedores de software tradicionais podem ainda não estar ciente.

Antes de começar a arquitetura para a nuvem, verifique se você está até a velocidade sobre o uso de armazenamento de dados não relacional, grandes conceitos dados como Hadoop, HBase, Cassandra e Hypertable, para citar alguns. Também vale a pena olhar em técnicas para desenvolver contra os serviços PaaS como SalesForce.com , onde contam com uma API para armazenamento de dados ao invés de gerenciar diretamente os seus dados.

Lembre-se que, em determinado momento, uma solicitação do usuário ou serviço será servido de uma instância desconhecida, armazenamento de modo localizada não é mais possível.

Custos
No desenvolvimento tradicional, não é um grande negócio se você deixar o servidor de teste em execução ou executar vários testes de carga local. Na nuvem no entanto, a cada ciclo de CPU potencialmente custa dinheiro, e você precisa levar isso em conta, com tudo que você faz. Processos de desenvolvimento precisa ter em mente horas de CPU, largura de banda usos e alocação de armazenamento, e assim novas formas de eficiência são obrigatórios.

É claro que esses requisitos não são necessariamente novas, mas aquelas usadas para desenvolvimento em servidores pesados, as conexões de alta largura de banda e ambientes locais podem facilmente tornar-se negligente nas coisas sintonia fina como o tamanho da mensagem, o pool de conexões e gravar o arquivo temporário. Quando a codificação para a nuvem, é hora de o ponto do i e atravesse a t: cuidar de todos os detalhes.

Ensaio
A melhor prática usual é testar os aplicativos em uma plataforma idêntica à que será executado na produção (ou o mais próximo a ele como você pode gerenciar), mas infra-estrutura de nuvem faz com que extremamente difícil, e é muito possível para situações que surjam na produção que você não pode replicar localmente. Mesmo levando um instantâneo de um aplicativo no momento de um evento do sistema pode ser problemático, por isso, juntamente com a aprendizagem de novas maneiras para depurar você precisa estar sempre consciente de que as coisas podem funcionar de forma diferente na nuvem.

Leve isto em conta quando fornecer estimativas e alocação de tempo para testes funcionais ou de uso e, principalmente, ao tentar depurar e resolver um problema de viver.

Licenciamento
Nunca fazer suposições sobre a natureza das licenças de implantação na nuvem, que pode surpreendê-lo. Mais de um desenvolvimento interno foi capturado pouco depois o desenvolvimento de aplicativos e de repente descobrir que as licenças que eles próprios para bibliotecas e entidades de software não escala na nuvem, e pode produzir custos ocultos.

Documentação e comunitário
Porque tudo está ainda tão novo, você não será capaz de encontrar inicialmente o mesmo nível de ajuda da comunidade, blogs, documentação e soluções que você está acostumado a usar o Google assim. Em muitos casos você pode encontrar-se pioneiro mesmo funcionalidade simples em um caso de uso específico, para garantir que você documentar o seu trabalho e compartilhar o máximo possível.

O corpo de conhecimento disponível na rede está crescendo, mas ainda tem um longo caminho a percorrer, e estes recursos são uma parte válida e importante do que faz a sua utilidade como um desenvolvedor então não subestime.

Ao todo, a computação em nuvem é cheia de promessas.
Aplicativos podem ser criados em escala sob demanda e utilizar apenas os recursos de que necessitam, enquanto continuam sendo capazes de competir no cenário mundial com o mesmo tipo de garantia de que apenas uma vez veio com bolsos cheios e grandes centros de dados.

Como tecnologias, linguagens e experiência do desenvolvedor cresce, novas maneiras de fazer as coisas irão surgir na nuvem, e cabe a você como um desenvolvedor para procurá-los e transformá-los para seu proveito.


Nenhum comentário :

Postar um comentário

Total de visualizações de página