Plataforma Nuvem

Aplicativos baseados na Internet

Posts Tagged ‘Azure

Microsoft anuncia suporte a Hadoop

with one comment

Os sites Ars Technica, Wired e ReadWrite Cloud informam que a Microsoft anunciou no PASS Summit 2011 planos para suporte à plataforma de computação distribuída Hadoop.

O Hadoop foi desenvolvido pela Yahoo para implementar os princípios de computação distribuída utilizados pela Google, tais como o Google MapReduce e Google File System. O resultado é uma plataforma que alia alta capacidade de armazenamento de dados a capacidades de processamento de dados largamente distribuído.

Hadoop se tornou o padrão para cargas de trabalho envolvendo enormes quantidades de dados. Hoje ele é suportado por empresas como IBM, Amazon e a própria Google. A Microsoft está anunciando que também irá atender a esta demanda do mercado, suportando o Hadoop. A implementação proprietária da Microsoft para processamento distribuído, o projeto Dryad, não está liberada para produção.

Algumas das ações anunciadas são:

  • Integração entre o SQL Server e o Hadoop, para importação e exportação de dados.
  • Integração entre o SQL Server Parallel Data Warehouse e o Hadoop.
  • Implementação do Hadoop no Windows Azure.
  • Suporte ao Hadoop no Windows Server.
  • Integração do Hadoop ao Active Directory para segurança e controle de acesso a dados.
  • Integração do Hadoop às ferramentas de gerenciamento da Microsoft.
  • Integração ao Hive, um data warehouse para o Hadoop.
  • Suporte à análise de dados do Hadoop com as ferramentas de BI da Microsoft, inclusive as novas, como PowerView e PowerPivot.
  • Publicação de dados do Hadoop no Windows Azure Marketplace.

A Microsoft se comprometeu a manter a compatibilidade com a versão oficial do Hadoop e a compartilhar com a comunidade do projeto as implementações que venha a desenvolver. O trabalho está sendo feito em parceria com a Hortonworks, fornecedor de distribuições comerciais do Hadoop que se originou da Yahoo.

Esta iniciativa colocará ao alcance dos desenvolvedores Microsoft e da plataforma Windows Azure as capacidades de processamento distribuído que estão sendo utilizadas com grande sucesso pelos desenvolvedores Java e pelos clientes da Amazon e Google.

Anúncios

Written by Fernando Correia

13/out/2011 at 09:59

Publicado em Geral

Tagged with , , , ,

RIA com Azure

leave a comment »

Aplicativos na nuvem, com a praticidade da web e a usabilidade do desktop. Esta é a proposta do conceito RIARich Internet application. Este modelo consiste em um aplicativo com interface rica executando no cliente comunicando-se com um web service executando em servidores na nuvem. O estado da sessão fica armazenado no cliente e os dados persistentes ficam armazenados em um banco de dados na nuvem (relacional ou não).

Em 2008 eu publiquei uma série de artigos descrevendo um projeto com esta arquitetura, utilizando Flex para o cliente com interface rica, Google App Engine como plataforma de nuvem, linguagem Python para o web service, o Datastore do App Engine para armazenar os dados, e o formato AMF para serialização de dados entre cliente e servidor.

Há muitas alternativas de ferramentas e tecnologias para implementar RIA. Uma combinação interessante seria JavaScript para o cliente com interface rica, Windows Azure como plataforma de nuvem, framework .NET para o web service, o Table Service do Azure para armazenamento, e o formato JSON para transferência de dados.

Arquitetura RIA com Windows Azure

Um web service no estilo REST pode ser implementado de diversas maneiras no Azure. Talvez a mais simples seja não implementá-lo: simplesmente publicar diretamente o Table Service para o cliente RIA. O Table  Service possui uma interface REST e permite acesso seguro utilizando autenticação. Os recursos disponíveis podem ser suficientes para várias aplicações, mas há limitações. Em primeiro lugar, o formato JSON não é suportado, o que vai exigir processamento adicional no cliente JavaScript para converter dados. Adicionalmente, para aplicações que necessitam de regras de negócio, validação, autorização granular, bilhetagem e, de modo geral, uma lógica de negócio e acesso a dados mais complexa no servidor, o acesso direto do aplicativo cliente não é o modelo mais eficaz.

