Pular para o conteúdo principal

Java e a Nuvem - Parte 1

Influenciado pelas minhas últimas atividades no SPC Brasil e também estimulado pelo excelente post a respeito de algumas novas tendências tecnológicas enterprise do globalcoder Bene, gostaria de iniciar uma série de posts especificamente sobre de Java e "computação de nuvem". Nesse post vou introduzir alguns conceitos para que depois possamos explorar capacidades e tecnologias em Java(e relacionadas) que possibilitam maior escalabilidade, performance e confiabilidade em suas apps enterprise, fornecendo uma melhor experiência para o usuário final.

Mas afinal, o que é "computação em nuvem"(cloud computing)? Basicamente são serviços disponibilizados e consumidos através da internet(ou outra grande rede) que necessitam de uma infraestrutura capaz de escalar elasticamente(alocando e desalocando recursos de forma apropriada dentro de um padrão) de modo a atender uma alta demanda de uso. Então o maior exemplo de computação em nuvem existente é a própria internet e seus serviços interativos mais usados: pesquisa, redes sociais, jogos online, agregadores de notícias, etc... Não é a toa que o pessoal de infra chama internet de nuvem há alguns anos, antes do termo ser propriamente cunhado. Você usa computação em nuvem e talvez nem tenha percebido isso... Buzzwords, quem liga pra elas, não é mesmo? :)

E onde entra o pessoal de infraestrutura nessa onda toda? Arquitetos e sysadmins principalmente(vulgos systems engineers)? Esses profissionais são responsáveis por definir qual o ambiente de "computação em grade"(grid computing) será adotado para atender a demanda de uso dos softwares oferecidos. A "computação em grade" estabelece quais recursos de hardware e software trabalharão juntamente para formar uma unidade de processamento computacional de alta performance. E finalmente então surgem os clusters, que devem ser particionados em ilhas de computadores trabalhando para atender uma ou mais qualidades de sistema(requisitos não funcionais, ou capacidades). Grids e clusters distribuídos são de fato a implementação da "computação em nuvem".

Além de performance e escalabilidade, determinados ambientes tem um terceiro fator chamado "alta disponibilidade", que está diretamente ligado com a confiabilidade e estabilidade da aplicação perante o usuário. A "alta disponibilidade" estabelece parâmetros como tempo máximo de resposta de uma requisição(independentemente da carga), tempo máximo de parada do sistema em um determinado período, capacidade de atualização da aplicação em qualquer momento sem haver nenhuma perda de requisição ao sistema, entre outros. E é responsabilidade da infraestrutura definir qual suporte de hardware e software integrados devem ser usados para atingir tais objetivos. A tendência hoje é a fuga das soluções de hardware ou proprietárias e o uso de soluções de software open source grátis para atingir tais objetivos. Claro que o mais importante é sempre atender a necessidade, verificando questões como qualidade e custo/benefício desejados e o que oferece cada opção avaliada, independente do fornecedor.

No próximo post vamos falar a respeito das qualidades de sistema possíveis em ambientes de nuvem, cluster e grid.

E no último post vamos citar quais tecnologias Java e relacionadas podem ser utilizadas para implementar tais capacidades em determinados cenários, ou seja, aplicabilidade de soluções para problemas reais.

Convido outros globalcoders e a comunidade em geral para uma discussão sobre esse tema. Espero que esses posts ajudem ao menos para tornar a nuvem algo menos nublado... ;)

JV -- julioviegas.com

Comentários

Yara Senger disse…
Excelente post Julio, a dificuldade de distinguir as palavras da moda e as tecnologias pré-existentes é recorrente, aconteceu com WebServices, SOA, AJAX, Web 2.0... e provavelmente vai acontecer muitas outras vezes.

Realizamos uma pesquisa sobre o tema do próximo Casual Class e o tema vencedor foi Cloud Computing.

Conforme conversamos anteriormente acho que seria interessante para o tema Cloud Computing uma abordagem diferente (embora as avaliações do Casual Class de Java EE 6 tenham sido excelentes).

A idéia seria:
- Apresentação de 45-60min para nivelar os principais conceitos de computação em nuvem;
- Discussão com profissionais que estão utilizando diferentes implementações: Google App Engine, Terracota, VMWare, etc...

Vamos nessa?

Yara Senger
Julio Viegas disse…
Yara,

Legal saber que o próximo Casual Class será sobre Cloud Computing!

Vamos elaborar melhor a agenda em conjunto com outros globalcoders conforme conversado no último encontro. Depois divulgamos via boletim.

Tou nessa! ;)
legal, não vou perder essa, já postei uma vez em meu blog algo sobre cloud computing, e acredito fortemente que será o caminho nas novas aplicações (inclusive já temos muitas empresas usando essa metodologia, exemplo disso são os servidores de banco de dados da google).

Não quero perder! =]

Postagens mais visitadas deste blog

JavaMail: Enviando mensagem HTML com anexos

Introdução Depois do post "JavaMail: Enviando e-mail com Java" , que apresentava como enviar um e-mail com Java, resolvi complementar a assunto apresentando como enviar uma mensagem formatada, em HTML , e também como realizar o envio de anexos. Bibliotecas Além da biblioteca JavaMail, veja mais no post anterior , é necessário incluir o JavaBeans Activation Framework (JAF), apenas se a versão utilizada for anterior ao JSE 6.0 , que já tem o JAF incluso. O JAF está disponível em http://www.oracle.com/technetwork/java/javase/downloads/index-135046.html , e neste download encontramos, alguns exemplos na pasta demo , documentação, incluindo javadocs, na pasta docs e a biblioteca activation.jar , que deve ser acrescentada no classpath da aplicação para versões anteriores ao JSE 6.0. Exemplo Primeiramente devemos realizar a configuração da javax.mail.Session e da javax.mail.internet.MimeMessage , estes passos podem ser vistos no post anterior . Agora vamos montar um

