java no google app engine - tdc2011
TRANSCRIPT
Apresentação
Frederico Maia Arantes / @fredmaia
Programador Java EE na PC Sistemas
Oracle Certified Java SE 6 Programmer (OCJP 6)
Instrutor Java na Supera Tecnologia
Um dos coordenadores do grupo Gojava
Artigo publicado na Easy Java Magazine 6
http://devsexperts.com
O conceito de cloud computing refere-se à utilização da memória, armazenamento,
processamento e/ou serviços de computadores e servidores compartilhados e interligados por meio da Internet, seguindo o
princípio da computação em grade.
O que você acha de sua aplicação ficar famosa e você começar a ter 200 mil
acessos por dia?
E se ela dobrar estes acessos da noite pro dia?
E se os acessos quadruplicarem?
E se for 10 vezes, 100 vezes mais acessos?
Mas e seu servidor, aguenta o tranco?
Seu momento de glória...
Cloud Computing
Surgiu por volta de 2008
Também conhecido como Computação em Nuvem
Google, IBM e Microsoft foram pioneiras
Nova fronteira da era digital
Entendendo a Cloud Computing
Estamos acostumados a salvar tudo em nossos
computadores físicos, localmente
Em um ambiente empresarial podemos acessar
arquivos e aplicações em um servidor
Uma vantangem é não precisar da internet
Entendendo a Cloud Computing
Internet muito “acessível e rápida”
Aplicativos e dados não precisam estar no
computador do usuário ou em um servidor
próximo
Este conteúdo fica nas “nuvens”, na internet
IaaS - Infrastructure as a Service
SaaS – Software as a Service
PaaS – Plataform as a Service
Principais tipos de cloud
Google Docs (SaaS)
Serviço na nuvem, onde usuários podem editar textos
planilhas, slides e outros, tudo na internet
É necessário apenas um browser
Não importa o SO ou o computador
Sem necessidade de nada instalado no computador
DropBox (SaaS)
Serviço para armazenamento de arquivos
Documentos sincronizados
Mantém versões de arquivos anteriores
Semelhante ao SVN usado por desenvolvedores,
porém mais simples
E2C Amazon (IaaS)
O cloud IaaS mais conhecido do mundo
Fornecimento de infraestrutura
Virtualização de servidores e também pode envolver
DNS, Redes, Firewall, E-mail e etc...
O propósito é algo como substituir o seu servidor
local
Google App Engine (PaaS)
Plataforma como serviço
Ambiente completo para desenvolvimento,
configuração e gerenciamento de suas
aplicações
Simulação do ambiente (sandbox)
Outro exemplo: Windows Azure
Google App Engine (PaaS)
Infraestrutura e qualidade do Google
Ambientes Java (JRuby, Groovy...) e Python
Persistência com Big Table (NoSQL)
Pague apenas pelo que usar
Vantagens do GAE
Escalabilidade infinita
Elasticidade
Disponibilidade
Mais barato
Mais vantagens do GAE
Desenvolvimento fácil
Ambiente simulado localmente
Confiável, mesmo com uma carga pesada e
grandes quantidades de dados
Ajuste e balanceamento de carga automático
Número de desenvolvedores usando
Número de aplicações no GAE
APIs de Serviço
Cache de memória (implementa JCache)
Solicitações HTTP e HTTPS (java.net)
Mensagens de email (JavaMail)
Manipulação de Imagens
Login com contas do Google
Cron, ferramenta que agenda tarefas
Gostei! Quero começar a usar!
Quanto custa?
Começe sem pagar!
Armazenamento de dados
Custo real dos recursos
Gostei mais ainda dos preços e das cotas gratuitas!
Como começo a desenvolver?
Ambiente de Desenvolvimento
Eclipse + AppEngine SDK + Plugin
One-click deploy
Fácil Gerenciamento
Fácil Gerenciamento
Fácil Gerenciamento
Fácil Gerenciamento
Padronização
Servlets 2.5 e JSP 2
JPA 1 e JDO 2
java.net
JavaMail
Jcache
JSE 5 e 6
O que podemos utilizar no GAE
Struts 2
JSF 1.2 e JSF 2.0
Spring MVC
Flex
REST
VRaptor
Fique atento
BigTable não é relacional (Nosql)
Acessar BigTable com JPA pode ser
complicado
Mesmo com JPA suas aplicações podem não
ser mais tão portáveis
Desvantagens
Sem funções de agregação (count, sum, max...)
Não existem joins
Código específico (JPQL, JDOQL) para JPA
Startup deve ser otimizado
Não pode gravar no sist. de arquivos, apenas
ler
Alternativas
Usar código específico
Datastore Low-level API (muito complexa)
Novos frameworks: Objectify, Twig, SimpleDS
Objectify
Objectify ofy = ObjectifyService.begin(); // Simple create Car porsche = new Car("2FAST", "red"); ofy.put(porsche); assert porsche.id != null; // id was autogenerated // Get it back Car fetched1 = ofy.get(new Key<Car>(Car.class, porsche.id)); Car fetched2 = ofy.get(Car.class, porsche.id); // equivalent assert areEqual(porsche, fetched1, fetched2); // Delete it ofy.delete(porsche);
Concluindo
Existem vantagens e desvantagens
Perdemos características como BD relacional,
porém ganhamos em outras
Preocupação com coisas novas
Em cloud é preciso confiar no seu fornecedor
Novidade! Google Cloud SQL
Ambiente MySQL com acesso Java via JDBC
Backup e escalonamento (quando necessário), são
feitos automaticamente pela plataforma.
Alta disponibilidade e confiabilidade: dados
replicados em múltiplos datacenters;
Falhas de hardware em um servidor, rack ou mesmo
datacenter inteiro, são gerenciadas pela plataforma