Outra alternativa interessante seria o WCF Data Services, que já foi conhecido como “ADO.NET Data Services”, que já foi conhecido como “Astoria”. Esse é um framework muito interessante, que expõe dados na forma de entidades através de web services modelo REST, e que suporta o formato JSON. Muito promissor, e muito prático de usar em conjunto com o ADO.NET Entity Framework. Porém o Entity Framework não possui um provider para o Table Service do Azure. Também não existe um provider para o WCF Data Services compatível com o Table Service. Isto significa que seria necessário escrever um Data Service Provider.

CustomDataServiceProvider

O artigo sobre o assunto singelamente informa que “uma espiada na figura deveria convencê-lo que implementar um data service provider completo é um investimento significativo”. Se a advertência não for suficiente para abandonar a idéia, o fato é que implementar um WCF Data Service provider que use o Windows Azure Table Service é ainda mais complexo, porque o Table Service implementa apenas um subconjunto das funcionalidades necessárias. Investigações adicionais trarão informações como esta:

You’re asking for something we internally call “Astoria over Astoria” (Astoria was the code name for WCF Data Services). This doesn’t work out of the box, not even close. There are some really hard problems to solve and as of now it doesn’t seem to be 100% possible (the WCF Data Services client has different set of abilities than the server and some queries the server uses are not expressible in the OData protocol). [1]

This approach we call Astoria over Astoria, and it’s really hard to make it work correctly. You can see a sample code of how one could go about it in the OData Provider Toolkit. It’s under Experimental/AstoriaOverAstoria. But please do not use this in a production environment, it’s really meant as a sample only. [2]

Se o WCF Data Services não ajuda neste cenário, o WCF puro pode ser a solução. Certamente é possível criar um serviço WCF no modelo REST, e o WCF suporta o formato JSON. Por outro lado, WCF é uma solução grande, multi-tudo: multi-modelo de programação, multi-protocolo, multi-transporte, multi-formato…

WCF_Architecture

Sem dúvida é a forma mais recomendada para criar uma camada de serviços para aplicativos corporativos que precisam ser acessados das mais diversas maneiras, desde SOAP/XML sobre HTTP até TCP com serialização binária, passando por OData. Por outro lado é um framework complexo, com muitos conceitos, e algumas particularidades quando usado com formato JSON que dificultam a vida.

Se os requisitos forem mais simples, a solução também pode ser mais simples. Para um aplicativo RIA como o proposto aqui, o que é necessário é protocolo HTTP, formato JSON e um mecanismo de roteamento de URLs para implementar o modelo REST.

O ASP.NET MVC atende estes requisitos e oferece funcionalidades úteis como autenticação e modelo de programação MVC, sem cobrar um preço muito alto em termos de conceitos, complexidade, configuração e rigidez. É simples, flexível e compatível com mecanismos de testes unitários e inversão de controle.

O projeto RestfulMvcExample é uma prova de conceito minimalista que exemplifica a criação de um serviço no modelo REST usando formato JSON no ASP.NET MVC 3. Não é implementado um cliente RIA, mas há um teste integrado que simula chamadas ao serviço e exibe as respostas recebidas.

O núcleo do projeto é a classe ContactsController.cs, que é um controller, ou seja, é a classe que processa as requisições recebidas. Esta classe implementa 5 métodos no modelo REST:

  1. // Obtém todos contratos
  2. public ActionResult Index()
  3. {
  4.         var data = _repository.GetAll();
  5.         return Json(data, JsonRequestBehavior.AllowGet);
  6. }
  7.  
  8. // Obtém um contrato
  9. public ActionResult Get(int id)
  10. {
  11.         var data = _repository.Get(id);
  12.         return Json(data, JsonRequestBehavior.AllowGet);
  13. }
  14.  
  15. // Inclui um contrato
  16. public ActionResult Post(Contact contact)
  17. {
  18.         _repository.Add(contact);
  19.         return Json(contact);
  20. }
  21.  
  22. // Atualiza um contrato
  23. public ActionResult Put(int id, Contact contact)
  24. {
  25.         _repository.Update(id, contact);
  26.         return Json(contact);
  27. }
  28.  
  29. // Exclui um contrato
  30. public ActionResult Delete(int id)
  31. {
  32.         _repository.Delete(id);
  33.         var data = new { message = “Contact deleted.” };
  34.         return Json(data);
  35. }

