Introduzione a Google App Engine:Cosa è Google App Engine,Linguaggi di programmazione supportati
L'ambiente di Runtime,Static File Servers
Datastore,Services,Namespaces,Google Accounts, OpenID, e OAuth,Task Queues e Cron Jobs,Developer Tools,Administration Console.
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Google App Engine Overview Seminario GDG Genova 4 Ottobre 2013
1. Google Developer Group Genova, 4 Ottobre 2013
http://gdg-genova.blogspot.it
Massimo Caliman
Software Architect
http://www.caliman.biz
Google App Engine Overview
2. Cosa è Google App Engine
Perché ho scelto GAE
Perché potresti sceglierlo
Forse hai bisogno di un altra cosa
Linguaggi di programmazione supportati
L'ambiente di Runtime
Gli argomenti che
tratteremo
Static File Servers
Datastore
Services
Namespaces
Google Accounts, OpenID, e OAuth
Task Queues e Cron Jobs
Developer Tools
Administration Console
3. Cosa è Google App Engine
Più di un hosting è un application server cioè serve per
far "girare" applicazioni web.
Con "applicazione web" intendiamo un’applicazione o un
servizio accessibile via Web, di solito con un browser
web: e-commerce, CMS, DMS, ERP, social network...
4. Cosa è Google App Engine
Progettato per
● ospitare applicazioni con molti utenti simultanei
● essere scalabile
Scalabile
Quando un'applicazione è in grado di servire molti utenti
contemporaneamente, senza degradare le prestazioni,
diciamo che è scalabile.
5. Cosa è Google App Engine
Scalano automaticamente.
● Mentre sempre più persone utilizzano l'applicazione,
App Engine stanzia più risorse per l’ applicazione e
gestisce l'utilizzo di tali risorse.
● L'applicazione stessa non bisogno di sapere nulla
riguardo le risorse utilizzate.
6. Cosa è Google App Engine
diverso da web hosting tradizionali o server autogestiti...
si paga solo per le risorse che si usano.
● utilizzo della CPU
● memoria
● larghezza di banda in entrata e in uscita
● risorse specifiche per i servizi di App Engine
7. Cosa è Google App Engine
Ogni sviluppatore ha un certo ammontare di risorse
gratuite, abbastanza per piccole applicazioni con poco
traffico.
App Engine può essere descritto come l’insieme di tre
parti:
● istanze di applicazioni
● data storage (scalabile)
● servizi (scalabili)
9. Perché ho scelto GAE
GAE/J è l’incarnazione di Google App Engine per il
linguaggio Java
10. Perché ho scelto GAE
● Un servlet container
● ottimo plug-in per eclipse rende quasi banale e
trasparente il fatto di lavorare con Google App
Engine
11. Perché ho scelto GAE
Come dice il video promo di GAE/J “gli sviluppatori Java
sono esigenti”.
Google è riuscita a soddisfare le esigenze di molti
sviluppatori Java con alcune limitazioni
● Classi disponibili: solo quelle in White list
● No EJB
● Webservice: si ma con accorgimenti.
12. Perché ho scelto GAE
Un application server gratuito con possibilità di usare
JPA e JDO sempre nella versione gratuita, cosa che
mitiga l’assenza dell’accesso diretto a mysql (nella
versione gratuita).
E’molto meglio di altri hosting economici e mi da
accesso a tutti i servizi di Google.
13. Perché potresti sceglierlo
Supporto gratuito se usi solo certe risorse e fino ad un
certo limite delle stesse (più che adeguato ad un piccolo
portale/app p.e. 1M di pag/mese)
Per il supporto a pagamento possibilità di mettere un
limite al billing (“posso spendere fino a X euro, poi
bloccati… niente sorprese a fine mese)
14. Perché potresti sceglierlo
API google:
servizi che Google stessa utilizza per i propri sistemi
(Datastore, BigQuery)
Supporto di vari linguaggi di programmazione sempre in
aumento.
Se App Engine ti sta stretta anche nella versione
billabile c’è Google Cloud, una piattaforma Cloud come
quelle di Oracle, OVH ecc.
15. Forse hai bisogno di un altra
cosa...
● Ogni sistema informatico ha i suoi limiti o meglio vincoli
● Voglio Glassfish! Webphere, OracleServer 10g! Voglio gli EJB
● Non voglio preoccuparmi della White list
● Voglio avere i dati in casa non “sto tranquillo” con la “nuvola”
sopratutto quando il mio datastore passa sopra le Ande o
l'Himalaya
16. Linguaggi di programmazione
Ad oggi i linguaggi di programmazione supportati sono:
● Python
● Java
● Go (*)
● PHP (*)
*[sperimentale al momento della stesura di questa
presentazione, non verranno trattati in questa sede]
17. Python
Gestisce applicazioni scritte in Python 2.7,
utilizzando versione personalizzata di CPython,
l'interprete ufficiale di Python.
App Engine invoca una applicazione Python utilizzando
WSGI, uno standard di interfaccia di applicazione
ampiamente supportato.
18. Python
● Un'applicazione può utilizzare la maggior parte della libreria
standard di Python
● API e librerie per l'accesso ai servizi e ai dati
● Molti framework web open source Python funzionano con App
Engine: Django, web2py, Pyramid e Flask
● App Engine include anche un framework leggero proprio,
denominata webapp
19. Java
Gestisce applicazioni create per Java 7 Virtual Machine (JVM).
Una applicazione può essere sviluppato utilizzando il linguaggio di
programmazione Java, o altri che che si compilano e vengono eseguiti
nella JVM:
● PHP (usando Quercus)
● Ruby (utilizzando JRuby)
● JavaScript (utilizzando l'interprete Rhino)
● Scala
● Groovy
● Clojure
20. Java
● L'applicazione accede all'ambiente e servizi
utilizzando interfacce basate su standard web di
settore, inclusi Java servlet e Java Persistence API
(JPA).
● Qualsiasi “tecnologia” Java che funzioni all'interno
delle restrizioni sandbox può essere eseguito su App
Engine.
● Supporta pienamente Google Web Toolkit (GWT).
21. L'ambiente di Runtime
Quando App Engine riceve la richiesta, identifica
l'applicazione dal nome di dominio dell'indirizzo.
● Sottodominio appspot.com (fornito gratuitamente
con ogni app)
● Sottodominio di un nome di dominio personalizzato
registrato e impostato con Google Apps. (p.e. www.
caliman.biz)
22. L'ambiente di Runtime
App Engine seleziona un server da molti possibili
disponibili per gestire la richiesta, effettuando la sua
scelta sulla base di quale server ha maggior probabilità
di fornire una risposta veloce.
23. L'ambiente di Runtime
Il codice dell'applicazione non può accedere al server su
cui è in esecuzione in senso tradizionale.
Un'applicazione è in grado di:
● leggere i propri file dal filesystem
● non può scrivere file
● non può leggere i file che appartengono ad altre
applicazioni
24. L'ambiente di Runtime
Ciò permette ad App Engine di richiedere il server che, a
suo avviso, può fornire la risposta più veloce.
Oltre a limitare l'accesso al sistema operativo, l'ambiente
di esecuzione limita anche la quantità di tempo e la
memoria che una singola richiesta può “occupare”.
(60 secondi per restituire una risposta al client)
25. Static File Servers
La maggior parte dei siti web hanno risorse che non
cambiano durante il regolare funzionamento del sito.
● immagini e CSS che descrivono l'aspetto del sito
● il codice JavaScript che viene eseguito nel browser
● file HTML per le pagine senza componenti dinamici
26. Static File Servers
La fornitura di questi file non coinvolge codice dell'applicazione...
è inutile e inefficiente che siano servite dall’ Application Server.
App Engine fornisce un set separato di server dedicati a fornire static
file.
27. Datastore
Bisogno di memorizzare le informazioni durante la gestione di una
richiesta per il recupero durante una successiva richiesta.
Deploy tipico di un piccolo sito web implica un unico server di
database per l'intero sito, e uno o più server web che si collegano al
database per memorizzare o recuperare i dati.
28. Datastore
Ma un server centrale è difficile da scalare, una
volta raggiunta la sua capacità di connessioni
simultanee...
29. Datastore
Di gran lunga il tipo più popolare di sistema di memorizzazione dei dati
per le applicazioni web in passato (due decenni) è stato il database
relazionale.
Altri tipi di sistemi di archiviazione dati sono:
● archivi di dati gerarchici (file system, database XML)
● database ad oggetti
30. Datastore
Ogni sorta di banca dati ha le sue tecniche per crescere oltre il primo
server.
Il sistema di database di Google App Engine assomigliano più a un
database ad oggetti.
31. Datastore
Come per l'ambiente di runtime, il datastore di App Engine è
un'astrazione che permette a GAE di gestire i dettagli della
distribuzione e scalabilità dell'applicazione.
Questo permette al codice di concentrarsi su altre cose più importanti.
32. Services
Il rapporto del datastore con l'ambiente di runtime è quella di un
servizio:
l'applicazione utilizza una API per accedere a un sistema separato che
gestisce tutte le sue esigenze di scalabilità separatamente dalle
istanze dell'applicazione.
Google App Engine include diversi altri servizi selfscaling utili per le
applicazioni web.
34. Blobstore
Sistema di storage per i valori di grandi dimensioni.
Le applicazioni possono utilizzare il Blobstore per memorizzare,
gestire e servire file di grandi dimensioni, come:
● immagini
● video
● download di file
35. URLFetch
Applicazioni App Engine possono accedere ad altre risorse web
utilizzando l'URL Fetch.
Il servizio fa richieste HTTP ad altri server su Internet, come ad
esempio per recuperare pagine o interagire con i servizi web.
Dal momento che i server remoti possono essere lenti a rispondere, le
API URL Fetch supporta il recupero in background. (mentre un
gestore di richieste fa altre cose)
36. Mail
Applicazioni App Engine possono inviare messaggi utilizzando il
servizio di posta.
I messaggi possono essere inviati:
● a nome dell'applicazione
● per conto dell'utente che ha effettuato la richiesta.
37. XMPP
Applicazioni App Engine possono inviare e ricevere messaggi
istantanei da e per servizi di chat che supportano il protocollo XMPP,
compreso Google Talk.
38. Image
Il servizio di elaborazione delle immagini può fare trasformazioni
leggere dei dati di immagine, come ad esempio fare le miniature di
foto caricate.
I compiti di elaborazione delle immagini vengono eseguite utilizzando
la stessa infrastruttura Google.
39. Namespaces
Datastore, Blobstore e MemCache insieme
memorizzano i dati per un applicazione ma
è spesso utile partizionare i dati di un app su scala
globale. (vedi anche Multitenancy)
Ad esempio, un'applicazione può essere al servizio di più
società, in cui ogni azienda deve vedere la propria
istanza isolata, e nessuna azienda dovrebbe vedere i
dati che appartengono ad altre società.
40. Namespaces
App Engine fornisce questa funzionalità di partizionamento a livello di
infrastruttura.
Un'applicazione può dichiarare di agire in uno spazio dei nomi
chiamando una API.
Tutti i successivi utilizzi di un qualsiasi servizio si limiterà allo spazio
dei nomi automaticamente.
L'applicazione non ha bisogno di tenere traccia in quale namespace si
trova dopo la dichiarazione iniziale.
41. Google Accounts, OpenID, e OAuth
App Engine Offre l'integrazione con account Google, il
Sistema di account Utente utilizzato
da applicazioni di Google come:
● Gmail
● Google Docs
● Google Calendar
42. Puoi usare Google Account invece che costruire la tua
base dati utenti e di autenticazione.
...Oppure puoi utilizzare un provider OpenID.
App Engine include il supporto speciale per l'utilizzo di
provider OpenID utilizzabile con le stesse modalità di un
account Google.
Google Accounts, OpenID, e OAuth
43. App Engine include il supporto integrato per OAuth, un
protocollo che rende possibile
agli utenti di concedere il permesso a applicazioni di
terze parti di accedere ai dati personali in un altro
servizio...
senza dover condividere le credenziali dell'account con
terzi.
Google Accounts, OpenID, e OAuth
44. Task Queues e Cron Jobs
Un'applicazione web deve rispondere a richieste web
molto rapidamente, di solito in meno di un secondo e
preferibilmente in poche decine di millisecondi.
Questo non dà molto tempo alle applicazione per fare
tutto il loro lavoro.
45. Task Queues e Cron Jobs
Per questo tipo di situazioni, un’ applicazione su App
Engine utilizza le code di attività. (task queue)
Consentono di descrivere le attività da svolgere in un
secondo momento, al di fuori dell'ambito della richiesta
web.
46. Developer Tools
È possibile scaricare il kit di sviluppo software (SDK) per il linguaggio di
programmazione prescelto e il sistema operativo del vostro computer.
Sviluppatori Java possono ottenere il Java SDK nella forma di un
plug-in per l'ambiente di sviluppo integrato Eclipse.
Sviluppatori Python che utilizzano Windows o Mac OS X possono
ottenere il Python SDK nella forma di un'applicazione desktop.
Entrambi gli SDK sono disponibili come strumenti a riga di comando.
47. Developer Tools
Gli SDK includono anche librerie per test automatizzati,
e la raccolta di rapporti sulle prestazioni
dell'applicazione.
48. Administration Console
Quando l'applicazione è pronta per il suo debutto in pubblico, si crea
un account di amministratore e si fa il deploy su App Engine.
È possibile utilizzare l'account di amministratore per
creare e gestire l'applicazione, vedere le sue statistiche di utilizzo delle
risorse e dei messaggi di log.
Il tutto con una interfaccia web-based.
49. Administration Console
Ogni amministratore può accedere la console e caricare nuove
versioni dell'applicazione.
La console consente di accedere ai dati delle prestazioni in tempo
reale su come l'applicazione viene utilizzato..
È anche possibile interrogare l'archivio dati per l'applicazione in tempo
reale utilizzando una interfaccia web, e controllare lo stato degli indici
del datastore.
50. Administration Console
Quando si effettua il deploy di una nuova versione, ad essa è
assegnato unidentificativo della versione. (si specifica nel file di
configurazione dell'applicazione)
La versione marcata come default sarà quella che risponderà all’
indirizzo di produzione o live scelto per la vostra applicazione.
Si può accedere alle versioni non predefinite utilizzando un URL
speciale che contiene l'identificativo di versione.
Questo vi permette di testare una nuova versione di un'applicazione in
esecuzione su App Engine prima che diventi ufficiale.
51. Administration Console
Si utilizza la console per configurare e gestire l'account di
fatturazione/billing per la vostra applicazione.
Si imposta un account di fatturazione con carta di credito e account
Google.
Il titolare del conto di fatturazione imposta un budget, un importo
massimo di denaro che può essere speso per giorno di calendario.
L'applicazione può consumare le risorse fino a quando il vostro budget
è esaurito, e si pagano solo per quello che l'applicazione utilizza in
realtà.
52. Q&A
Domande?
Il link per scaricare questa presentazione in
formato PDF è raggiungibile dalla sezione
“computer science” del portale http://www.
caliman.biz
Per domande/consigli potete liberamente
scrivermi all’indirizzo mcaliman@caliman.biz