O que é Lógica de programação?

Este é o segundo de uma série de posts voltados aos leitores do blog que estão dando início à carreira de desenvolvimento de software. O assunto de hoje é a lógica de programação. Para ler antes: Entendendo como funciona a programação de computadores: linguagens de programação, lógica, banco de dados A lógica de programação é um pré-requisito para quem quer se tornar um desenvolvedor de software, independente da linguagem de programação que se pretende utilizar. Mas o que é de fato a Lógica de Programação e como saber se eu tenho esse pré-requisito? A lógica de programação nada mais é do que a organização coerente das instruções do programa para que seu objetivo seja alcançado. Para criar essa organização, instruções simples do programa, como mudar o valor de uma variável ou desenhar uma imagem na tela do computador, são interconectadas a estruturas lógicas que guiam o fluxo da execução do programa. Isso é muito próximo ao que usamos em nosso cotidiano para realizar atividad

Devo fazer um curso ou ler um livro?

Acredito que todos os instrutores ou professores, independentemente da área, escola ou centro de treinamento, já devam ter recebido essa pergunta alguma vez na vida: devo fazer um curso ou ler um livro? Para responder a essa pergunta, precisamos avaliar os prós e contras de cada opção. Trabalho com treinamento há algum tempo e, hoje, recebi essa pergunta de um aluno. Não adianta responder a ou b sem argumentar, demonstrando as opções conforme a situação do aluno. O conteúdo, a forma de transmissão e a capacidade de assimilação do indivíduo são chaves para haver benefício maior de aprendizado. Tanto em um bom curso quanto em um bom livro, o conteúdo é a premissa básica . Por conteúdo entendemos: se está organizado; se respeita pré-requisitos; se promove o aprendizado guiado e incremental; se aborda de forma satisfatória os principais pontos; se tem bom balanço entre teoria, exemplos e prática (favorecendo exemplos e prática); se tem como premissa a acessibilidade possível (e cabível) pa

Lançamento do JDK 7 no TDC2011 em São Paulo

O The Developer's Conference foi realmente um grande momento para toda comunidade de desenvolvedores, um encontro de comunidades de TI onde foi possível interagir com pessoas incríveis das comunidades .NET, PHP, Python, Cloud, Games e tantas outras. Com mais de 200 palestrantes e 25 coordenadores é difícil até citar nomes sem ser injusta. Neste post gostaria de falar um pouco sobre um acontecimento muito especial para a comunidade Java, o Lançamento mundial do JDK 7! A história toda começou há muito tempo atrás, num relacionamento construído ao longo de vários anos de atuação dos membros do SouJava, participando do JavaOne, das JSRs e muito networking. Mas, durante o último JustJava conversamos com Roger Brinkley e Bruno Souza, e tivemos a felicidade de ter o TDC2011 exatamente no dia planejado para o Lançamento Mundial do JDK7. O grande mérito foi do SouJava e do amigo Bruno Souza (JavaMan). Com a participação formal no Executive Committeé do JCP estamos ficando cada vez ma

Literais da Linguagem Java

Na última semana, tive uma conversa com um profissional Java iniciante que me apresentou dúvidas sobre o uso de valores hexadecimal na linguagem, inicialmente entendi que ele precisava da representação textual de um valor hexadecimal, então apresentei um método da classe wrapper Integer, conforme segue: int valor = 15; System.out.println(Integer.toHexString(valor)); //Imprime f Só então após mostrar este exemplo, ficou claro que ele precisava exatamente do contrário, ou seja, qual a forma mais fácil de converter um número hexadecimal para um número decimal para atribuição a uma variável primitiva inteira. Esclareci que para isso não havia necessidade de conversão, bastaria usar uma literal hexadecimal presente na linguagem Java da seguinte forma: int valor = 0xf; // ou 0XF System.out.println(valor); //Imprime 15 Este episódio me motivou a escrever este post sobre os literais da Linguagem Java, então vamos lá. De acordo com a especificação da linguagem (The Java™ Language Specification

Entendendo como funciona a programação de computadores: linguagens de programação, lógica, banco de dados

Nesse post, diferente dos últimos que foram mais enfáticos nas experiências com tecnologias, vou focar um pouco mais nos profissionais que estão começando, ou pretendem ingressar na área de desenvolvimento de software, falando sobre conceitos fundamentais relacionados a programação em geral . Mercado de trabalho para programação Conforme já sabemos, o mercado de desenvolvimento de software, especialmente no Brasil, continua em franca expansão, sendo que cada vez mais as empresas buscam desenvolver seus próprios sistemas usando as mais diferentes e novas tecnologias. Algumas matérias interessantes: As seis profissões mais valorizadas em 2010 no IDG Now! Muitas vagas e sensação de reaquecimento da economia Por isso, a área de desenvolvimento de software tem despertado interesse em muitos profissionais de outras áreas que desejam mudar de profissão, já que as oportunidades de trabalho tendem a ser maiores. Esse é um perfil presente em muitos dos clientes da Globalcode que acabou m