O roteamento, ou seja, a chamada do método correto na classe correta com base na URL solicitada pelo aplicativo cliente, é feito pelo ASP.NET MVC com base nesta definição genérica no arquivo Global.asax.cs:

  1. routes.MapRoute(
  2.         “get-index”,
  3.         “{controller}”,
  4.         new { controller = “Home”, action = “Index” },
  5.         new { httpMethod = new HttpMethodConstraint(“GET”) }
  6. );
  7. routes.MapRoute(
  8.         “get-object”,
  9.         “{controller}/{id}”,
  10.         new { action = “Get” },
  11.         new { httpMethod = new HttpMethodConstraint(“GET”) }
  12. );
  13. routes.MapRoute(
  14.         “post-object”,
  15.         “{controller}”,
  16.         new { action = “Post” },
  17.         new { httpMethod = new HttpMethodConstraint(“POST”) }
  18. );
  19. routes.MapRoute(
  20.         “put-object”,
  21.         “{controller}/{id}”,
  22.         new { action = “Put” },
  23.         new { httpMethod = new HttpMethodConstraint(“PUT”) }
  24. );
  25. routes.MapRoute(
  26.         “delete-object”,
  27.         “{controller}/{id}”,
  28.         new { action = “Delete” },
  29.         new { httpMethod = new HttpMethodConstraint(“DELETE”) }
  30. );

A partir destas definições, mais a classe Model e seu respectivo repositório para gerenciar o acesso a dados, o serviço consegue responder a solicitações REST gerando dados no formato JSON como neste exemplo:

GET http://localhost:62983/contacts

  1. [{“Id”:1,“Name”:“Contact one”,“Email”:“one@example.com”,“Phone”:“555-1111”,“Href
  2. :“/contacts/1”},{“Id”:2,“Name”:“Contact two”,“Email”:“two@example.com”,“Phone”:
  3. “555-2222”,“Href”:“/contacts/2”},{“Id”:3,“Name”:“Contact three”,“Email”:“three@e
  4. xample.com”,“Phone”:“555-3333”,“Href”:“/contacts/3”}]

Esta prova de conceito demonstra que o ASP.NET MVC pode ser utilizado para criar web services REST/JSON com uma arquitetura simples e flexível. Funcionalidades como autorização e regras de negócio podem ser implementadas com código nas classes Controller e Model. Um maior controle da formatação das respostas pode ser obtido com a utilização de classes ViewModel nos controllers.

Os fontes estão disponíveis para download no site do projeto RestfulMvcExample.

Written by Fernando Correia

7/maio/2011 at 14:31

Publicado em Geral

Tagged with , , , , ,

Microsoft lança serviço de cache para o Azure

with one comment

O serviço de cache do Windows Azure (AppFabric Caching Service) foi liberado para produção no dia 28 de abril. Ele é um serviço de cache em memória distribuído que pode ser utilizado para acelerar a performance dos aplicativos no Windows Azure.

diag-caching

Os ganhos não são automáticos; os aplicativos precisam ser preparados para salvar e recuperar dados no cache. Os ganhos acontecem quando uma grande porcentagem das consultas são atendidas recuperando os dados da memória, sem precisar buscá-los em disco, nos serviços de armazenamento do Azure. Mesmo as funcionalidades automatizadas, como cache de sessão e de resultado das páginas, vão ser de benefício variável, conforme as características do aplicativo.

É um recurso inspirado no Memchached, um mecanismo de cache distribuído desenvolvido em 2003 e utilizado nos principais sites da Internet que lidam com grandes volumes, como YouTube, Facebook e Twitter. O Memcached já está disponível nos principais concorrentes do Azure, como o Amazon EC2 e o Google App Engine.

