Your SlideShare is downloading. ×

Google AppEngine

180

Published on

Presentato al primo talk del Google Tech User Group Sardegna

Presentato al primo talk del Google Tech User Group Sardegna

Published in: Software
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
180
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
4
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Google AppEngine Sassari, 18 febbraio 2012
  • 2. Agenda 1. Introduzione 2. Applicazioni 3. Datastore 4. Task 5. Services 6. Conclusioni
  • 3. Il ‘service’ nel cloud computing Che tipo di servizi vengono offerti? • Software as a service • Infrastructure as a service • Platform as a service Il cloud computing offre il computing come servizio piuttosto che come prodotto
  • 4. Software as a service •Detto anche ‘software on demand’ •SW e dati sono centralizzati dal provider •I client accedono usando un thin client, normalmente tramite interfaccia web •I client pagano abbonamento per l’utilizzo del software SOFTWARE PLATFORM SERVERS <<use>> <<use>>
  • 5. Infrastructure as a service •Viene fornita una infrastruttura HW remota che può essere controllata con appositi tool o web services •Il service provider è responsabile del mantenimento di tali risorse remote •Lo strato applicativo (framework e software) al di sopra dell’HW è a cura del cliente SOFTWARE PLATFORM SERVERS <<configure>> <<install>> <<deploy>>
  • 6. Platform as a service SOFTWARE SERVERS <<monitor>> <<deploy>> PLATFORM •Il service provider fornisce piattaforme remote (basate ad esempio su J2EE o .Net) •I client possono deployare le loro applicazioni su tali piattaforme •Non è a carico del client la configurazione e ottimizzazione dell’hardware e dei server
  • 7. Services Microsoft Azure .Net/IIS/SqlServer Heroku Ruby/Java/Scala/ Python Force.com Ruby/Java/Scala/ Python Google AppEngine Java/Python PLATFORM AS A SERVICE INFRASTRUCTURE AS A SERVICE Amazon EC2
  • 8. Google AppEngine • piattaforma di sviluppo e di hosting di web applications di Google • le app e lo store relativo vengono distribuiti su più server •La tecnologia sottostante è la stessa dei siti web di Google • permette di interagire in modo semplice con altri servizi di Google •il servizio è gratuito entro una determinata soglia
  • 9. Agenda 1. Introduzione 2. Applicazioni 3. Datastore 4. Task 5. Services 6. Conclusioni
  • 10. Creazione applicazioni Dal sito appengine.google.com Bisogna avere un account Gmail Alle applicazioni viene assegnato l’url APP_ID.appspot.com Si possono creare fino a 10 applicazioni con lo stesso account
  • 11. Sviluppo applicazioni GAE supporta Java 5 e Java 6 GAE mette a disposizione il sdk e un plugin per Eclipse Le applicazioni sono normali web application J2EE • Possono essere sviluppate con qualsiasi IDE In WEB-INF/lib devono essere presenti le librerie Google AppEngine
  • 12. Configurazione applicazioni In WEB-INF deve essere presente il file appengine-web.xml, che contiene metainfo utili per il deploy dell’applicazione <appengine-web-app xmlns… <application>APP_1</application> <version>1</version> <sessions-enabled>true</sessions- enabled> <system-properties> <property name="java.util.logging.config.file“… </system-properties> <static-files> <include path="/js/**"/> </static-files>…
  • 13. Deploy applicazioni appcfg update V1 Google AppEngine APP_ 1 Il deploy viene eseguito da linea di comando utilizzando il tool appcfg (presente nel sdk) <appengine-web-app xmlns… <application>APP_1</application> <version>V1</version> …
  • 14. Static files Static files servers Frontends Google AppEngineappcfg update Una applicazione può specificare quali sono i suoi files statici GAE provvedere a piazzare questi su web server piuttosto che farli processare dall’application server <static-files> <include path="/css/**"/> <include path="/flash/**"/> <include path="/img/**"/> <include path="/js/**"/> </static-files>
  • 15. Configurazione performance applicazioni Potenza della macchina (più è potente, più consuma la soglia gratuita) Numero instanze dell’applicazione nel pool Latenza minima: il tempo che le request devono restare in coda prima di essere processate da una instanza
  • 16. Mappaggio app su proprio dominio Di default l’applicazione è sul dominio APP_ID.appspot.com GAE supporta il mappaggio di app su un altro dominio • ma non su ‘naked domains’: esempio, http://mydomain.com Se è associata ad un dominio differente, le chiamate https possono essere fatte solo sul dominio appspot
  • 17. Architettura Google AppEngine Static files servers Frontends Un load balancer distribuisce le request su uno o più server di Frontend request I frontend identificano a partire dal dominio l’applicazione coinvolta, e controllano le configurazioni relative. Se il path è relativo ad un file statico, la request viene mandata agli static files server
  • 18. Architettura Google AppEngine Services Application servers Datastore Frontends request Se la request viene riconosciuta come ‘dinamica’, viene indirizzata agli application servers L’application server pool utilizza una nuova istanza dell’applicazione su un server, o ne utilizza una già esistente Gli application servers usano varie strategie per distribuire le request ed iniziare instanze dell’applicazione
  • 19. Sandbox Google AppEngine APP 2 APP 3 • Le applicazioni girano in un contesto isolato (sandbox) •La sandbox assicura che le apps possano solo eseguire azioni che non interferiscano con le performance e la scalabilità di altre applicazioni •Analogo al concetto delle applet java I services di AppEngine sono fuori dalla sandbox Services APP 1
  • 20. Sandbox Limite Soluzione Una applicazione in GAE non può scrivere files nel filesystem del server Utilizzo dei Blob e di BlobStoreService Può accedere ad altri server in Internet solo in http Servizio UrlFetch Altri computer possono accedere all’applicazione solo usando http ed https sulle porte standard Possono essere usate solo alcune delle classi di JRE Google mette a disposizione opportuni sostituti Le request possono durare max un minuto Per processi lato server più lunghi si usano i task, per upload di grossi files si usa BlobStoreService
  • 21. Agenda 1. Introduzione 2. Applicazioni 3. Datastore 4. Task 5. Services 6. Conclusioni
  • 22. Datastore High replication datastore Master slave datastore •è la scelta di default per le applicazioni •altamente disponibile •altamente affidabile •replica realizzata usando l’algoritmo Paxos •adatto per applicazioni che non richiedono alta disponibilità dei dati Il datastore NON è un database relazionale, ma supporta le transazioni: •Livello isolamento transazioni: SERIALIZABLE •Livello isolamento fuori da una transazione: READ COMMITTED
  • 23. Datastore - interazione DataNucleus Access Platform Datastore API JPA 1.0 JDO 2.3 Application L’applicazione può interagire con il datastore in 3 modi differenti: • Datastore API • Java Data Object (versione 2.3) • Java Persistence API (versione 1.0) L’utilizzo di JDO e JPA consentono di migrare più facilmente l’applicazione fuori dal contesto GAE
  • 24. JPA L’implementazione di JPA non presenta alcune features, che prevedono l’utilizzo di un database relazionale Caratteristiche non supportate Relazioni many to many Aggregation queries (group by, having, sum, avg, max, min) Query polimorfiche: non si può fare la query di una classe e ottenere istanze delle sottoclassi.
  • 25. JPA - configurazione DatastorePersistenceProvider è l’implementazione del provider (implementazione dell’ interfaccia PersistenceProvider di JPA) Datanucleus presenta numerose properties che consentono la configurazione di JPA nel modo più opportuno <persistence xmlns="http://java.sun.com/xml/..." …> <persistence-unit name=“app1pu"> <provider> org.datanucleus.store.appengine.jpa. DatastorePersistenceProvider </provider> <properties> … </properties> </persistence-unit> </persistence>
  • 26. @Entity(name = “Image") public class Image { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Key id; @Entity(name = "Folder") public class Folder { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Key id; private List<Folder> subfolders; @OneToMany(cascade = CascadeType.ALL) private List<Image> images; One to many - esempio FolderImage La classe Key delle API Google deve essere usata se l’entity è in relazione one-to-many con altre entity
  • 27. One to many - esempio Nel datastore di GAE, la chiave di Image è calcolata anche in rapporto alle chiavi delle entity correlate Abbiamo legato la classe dell’entity ad una classe proprietaria
  • 28. Agenda 1. Introduzione 2. Applicazioni 3. Datastore 4. Task 5. Services 6. Conclusioni
  • 29. Task I task consentono: • di gestire operazioni di backend che non richiedono una request dell’utente • di eseguire operazioni che richiedono più del tempo concesso ad una request Tipologie di task: • Task queue • Scheduled task
  • 30. Task queue Caratteristiche Il task risponde in POST ad un determinato URL Può ricevere una payload con parametri e dati Se messo in coda in un contesto transazionale, viene accodato solo se la transazione va a buon fine GAE ritenta il task se non è andato a buon fine Il task viene messo in coda e nel frattempo viene subito restituita una response all’utente
  • 31. Task queue Browser 1 - HTTP Request /executor /task_1 2 –assign task 3- HTTP Response Task queue 2 –launch task APP 1 name: juliet, surname: capuleti <<HTTP POST>> TaskOptions taskOptions = TaskOptions.Builder.url("/task_1") .param(“name", “juliet”). .param(“surname”,”capuleti”). Queue queue = QueueFactory.getDefaultQueue(); queue.add(taskOptions);
  • 32. Scheduled Task Caratteristiche adatti per i lavori di batch, che richiedono una schedulazione risponde in GET ad un determinato URL non può ricevere parametri le configurazioni sono presenti nel file cron.xml (presente in WEB-INF) Un task schedulato viene lanciato dal framework con frequenza stabilita
  • 33. Scheduled task /cron/reports launch task APP 1 <<HTTP GET>> Task scheduler Google AppEngine appcfg update <cronentries> <cron> <url>/cron/reports</url> <description>..</description> <schedule>every day 23:59</schedule> <timezone>America/Los_Ange les</timezone> </cron>… cron.xml Lo scheduler lancia il task a seconda delle informazioni presenti in cron.xml
  • 34. Agenda 1. Introduzione 2. Applicazioni 3. Datastore 4. Task 5. Services 6. Conclusioni
  • 35. Services Service Utilizzo Blobstore service Upload grossi files Image service Gestione delle immagini (sopperisce ad ImageIO che non si può utilizzare) URL Fetch Comunicare con altri servizi in rete Mail service Implementazione di javax.mail Memory cache Cache dei contenuti User service Interazione con la gestione utenti di Google I services, oltre ad offrire valore aggiunto, sopperiscono ad alcuni restrizioni della sandbox
  • 36. Blobstore Service Caratteristiche Permette il caricamento di grossi file (superiore ai 3 MB) Non vale il limite di 1 minuto sulla request Prevede principalmente l’upload fatto dagli utenti •il caricamento dei blob server to server è in sperimentazione L’app può accedere ai blob tramite opportune API Da console si possono vedere e gestire i blob caricati Permette il caricamento/gestione di files statici (immagini ad esempio)
  • 37. Blobstore Service JSP Blobstore service 2 - insert /page_1 3 - redirect <form action= "<%= blobstoreService.createUploadUrl ("/page_1") %>”>… </form> 1 - submit APP 1 Blobrepository Google AppEngine
  • 38. URL Fetch Caratteristiche Usa solo i protocolli HTTP/HTTPS Usa i seguenti HTTP methods: • GET •POST •PUT •HEAD •DELETE Può essere usato in modalità asincrona Permette di comunicare con altri servizi esposti in rete
  • 39. URL Fetch - parametri Parametro Utilizzo allowTruncate Le response troppo grandi vengono troncate e restituite senza errore disallowTruncate Se la response è troppo grande, torna eccezione followRedirects Permette i redirect validateCertificate In una connessione https viene controllata la catena di certificati doNotValidateCertificate In una connessione https non viene controllata la catena di certificati
  • 40. URL Fetch – chiamate asincrone Il metodo call dell’oggetto result può essere invocato anche in un secondo momento Se all’invocazione la response è disponibile, viene restituita Altrimenti il sistema rimane in attesa della response
  • 41. Offre statistiche sulla cache, ad esempio il peso totale di tutti gli oggetti in cache Supporta le operazioni asincrone • interfaccia java standard • rende più semplice la migrazione • mancano alcune feature MemCache Service MemCache Service JCache Impl Low level API JCache API (JSR 107) JCache API Low levevl API Il servizio permette di gestire il caching dei contenuti Application
  • 42. Agenda 1. Introduzione 2. Applicazioni 3. Datastore 4. Task 5. Services 6. Conclusioni
  • 43. Pro e contro Non bisogna occuparsi di molti dettagli sistemistici Implementazione di molti standard Java Facilità nelle configurazioni e nel deploy Possibilità di utilizzare svariati framework nello sviluppo Possibilità di utilizzare in modo semplice l’infrastruttura Google sottostante Alcuni dei servizi sono ancora in beta e in sperimentazione L’approccio non SQL non è di immediato apprendimento Costi: la soglia gratuita può essere facilmente superata La sandbox non consente l’utilizzo di determinate API Gli standard Java non sono sempre implementati al 100%
  • 44. Esempio CMS sviluppato come concept di un progetto: • con gestione e manipolazioni di immagini • Spring 3 • MVC: parte di presentazione, servizi REST • Spring Security: integrato con il meccanismo di autenticazione di Google (UserService) • JPA: persistenza dei dati • jQuery Contesto Framework/API
  • 45. Esempio Lasciarsi una ‘via di fuga’: •isolando le dipendenze da API Google in moduli specifici: • con opportuni design pattern (strategy, bridge, abstract factory) • con la dependency injection di Spring • utilizzando interfacce standard come JPA Strategia •molte feature di JPA hanno ‘strani comportamenti’ • ad esempio le relazioni one-to-many • Image Service non consente il trattamento avanzato delle immagini Problemi riscontrati

×