Ficando nas Nuvens Com o Google App Engine

3,660 views

Published on

Apresentação realizada no #javaday de 2010 em São josé do Rio Preto.

Published in: Technology

Ficando nas Nuvens Com o Google App Engine

  1. 1. FICANDO NAS NUVENS COM O GOOGLE APP ENGINE Pedro Mariano pedro.mariano@caelum.com.br
  2. 2. QUEM SOU EU?
  3. 3. SISTEMAS Disponibilidade Performance Escalabilidade
  4. 4. É SIMPLES
  5. 5. É SIMPLES
  6. 6. É SIMPLES Tomcat MySQL
  7. 7. É SIMPLES Tomcat MySQL
  8. 8. É SIMPLES Tomcat MySQL Tomcat
  9. 9. É SIMPLES Tomcat MySQL Proxy Reverso Tomcat
  10. 10. É SIMPLES Tomcat MySQL Proxy Reverso Tomcat MySQL
  11. 11. Proxy Reverso É SIMPLES Tomcat Tomcat Session Compartilhada MySQL MySQL
  12. 12. Proxy Reverso É SIMPLES Tomcat Tomcat Session Compartilhada MySQL MySQL
  13. 13. É SIMPLES Tomcat MySQL Session Compartilhada Proxy Reverso Tomcat MySQL Tomcat MySQL Tomcat MySQL
  14. 14. É SIMPLES Tomcat MySQL Session Compartilhada Proxy Reverso Tomcat MySQL Tomcat MySQL Tomcat MySQL
  15. 15. É SIMPLES Tomcat MySQL Session Compartilhada Proxy Reverso Tomcat MySQL Tomcat MySQL Tomcat MySQL
  16. 16. É SIMPLES Tomcat MySQL Session Compartilhada Proxy Reverso Tomcat MySQL Tomcat MySQL Tomcat MySQL
  17. 17. É SIMPLES Tomcat MySQL Session Compartilhada Proxy Reverso Tomcat MySQL Tomcat MySQL Tomcat MySQL
  18. 18. DOR DE CABEÇA
  19. 19. CARO
  20. 20. A PROVA DE BALAS?
  21. 21. A PROVA DE BALAS?
  22. 22. NÃO SERIA MELHOR?
  23. 23. NÃO SERIA MELHOR?
  24. 24. NÃO SERIA MELHOR? Jetty BigTable
  25. 25. NÃO SERIA MELHOR? Jetty BigTable
  26. 26. NÃO SERIA MELHOR? Jetty BigTable Jetty
  27. 27. NÃO SERIA MELHOR? Jetty BigTable Jetty
  28. 28. NÃO SERIA MELHOR? Jetty BigTable Jetty Jetty Jetty
  29. 29. NÃO SERIA MELHOR? On Demand Jetty BigTable Jetty Jetty Jetty
  30. 30. NÃO SERIA MELHOR? On Demand Jetty BigTable Jetty Jetty Jetty
  31. 31. NÃO SERIA MELHOR? On Demand Jetty BigTable Jetty Jetty Jetty
  32. 32. NÃO SERIA MELHOR? On Demand Jetty BigTable Jetty Jetty Jetty
  33. 33. NÃO SERIA MELHOR? On Demand Jetty BigTable Jetty Jetty Jetty
  34. 34. NÃO SERIA MELHOR? On Demand Jetty BigTable Jetty Jetty
  35. 35. NÃO SERIA MELHOR? On Demand Jetty BigTable Jetty Jetty
  36. 36. NÃO SERIA MELHOR? On Demand Jetty BigTable Jetty
  37. 37. E AGORA QUEM PODERÁ NOS AJUDAR? Escalabilidade Disponibilidade Performance Sem dor de Cabeça Baixo Custo
  38. 38. CLOUD COMPUTING
  39. 39. GOOGLE APP ENGINE
  40. 40. PLATAFORMA
  41. 41. LINGUAGENS
  42. 42. MAIS LINGUAGENS
  43. 43. ARQUITETURA Images Tasks APP Web Email HTTP Jetty MemCache BigTable
  44. 44. O QUE EU PRECISO?
  45. 45. CRIE UMA APP
  46. 46. PLUGIN PARA O ECLIPSE + Ambiente SDK Interface
  47. 47. APPENGINE-WEB.XML <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>caelumcombr</application> <version>testing</version> <sessions-enabled>true</sessions-enabled> </appengine-web-app>
  48. 48. E O RESTO? appengine-web.xml SDK do App Engine diretório war
  49. 49. VERSIONAMENTO APP Javaday teste http://teste.latest.javaday.appspot.com com func http://comfunc.latest.javaday.appspot.com layout antigo http://layoutantigo.latest.javaday.appspot.com
  50. 50. DICAS E CUIDADOS
  51. 51. CONHEÇA AS LIMITAÇÕES Criação de Arquivos Execução de Comandos Whitelist
  52. 52. BANCO DE DADOS COMPARTILHADO APP Javaday teste BigTable com func layout antigo
  53. 53. EU MENTI
  54. 54. DATASTORE
  55. 55. NÃO SE DESESPERE
  56. 56. SE ADAPTE MemCache Leitura APP Web Datastore Jetty Escrita Tasks
  57. 57. BIGTABLE API // Get a handle on the datastore itself DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); // Lookup data by known key name Entity userEntity = datastore.get(KeyFactory.createKey("UserInfo", email)); // Or perform a query Query query = new Query("Task", userEntity); query.addFilter("dueDate", Query.FilterOperator.LESS_THAN, today); for (Entity taskEntity : datastore.prepare(query).asIterable()) { if ("done".equals(taskEntity.getProperty("status"))) { datastore.delete(taskEntity); } else { taskEntity.setProperty("status", "overdue"); datastore.put(taskEntity); } }
  58. 58. JPA <provider> org.datanucleus.store.appengine.jpa.DatastorePersistenceProvider </provider>
  59. 59. BIG TABLE + JPA Livro livro = new Livro(); manager.persist(livro);
  60. 60. APRENDA OUTRAS APIS Objectify Objectify ofy = ObjectifyService.begin(); ofy.put(new Livro()); Twig ObjectDatastore datastore  = new AnnotationObjectDatastore(); datastore.store(new Livro());
  61. 61. ESCOLHA BEM SUAS APIS Versão para o AppEngine
  62. 62. QUANTO CUSTA?
  63. 63. QUANTO CUSTA?
  64. 64. COTAS Limite Diário Taxa Máxima REQUESTS 1.300.000 7.400 /minute CPU 6.5 horas 15 CPU minutes QUERIES 10.000.000 57,000/minute
  65. 65. CAELUM E O GAE GAE Benefícios Cloud Vraptor 3 GAE = Praticidade e Tranquilidade Objectify Gasto 0
  66. 66. E A CONCORRÊNCIA? Amazon Terremark Google App Engine Salesforce 20 15 10 5 0 1-pixel GIF 2MB GIF CPU IO Fonte: Bitcurrent e Webmetrics
  67. 67. QUEM UTILIZA? http://appgallery.appspot.com/
  68. 68. FUTURO 99.9% disponibilidade MySQL For Business Suporte
  69. 69. EU DEVO UTILIZAR? Documentação (y) Experimente
  70. 70. OBRIGADO! http://www.caelum.com.br http://www.infoq.com/br DÚVIDAS? @pmariano pedro.mariano@caelum.com.br

×