A Microsoft indica como vantagens da utilização do AppFabric Caching Service em vez do Memcached é que o desenvolvimento é facilitado pela maior integração com o .NET e que por ser oferecido como um serviço, dispensa esforço de instalação e administração.

O Facebook usa servidores com 16GB de memória para cache; a Amazon oferece instâncias de 17, 34 e 68 GB de memória. A Microsoft está oferecendo instâncias de cache entre 128 MB (!) e 4 GB. Na comparação de preço, a instância High-Memory Extra Large Instance da Amazon, com 17 GB de memória e 2 processadores, custa em torno de US$ 360 por mês. Por US$ 325 por mês a Microsoft está oferecendo uma instância de cache (incluindo o serviço de gerenciamento) com 4 GB de memória.

A notícia é boa; aplicativos web precisam de cache para ter bom desempenho, e profissionais do mundo Microsoft geralmente não tem familiaridade com serviços como Memcached. Como o AppFabric Caching Service é gerenciado pela Microsoft, é uma verdadeira solução plug-and-play, é só usar.

Como atrativo adicional, a Microsoft está oferecendo o serviço sem custos até o final de julho. Vale a pena conferir.

Written by Fernando Correia

2/maio/2011 at 20:58

Publicado em Geral

Tagged with ,

Plataforma Windows Azure

leave a comment »

A Plataforma Windows Azure é uma plataforma de nuvem da Microsoft utilizada para hospedar aplicativos em datacenters. É uma oferta de plataforma como serviço (PaaS).

Esta plataforma é composta por vários serviços:

  • Windows Azure, um sistema operacional que fornece recursos escaláveis de processamento e armazenamento;
  • SQL Azure, uma versão adaptada para a nuvem do SQL Server;
  • Windows Azure AppFabric, uma coleção de serviços de apoio.

Windows Azure

Windows Azure é um sistema operacional de serviços de nuvem que fornece o ambiente para desenvolvimento, hospedagem e gerenciamento de aplicativos da plataforma Windows Azure. É um serviço de processamento e armazenamento de dados com características de escalabilidade e elasticidade.

O Windows Azure pussui cinco componentes:

  • Compute: Executa código de aplicativos em máquinas virtuais com um ambiente Windows Server modificado. Uma aplicação Azure é composta por várias instâncias de VM, cada uma desempenhando um determinado papel: Web Role para instâncias com aplicativos web ou web services dentro do Internet Information Services (IIS); Worker Role para instâncias que executam código fora do IIS; e VM Role, para executar imagens de disco do Windows Server 2008 R2 preparadas e configuradas pelo cliente do Azure.
  • Storage: Armazena dados de várias maneiras. Table Service armazena entidades na forma de tabelas de forma escalável; Blob Service armazena dados binários; Drive simula um disco (um volume NTFS) dentro do Blob Service; Queue Service é um sistema de enfileiramento de mensagens para comunicação assíncrona.
  • Fabric Controller: Inicia, gerencia, monitora e atualiza aplicativos.
  • Content Delivery Network (CDN): Acelera o acesso a dados binários mantendo cópias em várias regiões do mundo.
  • Connect: Permite estabelecer conexões seguras entre aplicativos locais e aplicativos no Azure.

SQL Azure

SQL Azure é um serviço em nuvem que oferece recursos de armazenamento de dados com alta disponibilidade e tolerância a falhas. Ele permite consultas relacionais aos dados armazenados, que podem ser estruturados, semi-estruturados ou documentos não-estruturados.

O SQL Azure é construído sobre o SQL Server, mas apenas expõe um subconjunto de suas funcionalidades e tipos de dados. Ele utiliza a linguagem Transact-SQL para consultas e o formato Tabular Data Stream como protocolo de acesso. A forma recomendada para acesso a dados é o WCF Data Services.

AppFabric

