SlideShare uma empresa Scribd logo
1 de 56
Google App Engine para Startups Enxutas:
The Good, The Bad and The Ugly
Marcio Marchini
marcio@betterdeveloper.net
Explicando o Título
1.The Good, The Bad and The Ugly
(Um clássico a ser assistido…)
Explicando o Título
2. Startups Enxutas
(Um bom livro a ser lido…)
Explicando o Título
3. Goole App Engine
(Uma Platform as a Service a ser explorada…)
PaaS, IaaS, etc
Fonte: Wikipedia
Ex. EC2
Ex. GAE
Ex. VOCÊ!
GAE Datastore: Comparativo
Imagem do Artigo: “Banco de dados como serviço” / revista “tema” / SERPRO
GAE: PaaS
Vamos ao que Interessa pra sua Startup Enxuta…
Lição Lean Startup #1: Web Site Estático Escalável
1. Uma App no App Engine pode ter parte estática
e parte dinâmica (Python, Java, etc)
2. O Web Site de sua empresa pode começar 100%
estático
3. E pode ser escalável… (brabilhões de visitantes)
4. E sem admin Linux, EC2 etc… ($$$)
5. E sem pagar taxa de hosting pra uso normal… ($)
6. E sem se incomodar com DDoS etc
7. …
Bebemos o Próprio Champagne… (nosso site é uma app GAE)
Matamos a Cobra e Mostramos o Pau: Site Estático no GAE
1. Vamos escolher um site estático qualquer na web o e vamos
colocá-lo no GAE. Exemplo aleatório:
http://www.promote-web-sites.com
2. Vamos fazer download de suas páginas:
wget --mirror -p --convert-links -P . http://www.promote-
web-sites.com
3. Faz de conta que esse é o meu site. Vamos colocá-lo no
GAE?  Mova as páginas HTML para uma pasta static ,
dentro do nossa pasta betdevgaenosql
mv ./www.promote-web-sites.com/*
/Users/mqm/betdevgaenosql/static
(2/4): Site Estático no GAE
4. Editemos app.yaml para poder servir páginas estáticas
(3/4): Site Estático no GAE – Testando Localmente
5. Clique Run (botão verde)
6. Visite:
http://localhost:8080/
7. Site estático!!
(4/4): Site Estático no GAE - Deploy
8. Clique Deploy no GAE Launcher (botão azul)
9. Visite: http://betdevgaenosql.appspot.com/
10.Site estático!!
(com URL feia )
Recapitulando
• Uma Google App (em Python, Java, etc) pode
servir conteúdo estático
• Podes fazer upload de seu site hoje
• Mas… como coloco uma URL raiz com meu
domínio (ex. www.betterdeveloper.net) ao invés
de *.appspot.com ?
Lição Lean Startup #2: Sua Página, Seu Domínio, GAE
1. Registre seu domínio em registro.br ou web.com ou outro
Registrar qualquer
2. Crie uma conta (gratuita) em www.ZoneEdit.com
3. Adicione uma Zone no ZoneEdit, correspondente ao seu
domínio
4. No seu Registrar, aponte o DNS para os valores do
ZoneEdit.com (ex. ns10.zoneedit.com , etc)
5. Adicione a entrada A e CNAME conforme abaixo
Sua Página, Seu Domínio, GAE
6. Crie uma conta gratuita Google Apps (<=10 contas no seu domínio)
7. Cria sua Google App nesse domínio
8. Crie o mapeamento de www no Google App para sua App
9. Deverá funcionar, igual ao www.betterdeveloper.net
Lição Lean Startup #3: Versões Distintas, Rollback
1. Temos que habilitar a versão 2 do site
2. Habilite o radio button, clique Make Default
3. Clique no “2”ao lado do radio button. Ele vai disparar a versão 2
do site
4. Clique no “1”ao lado do radio button. Ele vai disparar a versão 1
do site (original)
Lição Lean Startup #4: Versione seu conteúdo
1. Use Git ou Svn pra versionar os fontes do seu site. Use TAGs por
exemplo pra mapear pra versão ativa no ar (slide anterior)
2. Use uma conta gratuita xp-dev.com – pode ter 1 projeto não Open
Source, gratuitamente
3. Agora você tem rastreabilidade e governança de fontes e versões no ar,
gratuitamente. Fontes na Cloud (XP-Dev). “Binário”/site na Cloud
(GAE)”. Super Lean.
4. Ative o TRAC como sistema de tickets no XP-DEV. Pronto, agora até
suas sprints/backlogs/feature requests/bug fixes tem Roadmap na web
e governança na empresa.
Hello World no Estilo GAE
Hello, World!
GAE Hello World & Elasticidade (2011/06, Wicket)
http://<helloworld>.appspot.com , simulando 250 usuários concorrentes
por 10 minutos com http://sourceforge.net/projects/dieseltest/
GAE Hello World & Elasticidade (2011/06, Wicket)
GAE “Hello World” de Datastore (2011/06, Wicket)
CRUD de Redes de Hotéis e Hotéis
GAE “Hello World” de Datastore (2011/06, Wicket)
GUI versus
Datastore
The Good: 
(Coisas legais/boas no GAE)
Coisas boas GAE - Performance
• 5 milhões de pageviews / mês gratuitamente. Chega pra ti?
• Memchache distribuído, sem você precisar
instalar/configurar
• Conteúdo estático servido por servidores dedicados,
transparentemente. Não precisas penar configurando load
balancers / nginx etc e tal.
• Mantém sua app em RAM o máximo que dá (performance)
• Suporta tasks/background, no estilo cron
• Logging fácil, memcache fácil
• Utiliza o performático Jetty, envenenado:
http://www.infoq.com/news/2009/08/google-chose-jetty
• Suporte a SDPY na sua app
http://dev.chromium.org/spdy/spdy-whitepaper
Coisas boas GAE – Traffic Splitting
• A/B Testing etc etc
Coisas boas GAE – IDEs etc
• Suporte a Python, Go, Java (e linguagens que rodam na
JVM)
• Roda frameworks tipo Java Apache Wicket, Python
CherryPy. Suporta GWT etc.
https://spreadsheets.google.com/a/betterdeveloper.net/p
ub?key=pRJ_0hajVrhacLjp3HqD5ew
• Suportado por Eclipse (plugin GAE), PyCharm etc
• Suporta Ant
• Podes testar localmente antes
• Console interativo Python – rode snippets direto no
servidor, “peek/poke”
• Sua app pode receber email, entra como http request (GAE
cuida disso).
Coisas boas GAE - Storage
• Datastore “schemaless”. Fácil prototipar e evoluir.
• O NoSQL pode buscar baseado em propriedades
• Versão dev local analisa perfil de uso e já otimiza índices
do datastore
• SDK suporta upload/download de dados em modo “bulk”
• JPA significa que podes entrar/sair do GAE com mais
facilidade (evita lock-in). Well… (veja The Ugly)
• Datastore pode gerar unique keys automaticamente
• Memcache obedece standard JCache
• Memcache viewer no Python SDK
• Podes fazer sync GAE-NoSQL  MySQL externo com
https://github.com/k7d/approcket/wiki
Coisas boas GAE – Storage Relacional
• Não é só NoSQL. MySQL também suportado (Mas sem quota
gratuita)
• http://googleappengine.blogspot.com.br/2012/05/cloud-
sql-pick-plan-that-fits-your-app.html
• https://developers.google.com/cloud-sql/
Coisas boas GAE
• Console pra administração
• Múltiplas versões da app rodando concorrentemente
• Podes fazer uma app só pra sua “Intranet” – apenas
membros do seuDominio.com tem acesso
• 10 apps GAE por developer
• Sem Ads, mesmo nas apps free / conta free (ex. Gmail)
• Pode-se definir um limite máximo de custo por dia
• Boa integração com APIs Google: login, gtalk, imagens, etc
• Paypal ok:
http://www.dzone.com/links/setting_up_paypal_ipn_handlin
g_on_google_app_engi.html
• Possível mandar email pra app via XMPP, do console, pra
testes
Coisas boas GAE
• Duas implementações novas, não proprietárias
• http://en.wikipedia.org/wiki/AppScale
It hassupport for Python,Go,and Java applications,taking the open
source SDKprovided by Google App Engine and implementing scalable
servicessuch asthe datastore, memcache,blobstore,usersAPI,and
channel API.
• http://code.google.com/p/typhoonae/ (BETA)
Coisas boas GAE
• Google Data Centers
http://www.google.com/about/datacenters/inside/index.html
The Bad: 
(Coisas ruins no GAE – na nossa opinião)
Coisas ruins GAE…
• Livros obsoletos. Exemplo: dica de “main”/Python
pra cache em Programming Google App Engine: não
mais necessário com Python 2.7 (veja
https://developers.google.com/appengine/docs/p
ython/python25/migrate27#wsgi )
Coisas ruins GAE…
• Feito pra requests que demorem <1s. Se demorar
>60s, você é assassinado (no livro – obsoleto - fala
30s, mas
https://developers.google.com/appengine/docs/p
ython/runtime#The_Request_Timer diz 60.
• File Upload?Que maisdemora >60sna web?
• Async URLfetch serve pra mitigar a maioria dos
cenários
New Relic não Rola 
“The restrictionsthat exist under Google App Engine,
such asthose on background threads, aswell ashow
processesare managed, mean that the Python agent as
it isimplemented at present will not work asis.There are
no plansat thispoint to support Google App Engine.”
 Use o Dashboard “toco-duro” GAE… 
Apple iOS Push Notification não Rola 
Sandbox: não podes abrir conexão socket pros
servidores de Push da Apple
 Precisasde uma máquina na EC2 etc que
responda à sua app no GAEvia RESTe essa sim faz o
push pra Apple.Sugestão: RabbitMQ/REST
http://code.google.com/p/amqp-rest/
 Ou: espera o Beta graduar:
http://code.google.com/p/googleappengine/issues/det
ail?id=1164
WebSockets não rola 
Algo tipo Trello, que usa WebSockets (segundo artigo
publicado), não funciona pelo mesmo motivo (conexões
socket persistentes/ longas)
Mastem a Channel API:
https://developers.google.com/appengine/docs/java/channel/o
verview
The Channel API createsa persistent connection between your application
and Google servers,allowing your application to send messagesto
JavaScript clientsin real time without the use of polling.Thisisuseful for
applicationsdesigned to update usersabout new information immediately.
 Sentiu-se atolando na areia movediça da plataforma proprietária?
Minha Framework Web Favorita não vem pré-carregada 
CherryPy não vem pré-carregada
https://developers.google.com/appengine/docs/python
/tools/libraries27
Tensque empacotar o zip junto e
dinamicamente adicionar no path
 Ou seja: não é problema, funciona ok
Coisas ruins GAE
• Modelo limitado/Sandbox – mais proteção, mas… mais
restrição
• (2011) Não suporta(va) Full Text Search (pense CMS).
Aparentemente ok em 2012:
http://googleappengine.blogspot.com.br/2012/05/looking-for-search-
find-it-on-google.html
• (2011) Algumas operações, só com SDK de linha de comando.
Inexistência de GUI Launcher pra Linux (só Windows e Mac).
• Nem todas APIs oficiais são implementadas (ex trivial:
Thread/ThreadGroup Java)
• Muita coisa JPA aponta pra JDO, que está obsoleto
• (2011) Console Java mais limitado que o Python
• (2011) Servidor DEV/PC não suporta “background tasks” no
Python (GAE Era Preview até Setembro de 2011!!!)
Coisas ruins GAE
• Domínio customizado requer conta Google Apps (mas é free
pra 10 contas de usuário/colaborador/funcionário/whatever)
• Ativar 1 conta GAE/Developer requer 1 telefone celular. 3
domínios? Arrume 3 celulares 
• Não faz routing de domínio puro (foo.com) pra app. Tem que
ser algo como www.foo.com
•  Se usares www, tens que primeiro habilitar Sites, mudar
esse de www pra www2 ou algo assim, pra sua app poder
servir www.seuDominio.com
• Tipo de autenticação da App não pode mudar após criado o
seu ID
• Multithreaded p/ Python demorou a ser ativado (só agora
com Python 2.7). Era CGI ao invés de WSGI. (Mas Java já era
MT ok)
Coisas ruins GAE: PhD pra entender Índices
• Todas as queries usam índices
• Alguns índices são gerados automaticamente pra você
• Queries mais elaboradas precisam de índices pré-
definidos/criados no arquivo index.yaml
• Caso a query precise de um índice e esse não exista ainda,
vai dar erro/exceção
• O sistema tenta criar os índices pra você baseado nas queries
de desenvolvimento DEV/PC
Google Could SQL é pago
 Não dá pra ser enxuto se quiseresSQL ao invésde NoSQL
Alguns Limites em geral
 Fique atento…
https://developers.google.com/appengine/docs/python/runti
me#Quotas_and_Limits
Limites Free  Pago
 Datastore:
 Log:
Limites Free  Pago
 Bandwidth:
 tasks:
Mais: https://developers.google.com/appengine/docs/quotas
The Ugly: 
(Coisas bem ruins no GAE)
Coisas bem ruins GAE
• Acesso SSH? Esquece
• Precisou de uma ferramenta extra, tipo Sphinx? Esquece!
Lembre: Não tens um console Linux. PaaS!
Coisas bem ruins GAE: HTTPS
• Não suporta (va) HTTPS se sua app está com um domain
“bonito” tipo foo.bar.com (mas OK na forma
foo.appspot.com).
http://code.google.com/p/googleappengine/issues/detail?
id=792
• Isso vai me dificultar adicionar pagamento online VISA no
www.betterdeveloper.net
• Teoricamente arrumado em 06/2012 com SNI (Server
Name Indication) @ US$9/mês ou VIP (Virtual IP) @
US$99/mês -
http://googleappengine.blogspot.com.br/2012/06/google
-app-engine-170-released-at.html
Coisas bem ruins GAE: JPA “Alfa” (tvz ok em 2012?)
• (2011) Implementação JPA em cima de Datanucleous não
era oficialmente suportada pelo pessoal Datanucleous.
Muita limitação, muita dor de cabeça!!!
• Exemplo: Uma entidade "pai"e uma "filha" nao podem
ambaster @Id sendo um Long. A do filho tem que usar a
classe proprietária Key da Google.
Vejam http://code.google.com/p/datanucleus-
appengine/issues/detail?id=26 . Foi pro espaço sua
portabilidade JPA!!!!
  Aparentemente arrumaram em 2012:
http://code.google.com/p/datanucleus-
appengine/source/browse/branches/2_0_0/dist/RELEA
SE_NOTES.ORM
Coisas bem ruins GAE: App Engine Data != Big Data
1. JÁ QUE Google tem MapReduce & tem NoSQL Datastore
2. E JÁ QUE GAE roda na infra Google
• ENTÃO OBVIAMENTE minha GAE App pode ter BigData e eu
fazer MapReduce nos dados, certo? NÃO! Infelizmente, tens
que:
a. OU usar o produto BigQuery
https://cloud.google.com/products/big-query
b. OU usar Library MapReduce
http://code.google.com/p/appengine-mapreduce/ ,
https://developers.google.com/appengine/docs/python/da
taprocessing/overview (“ALFA”)
• Que por ora só tem o Mapper API (sem Reduce)
http://googleappengine.blogspot.com.br/2010/07/introd
ucing-mapper-api.html?m=1 ,
Coisas bem ruins GAE: Queries impossíveis GQL
 Testar 2 inequalidades de 2 propriedades distintas não rola
Coisas ruins GAE
• Portabilidade Problemática. Será que
http://en.wikipedia.org/wiki/AppScale é viável? Não
testei.
 Sentiu-se atolando na areia movediça da plataforma proprietária?
Conclusão
• Às Vezes o Barato Sai Caro… O Desafio é escolher o barato
certo (Linux Admin ou GAE Fees?)
• Try Before You Buy
• Your Mileage May Vary
• “Valeu à Pena? Tudo Vale a Pena se a Alma Não é
Pequena” --– Fernando Pessoa
• Investigue tb Heroku, Azure, etc
• Investigue tb Do-It-Yourself com Amazon EC2 e/ou
Amazon SimpleDB e/ou Amazon MapReduce (Hadoop)
Obrigado! E Lembre-se…
“To Know and not to do, is not to know”
http://en.wikipedia.org/wiki/Google_App_Engine
Slides em PDF no Site
http://www.BetterDeveloper.net/downloads.html

Mais conteúdo relacionado

Semelhante a gae

Apresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo SitesApresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo Sitesthiagolima
 
APIs gerenciadas de ponta a ponta - construção
APIs gerenciadas de ponta a ponta - construçãoAPIs gerenciadas de ponta a ponta - construção
APIs gerenciadas de ponta a ponta - construçãoFábio Rosato
 
Guião demotécnica
Guião demotécnicaGuião demotécnica
Guião demotécnicaSilvio Dias
 
Guiao demotecnica
Guiao demotecnicaGuiao demotecnica
Guiao demotecnicaSilvio Dias
 
Ajax para quem_ouviu_falar
Ajax para quem_ouviu_falarAjax para quem_ouviu_falar
Ajax para quem_ouviu_falarCharleston Anjos
 
Java Web Dev Introdução
Java Web Dev IntroduçãoJava Web Dev Introdução
Java Web Dev IntroduçãoMarcio Marinho
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Carlos Duarte do Nascimento
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineCampus Party Brasil
 
Apresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvemApresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvemRodrigo Valerio
 
Ebook - Processo de Otimização de Sites WordPress
Ebook - Processo de Otimização de Sites WordPressEbook - Processo de Otimização de Sites WordPress
Ebook - Processo de Otimização de Sites WordPressDaniel Paz
 
Rails - Wep-App-Theme no Liberdade Interativa Guarapari
Rails - Wep-App-Theme no Liberdade Interativa GuarapariRails - Wep-App-Theme no Liberdade Interativa Guarapari
Rails - Wep-App-Theme no Liberdade Interativa GuarapariAllan Freitas
 
Pangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud PlatformPangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud PlatformAndré Paulovich
 
Melhorando A Performance Da Sua Aplicação Web
Melhorando A Performance Da Sua Aplicação WebMelhorando A Performance Da Sua Aplicação Web
Melhorando A Performance Da Sua Aplicação WebMaurício Linhares
 
Curso ASP.Net - Módulo 1
Curso ASP.Net - Módulo 1Curso ASP.Net - Módulo 1
Curso ASP.Net - Módulo 1michellobo
 
Workshop do Bem: O mundo das APIs
Workshop do Bem: O mundo das APIsWorkshop do Bem: O mundo das APIs
Workshop do Bem: O mundo das APIsHeider Lopes
 

Semelhante a gae (20)

Apresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo SitesApresentação Minas - Desenvolvendo Sites
Apresentação Minas - Desenvolvendo Sites
 
Java no Google App Engine - TDC2011
Java no Google App Engine - TDC2011Java no Google App Engine - TDC2011
Java no Google App Engine - TDC2011
 
GWT
GWTGWT
GWT
 
APIs gerenciadas de ponta a ponta - construção
APIs gerenciadas de ponta a ponta - construçãoAPIs gerenciadas de ponta a ponta - construção
APIs gerenciadas de ponta a ponta - construção
 
Guião demotécnica
Guião demotécnicaGuião demotécnica
Guião demotécnica
 
Guiao demotecnica
Guiao demotecnicaGuiao demotecnica
Guiao demotecnica
 
Ajax para quem_ouviu_falar
Ajax para quem_ouviu_falarAjax para quem_ouviu_falar
Ajax para quem_ouviu_falar
 
Java Web Dev Introdução
Java Web Dev IntroduçãoJava Web Dev Introdução
Java Web Dev Introdução
 
Web Services
Web ServicesWeb Services
Web Services
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App Engine
 
Gwt
GwtGwt
Gwt
 
Apresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvemApresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvem
 
Cake Php
Cake PhpCake Php
Cake Php
 
Ebook - Processo de Otimização de Sites WordPress
Ebook - Processo de Otimização de Sites WordPressEbook - Processo de Otimização de Sites WordPress
Ebook - Processo de Otimização de Sites WordPress
 
Rails - Wep-App-Theme no Liberdade Interativa Guarapari
Rails - Wep-App-Theme no Liberdade Interativa GuarapariRails - Wep-App-Theme no Liberdade Interativa Guarapari
Rails - Wep-App-Theme no Liberdade Interativa Guarapari
 
Pangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud PlatformPangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud Platform
 
Melhorando A Performance Da Sua Aplicação Web
Melhorando A Performance Da Sua Aplicação WebMelhorando A Performance Da Sua Aplicação Web
Melhorando A Performance Da Sua Aplicação Web
 
Curso ASP.Net - Módulo 1
Curso ASP.Net - Módulo 1Curso ASP.Net - Módulo 1
Curso ASP.Net - Módulo 1
 
Workshop do Bem: O mundo das APIs
Workshop do Bem: O mundo das APIsWorkshop do Bem: O mundo das APIs
Workshop do Bem: O mundo das APIs
 

Mais de Marcio Marchini

Mais de Marcio Marchini (9)

Critérios de Aceite de Código Para Times Internos ou Terceirizados
Critérios de Aceite de Código Para Times Internos ou TerceirizadosCritérios de Aceite de Código Para Times Internos ou Terceirizados
Critérios de Aceite de Código Para Times Internos ou Terceirizados
 
É Pythonico, mas... é macarrônico
É Pythonico, mas... é macarrônicoÉ Pythonico, mas... é macarrônico
É Pythonico, mas... é macarrônico
 
Whitepaper-Custos
Whitepaper-CustosWhitepaper-Custos
Whitepaper-Custos
 
01-a-Intro-BetterDev
01-a-Intro-BetterDev01-a-Intro-BetterDev
01-a-Intro-BetterDev
 
OmbrosDeGigantes-TDC2014
OmbrosDeGigantes-TDC2014OmbrosDeGigantes-TDC2014
OmbrosDeGigantes-TDC2014
 
BDD-NamoroOn
BDD-NamoroOnBDD-NamoroOn
BDD-NamoroOn
 
01-b-Ping
01-b-Ping01-b-Ping
01-b-Ping
 
mqm-Agile
mqm-Agilemqm-Agile
mqm-Agile
 
Branches-Intro
Branches-IntroBranches-Intro
Branches-Intro
 

gae

  • 1. Google App Engine para Startups Enxutas: The Good, The Bad and The Ugly Marcio Marchini marcio@betterdeveloper.net
  • 2. Explicando o Título 1.The Good, The Bad and The Ugly (Um clássico a ser assistido…)
  • 3. Explicando o Título 2. Startups Enxutas (Um bom livro a ser lido…)
  • 4. Explicando o Título 3. Goole App Engine (Uma Platform as a Service a ser explorada…)
  • 5. PaaS, IaaS, etc Fonte: Wikipedia Ex. EC2 Ex. GAE Ex. VOCÊ!
  • 6. GAE Datastore: Comparativo Imagem do Artigo: “Banco de dados como serviço” / revista “tema” / SERPRO
  • 7. GAE: PaaS Vamos ao que Interessa pra sua Startup Enxuta…
  • 8. Lição Lean Startup #1: Web Site Estático Escalável 1. Uma App no App Engine pode ter parte estática e parte dinâmica (Python, Java, etc) 2. O Web Site de sua empresa pode começar 100% estático 3. E pode ser escalável… (brabilhões de visitantes) 4. E sem admin Linux, EC2 etc… ($$$) 5. E sem pagar taxa de hosting pra uso normal… ($) 6. E sem se incomodar com DDoS etc 7. …
  • 9. Bebemos o Próprio Champagne… (nosso site é uma app GAE)
  • 10. Matamos a Cobra e Mostramos o Pau: Site Estático no GAE 1. Vamos escolher um site estático qualquer na web o e vamos colocá-lo no GAE. Exemplo aleatório: http://www.promote-web-sites.com 2. Vamos fazer download de suas páginas: wget --mirror -p --convert-links -P . http://www.promote- web-sites.com 3. Faz de conta que esse é o meu site. Vamos colocá-lo no GAE?  Mova as páginas HTML para uma pasta static , dentro do nossa pasta betdevgaenosql mv ./www.promote-web-sites.com/* /Users/mqm/betdevgaenosql/static
  • 11. (2/4): Site Estático no GAE 4. Editemos app.yaml para poder servir páginas estáticas
  • 12. (3/4): Site Estático no GAE – Testando Localmente 5. Clique Run (botão verde) 6. Visite: http://localhost:8080/ 7. Site estático!!
  • 13. (4/4): Site Estático no GAE - Deploy 8. Clique Deploy no GAE Launcher (botão azul) 9. Visite: http://betdevgaenosql.appspot.com/ 10.Site estático!! (com URL feia )
  • 14. Recapitulando • Uma Google App (em Python, Java, etc) pode servir conteúdo estático • Podes fazer upload de seu site hoje • Mas… como coloco uma URL raiz com meu domínio (ex. www.betterdeveloper.net) ao invés de *.appspot.com ?
  • 15. Lição Lean Startup #2: Sua Página, Seu Domínio, GAE 1. Registre seu domínio em registro.br ou web.com ou outro Registrar qualquer 2. Crie uma conta (gratuita) em www.ZoneEdit.com 3. Adicione uma Zone no ZoneEdit, correspondente ao seu domínio 4. No seu Registrar, aponte o DNS para os valores do ZoneEdit.com (ex. ns10.zoneedit.com , etc) 5. Adicione a entrada A e CNAME conforme abaixo
  • 16. Sua Página, Seu Domínio, GAE 6. Crie uma conta gratuita Google Apps (<=10 contas no seu domínio) 7. Cria sua Google App nesse domínio 8. Crie o mapeamento de www no Google App para sua App 9. Deverá funcionar, igual ao www.betterdeveloper.net
  • 17. Lição Lean Startup #3: Versões Distintas, Rollback 1. Temos que habilitar a versão 2 do site 2. Habilite o radio button, clique Make Default 3. Clique no “2”ao lado do radio button. Ele vai disparar a versão 2 do site 4. Clique no “1”ao lado do radio button. Ele vai disparar a versão 1 do site (original)
  • 18. Lição Lean Startup #4: Versione seu conteúdo 1. Use Git ou Svn pra versionar os fontes do seu site. Use TAGs por exemplo pra mapear pra versão ativa no ar (slide anterior) 2. Use uma conta gratuita xp-dev.com – pode ter 1 projeto não Open Source, gratuitamente 3. Agora você tem rastreabilidade e governança de fontes e versões no ar, gratuitamente. Fontes na Cloud (XP-Dev). “Binário”/site na Cloud (GAE)”. Super Lean. 4. Ative o TRAC como sistema de tickets no XP-DEV. Pronto, agora até suas sprints/backlogs/feature requests/bug fixes tem Roadmap na web e governança na empresa.
  • 19. Hello World no Estilo GAE Hello, World!
  • 20. GAE Hello World & Elasticidade (2011/06, Wicket) http://<helloworld>.appspot.com , simulando 250 usuários concorrentes por 10 minutos com http://sourceforge.net/projects/dieseltest/
  • 21. GAE Hello World & Elasticidade (2011/06, Wicket)
  • 22. GAE “Hello World” de Datastore (2011/06, Wicket) CRUD de Redes de Hotéis e Hotéis
  • 23. GAE “Hello World” de Datastore (2011/06, Wicket) GUI versus Datastore
  • 24. The Good:  (Coisas legais/boas no GAE)
  • 25. Coisas boas GAE - Performance • 5 milhões de pageviews / mês gratuitamente. Chega pra ti? • Memchache distribuído, sem você precisar instalar/configurar • Conteúdo estático servido por servidores dedicados, transparentemente. Não precisas penar configurando load balancers / nginx etc e tal. • Mantém sua app em RAM o máximo que dá (performance) • Suporta tasks/background, no estilo cron • Logging fácil, memcache fácil • Utiliza o performático Jetty, envenenado: http://www.infoq.com/news/2009/08/google-chose-jetty • Suporte a SDPY na sua app http://dev.chromium.org/spdy/spdy-whitepaper
  • 26. Coisas boas GAE – Traffic Splitting • A/B Testing etc etc
  • 27. Coisas boas GAE – IDEs etc • Suporte a Python, Go, Java (e linguagens que rodam na JVM) • Roda frameworks tipo Java Apache Wicket, Python CherryPy. Suporta GWT etc. https://spreadsheets.google.com/a/betterdeveloper.net/p ub?key=pRJ_0hajVrhacLjp3HqD5ew • Suportado por Eclipse (plugin GAE), PyCharm etc • Suporta Ant • Podes testar localmente antes • Console interativo Python – rode snippets direto no servidor, “peek/poke” • Sua app pode receber email, entra como http request (GAE cuida disso).
  • 28. Coisas boas GAE - Storage • Datastore “schemaless”. Fácil prototipar e evoluir. • O NoSQL pode buscar baseado em propriedades • Versão dev local analisa perfil de uso e já otimiza índices do datastore • SDK suporta upload/download de dados em modo “bulk” • JPA significa que podes entrar/sair do GAE com mais facilidade (evita lock-in). Well… (veja The Ugly) • Datastore pode gerar unique keys automaticamente • Memcache obedece standard JCache • Memcache viewer no Python SDK • Podes fazer sync GAE-NoSQL  MySQL externo com https://github.com/k7d/approcket/wiki
  • 29. Coisas boas GAE – Storage Relacional • Não é só NoSQL. MySQL também suportado (Mas sem quota gratuita) • http://googleappengine.blogspot.com.br/2012/05/cloud- sql-pick-plan-that-fits-your-app.html • https://developers.google.com/cloud-sql/
  • 30. Coisas boas GAE • Console pra administração • Múltiplas versões da app rodando concorrentemente • Podes fazer uma app só pra sua “Intranet” – apenas membros do seuDominio.com tem acesso • 10 apps GAE por developer • Sem Ads, mesmo nas apps free / conta free (ex. Gmail) • Pode-se definir um limite máximo de custo por dia • Boa integração com APIs Google: login, gtalk, imagens, etc • Paypal ok: http://www.dzone.com/links/setting_up_paypal_ipn_handlin g_on_google_app_engi.html • Possível mandar email pra app via XMPP, do console, pra testes
  • 31. Coisas boas GAE • Duas implementações novas, não proprietárias • http://en.wikipedia.org/wiki/AppScale It hassupport for Python,Go,and Java applications,taking the open source SDKprovided by Google App Engine and implementing scalable servicessuch asthe datastore, memcache,blobstore,usersAPI,and channel API. • http://code.google.com/p/typhoonae/ (BETA)
  • 32. Coisas boas GAE • Google Data Centers http://www.google.com/about/datacenters/inside/index.html
  • 33. The Bad:  (Coisas ruins no GAE – na nossa opinião)
  • 34. Coisas ruins GAE… • Livros obsoletos. Exemplo: dica de “main”/Python pra cache em Programming Google App Engine: não mais necessário com Python 2.7 (veja https://developers.google.com/appengine/docs/p ython/python25/migrate27#wsgi )
  • 35. Coisas ruins GAE… • Feito pra requests que demorem <1s. Se demorar >60s, você é assassinado (no livro – obsoleto - fala 30s, mas https://developers.google.com/appengine/docs/p ython/runtime#The_Request_Timer diz 60. • File Upload?Que maisdemora >60sna web? • Async URLfetch serve pra mitigar a maioria dos cenários
  • 36. New Relic não Rola  “The restrictionsthat exist under Google App Engine, such asthose on background threads, aswell ashow processesare managed, mean that the Python agent as it isimplemented at present will not work asis.There are no plansat thispoint to support Google App Engine.”  Use o Dashboard “toco-duro” GAE… 
  • 37. Apple iOS Push Notification não Rola  Sandbox: não podes abrir conexão socket pros servidores de Push da Apple  Precisasde uma máquina na EC2 etc que responda à sua app no GAEvia RESTe essa sim faz o push pra Apple.Sugestão: RabbitMQ/REST http://code.google.com/p/amqp-rest/  Ou: espera o Beta graduar: http://code.google.com/p/googleappengine/issues/det ail?id=1164
  • 38. WebSockets não rola  Algo tipo Trello, que usa WebSockets (segundo artigo publicado), não funciona pelo mesmo motivo (conexões socket persistentes/ longas) Mastem a Channel API: https://developers.google.com/appengine/docs/java/channel/o verview The Channel API createsa persistent connection between your application and Google servers,allowing your application to send messagesto JavaScript clientsin real time without the use of polling.Thisisuseful for applicationsdesigned to update usersabout new information immediately.  Sentiu-se atolando na areia movediça da plataforma proprietária?
  • 39. Minha Framework Web Favorita não vem pré-carregada  CherryPy não vem pré-carregada https://developers.google.com/appengine/docs/python /tools/libraries27 Tensque empacotar o zip junto e dinamicamente adicionar no path  Ou seja: não é problema, funciona ok
  • 40. Coisas ruins GAE • Modelo limitado/Sandbox – mais proteção, mas… mais restrição • (2011) Não suporta(va) Full Text Search (pense CMS). Aparentemente ok em 2012: http://googleappengine.blogspot.com.br/2012/05/looking-for-search- find-it-on-google.html • (2011) Algumas operações, só com SDK de linha de comando. Inexistência de GUI Launcher pra Linux (só Windows e Mac). • Nem todas APIs oficiais são implementadas (ex trivial: Thread/ThreadGroup Java) • Muita coisa JPA aponta pra JDO, que está obsoleto • (2011) Console Java mais limitado que o Python • (2011) Servidor DEV/PC não suporta “background tasks” no Python (GAE Era Preview até Setembro de 2011!!!)
  • 41. Coisas ruins GAE • Domínio customizado requer conta Google Apps (mas é free pra 10 contas de usuário/colaborador/funcionário/whatever) • Ativar 1 conta GAE/Developer requer 1 telefone celular. 3 domínios? Arrume 3 celulares  • Não faz routing de domínio puro (foo.com) pra app. Tem que ser algo como www.foo.com •  Se usares www, tens que primeiro habilitar Sites, mudar esse de www pra www2 ou algo assim, pra sua app poder servir www.seuDominio.com • Tipo de autenticação da App não pode mudar após criado o seu ID • Multithreaded p/ Python demorou a ser ativado (só agora com Python 2.7). Era CGI ao invés de WSGI. (Mas Java já era MT ok)
  • 42. Coisas ruins GAE: PhD pra entender Índices • Todas as queries usam índices • Alguns índices são gerados automaticamente pra você • Queries mais elaboradas precisam de índices pré- definidos/criados no arquivo index.yaml • Caso a query precise de um índice e esse não exista ainda, vai dar erro/exceção • O sistema tenta criar os índices pra você baseado nas queries de desenvolvimento DEV/PC
  • 43. Google Could SQL é pago  Não dá pra ser enxuto se quiseresSQL ao invésde NoSQL
  • 44. Alguns Limites em geral  Fique atento… https://developers.google.com/appengine/docs/python/runti me#Quotas_and_Limits
  • 45. Limites Free  Pago  Datastore:  Log:
  • 46. Limites Free  Pago  Bandwidth:  tasks: Mais: https://developers.google.com/appengine/docs/quotas
  • 47. The Ugly:  (Coisas bem ruins no GAE)
  • 48. Coisas bem ruins GAE • Acesso SSH? Esquece • Precisou de uma ferramenta extra, tipo Sphinx? Esquece! Lembre: Não tens um console Linux. PaaS!
  • 49. Coisas bem ruins GAE: HTTPS • Não suporta (va) HTTPS se sua app está com um domain “bonito” tipo foo.bar.com (mas OK na forma foo.appspot.com). http://code.google.com/p/googleappengine/issues/detail? id=792 • Isso vai me dificultar adicionar pagamento online VISA no www.betterdeveloper.net • Teoricamente arrumado em 06/2012 com SNI (Server Name Indication) @ US$9/mês ou VIP (Virtual IP) @ US$99/mês - http://googleappengine.blogspot.com.br/2012/06/google -app-engine-170-released-at.html
  • 50. Coisas bem ruins GAE: JPA “Alfa” (tvz ok em 2012?) • (2011) Implementação JPA em cima de Datanucleous não era oficialmente suportada pelo pessoal Datanucleous. Muita limitação, muita dor de cabeça!!! • Exemplo: Uma entidade "pai"e uma "filha" nao podem ambaster @Id sendo um Long. A do filho tem que usar a classe proprietária Key da Google. Vejam http://code.google.com/p/datanucleus- appengine/issues/detail?id=26 . Foi pro espaço sua portabilidade JPA!!!!   Aparentemente arrumaram em 2012: http://code.google.com/p/datanucleus- appengine/source/browse/branches/2_0_0/dist/RELEA SE_NOTES.ORM
  • 51. Coisas bem ruins GAE: App Engine Data != Big Data 1. JÁ QUE Google tem MapReduce & tem NoSQL Datastore 2. E JÁ QUE GAE roda na infra Google • ENTÃO OBVIAMENTE minha GAE App pode ter BigData e eu fazer MapReduce nos dados, certo? NÃO! Infelizmente, tens que: a. OU usar o produto BigQuery https://cloud.google.com/products/big-query b. OU usar Library MapReduce http://code.google.com/p/appengine-mapreduce/ , https://developers.google.com/appengine/docs/python/da taprocessing/overview (“ALFA”) • Que por ora só tem o Mapper API (sem Reduce) http://googleappengine.blogspot.com.br/2010/07/introd ucing-mapper-api.html?m=1 ,
  • 52. Coisas bem ruins GAE: Queries impossíveis GQL  Testar 2 inequalidades de 2 propriedades distintas não rola
  • 53. Coisas ruins GAE • Portabilidade Problemática. Será que http://en.wikipedia.org/wiki/AppScale é viável? Não testei.  Sentiu-se atolando na areia movediça da plataforma proprietária?
  • 54. Conclusão • Às Vezes o Barato Sai Caro… O Desafio é escolher o barato certo (Linux Admin ou GAE Fees?) • Try Before You Buy • Your Mileage May Vary • “Valeu à Pena? Tudo Vale a Pena se a Alma Não é Pequena” --– Fernando Pessoa • Investigue tb Heroku, Azure, etc • Investigue tb Do-It-Yourself com Amazon EC2 e/ou Amazon SimpleDB e/ou Amazon MapReduce (Hadoop)
  • 55. Obrigado! E Lembre-se… “To Know and not to do, is not to know” http://en.wikipedia.org/wiki/Google_App_Engine
  • 56. Slides em PDF no Site http://www.BetterDeveloper.net/downloads.html