PaaS, Cloud Computing, Virtualização e o Futuro parte 2

No post anterior PaaS, Cloud Computing, Virtualização e o Futuro parte 1 comentei sobre algumas deficiências que existem hoje em dia no desenvolvimento de software. Dentre elas foquei nas dificuldades de criar um software que se escalável e no descolamento que existe do desenvolvimento para produção/operação.

Na continuação do assunto, gostaria de salientar o obvio, ou seja, não existe bala de prata, PaaS, Cloud Computing e Virtualização não são soluções para todos os problemas e para todos os tipos de aplicações e cenários. Então vou começar falando um pouco mais do que se trata estas tecnologias, focando em conceito.

Depois irei falar sobre o que anda acontecendo no mercado e o que pode vir a ser o futuro, acredito que muita inovação vai surgir nos próximos 2 anos e pode ser o novo paradigma de desenvolvimento de software.



Virtualização

Em poucas palavras estamos falando de abstração. Pode ser abstrair/deixar transparente o hardware, mas você tem acesso a este hardware mas como se fosse uma camada virtual. Hoje em dia já é algo bem comum existe virtualização de celular, vide-game(Quem não jogou Super Nintendo com o Znes?) e sistemas operacionais para hardwares específicos. Focando no ambiente do desenvolvedor isto já nos traz diversas vantagens em termos de:
  • Teste de Tecnologias: Podemos instalar diversas tecnologias que ainda estão incipientes ou que podem simplesmente desconfigurar ou prejudicar o seu ambiente, então se realiza estes testes em um sistema operacional virtual que pode ser uma Windows, Linux ou qualquer outro.
  • Teste de Software: Se a sua aplicação Web precisa rodar nos navegadores: Internet Explorer 6,7 e 8, Firefox 3 e Safari do MAC, você pode criar um sistema operacional contendo o ambiente para testar com cada navegador destes.
  • Desenvolvimento com VPN: As vezes você precisa desenvolver remoto utilizando a VPN de um cliente, que é o meu caso por exemplo, neste cenário quando você conecta na VPN do cliente você perde o acesso a internet. Então é uma boa idéia criar uma máquina virtual para conectar na VPN do cliente e não perder seu acesso a web para consultas por exemplo.
  • Separação de Ambientes: Suponha que você tenha que desenvolver para ambientes totalmente diferentes como para Linux com GTK e para Windows com ORACLE forms. Neste caso é uma boa idéia ter 2 máquinas virtuais uma com Linux para GTK e outra para Windows com ORACLE Forms.
Entre outras aplicações, existe mais duas grandes vantagens que são elas:
  • Gerência de Configuração: Como todo o ambiente esta em uma máquina virtual basta copiar a pasta com os arquivos da máquina virtual e pronto, fica muito mais fácil realizar backup e disponibilizar um ambiente para um desenvolvedor.
  • Custos: Como tudo esta virtualizado é mais fácil trocar as soluções de máquinas e aumentar o máquina sem afetar as soluções, tanto a manutenção como o backup são favorecidos com isto.
Os servidores de aplicação e banco de Dados, LDAPs(AD) também podem ser virtualizados, existem soluções muito boas como: Virtual Box, VMware, Virtual PC e o XEN. Eu particularmente já trabalhei com o Virtual PC e com o VMware em produção de forma muito positiva, XEN é muito utilizado hoje em dia em ambientes Linux pelo baixo custo e por aumentar muito a disponibilidade das soluções.

Cloud Computing

Este novo modelo de computação promete muito nos próximos anos. Segundo o Gartner esta é uma tendência muito grandes vendors como Amazon, Google, IBM, Microsoft e Yahoo já tem ações concretas nesta frente.

Novamente estamos falando de abstração, desta vez em uma escala diferente da virtualização. Para muitos esta é uma forma diferente de hosting como conhecemos hoje e pode ser um meio muito mais barato e fácil de escalar aplicações.

Esta abstração é a abstração de hardware, mas não de um único computador mas todo um data center por exemplo, você desenvolve de forma remota e nunca acessa o seu hardware, assim é possível pagar apénas pelo que esta sendo consumido de recursos e não é necessário alocar recursos que não estão sendo utilizados. Confira este vídeo do You Tube da GoGrid a baixo:



O Conceito de Cloud Computing esta associado a outros conceitos como Infrastructure as service(IaaS), Plataform as service(PaaS) e Software as service(SaaS).

Platform As Service(PaaS)

Este conceito associado a Cloud Computing significa prover toda uma plataforma de desenvolvimento de software como um serviço. Isto significa, desenvolver, compilar, debugar, deploy, test em uma aplicação. Pode parecer que estamos voltando a época dos main frames, de certa forma sim, mas de forma organizada e escalar.

A grande frente é poupar custos e não alocar hardware desnecessariamente e poder escalar de forma simples sem ter que lidar com o ambiente físico diretamente, antigamente desenvolvíamos para um sistema operacional com um processador especifica, depois com a evolução desenvolvemos para uma plataforma que abstraia o processador e o sistema operacional que é o caso de Java e .NET agora vamos desenvolver para um PaaS que pode ser da Google, Ms, Amazon, etc...

Esta pode ser mais uma forma de lock in, porém só o tempo ira dizer se era igual a todas as outras que já vimos ou se estamos se aproximando das soluções forma da TI como energia, telefonia, gás, TV, etc...

A promessa é tentadora, já existem soluções para utilização como o Azure da Microsoft, Amazon S3 e o Google App Engine, entre outras. O Google App Engine oferece suporte e plugins para o desenvolvimento de soluções com Java, Ajax e GWT utilizando eclipse, que por sinal tem um plugin para este desenvolvimento. No caso da Google você tem uma quota free de processador, disco e banda mas pode pagar por demanda somente por aquilo que você utiliza.

Open Platform as Service

É uma iniciativa para que você poça desenvolver qualquer aplicação em qualquer cloud server, você pode conferir mais informações sobre isso aqui.

O Papel da Vmware

Além de ser um grande vendor de virtualização, recentemente ela adiquirio a empresa Spring Source que é a empresa que criou e mantém o stack de soluções Spring-*. Acredito que desta aquisição vai surgir uma grande inovação, a idéia é juntar o desenvolvimento de qualidade para Java com Spring-* com a virtualização e a Cloud Computing.

A Vmware já possui um produto bem interessante que é o VSphere este produto lhe da a habilidade de ter a sua cloud, sendo que ela pode ser publica ou privada.

Soluções da Vmware

Ter uma cloud privada é algo muito bom por que você continua com o controle dos seus dados e dos seus recursos mas traz todo um custo adicional em máquinas, pessoas e processos para gerenciar toda esta infra-estrutura.

A tendência é que cada vez mais as coisas evoluam para o lado de PaaS, sendo que pequenas empresas não vão mais ter que hospedar suas soluções corporativas em Java ou .NET por exemplo e vão pagar somente pelos recursos utilizados.

Espera-se que além das facilidades de escalabilidade e custos baixos o desncolamento do desenvolvimento com a operação também seja drasticamente reduzido. Eu estou esperando com grande entusiasmo esta junção da Vmware com a Spring Source, acredito que sairá algo muito.

Em outros posts vou mostrar alguma coisa em App Engine da Google ou outro PaaS.

Abraços e até a próxima.

Popular posts from this blog

Kafka Streams with Java 15

Rust and Java Interoperability

HMAC in Java