Windows Azure AppFabric é parte da plataforma Windows Azure e fornece diversos serviços de middleware que aumentam o nível de abstração e diminuem a complexidade de aplicativos para nuvem:

  • Access Control: Fornece uma maneira para aplicativos web e web services identificarem usuários e controlarem acesso. Estabelece um mecanismo para conversão das credenciais de segurança externas em credenciais que o aplicativo entenda. Também pode ser utilizado para gerenciar as permissões dos usuários.
  • Service Bus: Fornece recursos para comunicação segura entre aplicativos distribuídos e desconectados. Suporta diversos protocolos e padrões de comunicação e mensagem e trata aspectos como garantia de entrega, confiabilidade e escala.
  • Caching: Fornece um serviço de cache distribuído em memória, para acesso a dados com alta velocidade, escalabilidade e alta disponibilidade.
  • Integration: Provê recursos do BizTalk Server, tais como conectores, transformação de formatos de mensagens e filas de mensagens. Ainda em desenvolvimento.
  • Composite App: Fornece ferramentas e APIs para desenvolvimento e hospedagem de aplicativos compostos. Ainda em desenvolvimento.

Conclusão

A plataforma Windows Azure inclui uma ampla gama de recursos para desenvolvimento, hospedagem e gerenciamento de aplicativos em nuvem, com características de escalabilidade, elasticidade e alta disponibilidade. A plataforma também fornece recursos para conectar estes aplicativos a outros, tanto na nuvem como locais.

Para maiores informações, visitar o site brasileiro da Windows Azure Platform.

Written by Fernando Correia

23/abr/2011 at 15:41

Publicado em Geral

Tagged with

Arquitetura do exemplo Guestbook do Azure

with one comment

Um dos melhores recursos de treinamento para aprender a desenvolver para a plataforma Azure é o Windows Azure Platform Training Kit. Ele é um conjunto de tutoriais, apresentações e exemplos que ajudam a aprender como utilizar o Windows Azure.

O primeiro tutorial, chamado Introduction to Windows Azure, ensina como criar um aplicativo do tipo “livro de visitantes”, onde os usuários podem deixar comentários com imagens anexadas, e ver os comentários que outros usuários deixaram.

Este aplicativo é implementado utilizando um Web Role para a interface web, o Table Service para armazenar os registros dos comentários, o Blob Service para armazenar as imagens originais e reduzidas, um Worker Role para rodar um serviço para criar as miniaturas das imagens em segundo plano, e o Queue Service para que o Web Role indique quais imagens o Worker Role deve processar.

O fluxo acontece em três etapas separadas. Na primeira etapa, identificada pelas linhas azuis, o usuário insere um novo comentário com uma imagem. O Web Role salva esta imagem original no Blob Service, cria um registro para o comentário no Table Service e insere uma mensagem no Queue Service indicando qual é o registro que deve ser processado. O Web Role encerra aqui o seu trabalho e mostra a página atualizada para o usuário (ainda sem a miniatura).

Na segunda etapa, identificada pelas linhas rosa, que acontece independente da primeira, o Worker Role obtém a próxima mensagem da fila do Queue Service, busca a imagem original no Blob Service, gera uma miniatura e a salva também no Blob Service, e atualiza o registro no Table Service indicando a URL da miniatura gerada.

A terceira etapa, identificada pelas linhas verdes, é quando um usuário qualquer acessa a página do livro de visitantes. O Web Role busca a lista de comentários por ordem de data e monta a página de resultado com estes comentários. O browser do usuário busca as imagens diretamente do Blob Service, através de uma URL.

Este aplicativo de exemplo demonstra muitos dos princípios arquiteturais de aplicativos em nuvem, como aplicativos Web que não mantêm estado (Web Role), repositórios de dados escaláveis e não relacionais (Table Service), repositórios de dados binários (Blob Service), processamento assíncrono através de serviços de enfileiramento de mensagens (Queue Service e Worker Role).

Esta é uma arquitetura escalável, elástica, tolerante a falhas e simples de entender, sem excesso de complexidade. Uma excelente introdução ao desenvolvimento de aplicativos em plataforma nuvem.

Written by Fernando Correia

17/abr/2011 at 13:29

Publicado em Geral

Tagged with ,