Google App Engine `e definito come una piattaforma di sviluppo ed esecu- zione di applicazioni, che permette a queste ultime di appoggiarsi e sfruttare l’infrastruttura di Google, la stessa che viene utilizzata per i loro prodotti. Storicamente, quando nel 2008 comparve sul mercato, il concetto di PaaS non era ancora diffuso e ben conosciuto, ed i cloud provider fino a quel momento offrivano solamente servizi di infrastruttura, IaaS, oppure ap- plicazioni gi`a pronte, a livello quindi di SaaS. Lo scopo con cui Google App Engine `e stato creato `e quello di trasformare l’infrastruttura in un ambiente, o piattaforma, in grado di ospitare e gestire lo sviluppo di applicazioni, per- mettendo quindi ai propri utenti di realizzarne di proprie, colmando, come gi`a detto, il gap tecnologico esistente tra l’IaaS e la creazione di applicazioni.
1https://cloud.google.com 2https://cloud.google.com/products 3https://cloud.google.com/files/GoogleAppEngine.pdf 4https://cloud.google.com/products/cloud-storage 5https://cloud.google.com/files/CloudStorage.pdf 6https://cloud.google.com/products/cloud-sql 7https://cloud.google.com/files/CloudSQLDatasheet.pdf 8https://cloud.google.com/products/big-query 9https://cloud.google.com/files/BigQuery.pdf 10https://cloud.google.com/products/compute-engine 11https://cloud.google.com/files/GoogleComputeEngine.pdf
5.3.1
Vantaggi di Google App Engine
I principali vantaggi economici che vengono evidenziati per le aziende so- no la possibilit`a di raggiungere automaticamente una grande scalabilit`a ed un’accelerazione del processo di sviluppo e distribuzione del software, carat- teristiche che risultano ancora pi`u nette di quanto non lo fossero nell’ambito dell’IaaS, ad esempio, con AWS.
Ci`o `e dovuto, da un punto di vista pi`u tecnico, al fatto che una notevole mole di lavoro `e ulteriormente risparmiata agli sviluppatori e progettisti, poich´e di essa si fa carico la piattaforma. In particolare tale lavoro com- prende la gestione dell’infrastruttura, la scalabilit`a delle applicazioni e la tolleranza ai guasti, tutti aspetti gestiti automaticamente da Google App Engine. Non `e pi`u necessario ad esempio occuparsi del monitoraggio delle risorse, del bilanciamento del carico, dell’allocazione e dell’inizializzazione di macchine virtuali. Per poter quindi sviluppare applicazioni tramite Goo- gle App Engine `e sufficiente fornirne il codice e scegliere pochi parametri di configurazione, tra cui ad esempio l’ambiente di esecuzione desiderato.
Infrastruttura
Per quanto riguarda la distribuzione del software, Google App Engine de- cide automaticamente su quali macchine virtuali e in quali centri di dati posizionare i componenti ed i servizi, sulla base di politiche interne e cer- cando di ottimizzare vari aspetti, tra cui le prestazioni (massimizzazione dell’efficienza) e l’utilizzo di risorse (minimizzazione dei costi).
Un grado di libert`a aggiuntivo che pu`o essere dato agli sviluppatori, per le questioni riguardanti alla localizzazione delle proprie applicazioni, consiste nel permettere loro di decidere se distribuire le proprie applicazio- ni presso centri di dati localizzati nell’Unione Europea o negli Stati Uniti d’America. Ci`o `e legato principalmente a questioni legali.
Scalabilit`a
Anche la scalabilit`a viene gestita in maniera trasparente allo sviluppatore, poich´e, se si verifica un incremento delle richieste, Google App Engine pu`o stabilire di replicare alcuni componenti o servizi, posizionandoli geografica- mente ed a livello di rete nei punti che ritiene pi`u opportuni, e di ritirare poi tali repliche una volta che il traffico in entrata torna a ridursi.
5.3.2
Linguaggi ed ambiente di esecuzione
I linguaggi attualmente supportati da Google App Engine sono Python, Java e Go12, un linguaggio sviluppato da Google. Viene inoltre fornito sup-
porto anche per molti framework e tecnologie legati a tali linguaggi, tra cui, per quanto riguarda Java ad esempio, il framework Spring13, la tecno-
logia Java Servlet14 e la relativa estensione JSP15 16. In aggiunta, grazie
alla presenza proprio di Java, `e possibile utilizzare anche altri linguaggi che vengono eseguiti su Java Virtual Machine, tra cui, ad esempio, Sca- la17 ed alcune versioni di PHP (Quercus18), JavaScript (Rhino19) e Ruby
(JRuby20).
Gli ambienti d’esecuzione di questi linguaggi non sono tuttavia quelli classici che vengono forniti, ad esempio, nelle distribuzioni desktop, poich´e alcune funzionalit`a non sono supportate per ragioni di sicurezza. Questo discende dalla scelta di eseguire ogni applicazione all’interno di un ambiente molto restrittivo, chiamato sandbox, con lo scopo di impedire ad agenti o utenti esterni di accedere al codice o ai dati di tale applicazione.
Tra le azioni che non sono consentite all’interno di una sandbox troviamo l’accesso ai file locali, l’utilizzo di socket ed, in generale, le chiamate al sistema operativo.
5.3.3
Servizi ed API
Le restrizioni sopra elencate non devono impedire alle applicazioni di svolge- re determinati compiti. Per questo vengono introdotti dei servizi e delle API in grado di fornire tutte le funzionalit`a che verrebbero altrimenti perdute a causa dell’ambiente restrittivo delle sandbox. Tali funzionalit`a sono inol- tre presentate con un livello di astrazione maggiore e con interfacce di pi`u alto livello di quelle che generalmente vengono fornite dai classici ambienti
12http://golang.org
13http://www.springsource.org
14http://www.oracle.com/technetwork/java/javaee/servlet/index.html 15http://www.oracle.com/technetwork/java/index-jsp-138231.html 16Per approfondimenti: http://en.wikipedia.org/wiki/JavaServer Pages 17http://www.scala-lang.org
18http://quercus.caucho.com/
19https://developer.mozilla.org/en-US/docs/Rhino 20http://jruby.org
d’esecuzione e dalle librerie standard. Ad esempio, piuttosto che lavorare con delle socket `e possibile utilizzare servizi che permettono ai servizi ed ai componenti di scambiarsi messaggi. Oppure, al posto dell’interfacciamento al file system locale, `e possibile utilizzare sistemi pi`u avanzati per lo storage delle informazioni, come i database.
I principali servizi e le API fornite riguardano i seguenti aspetti:
• gestione dei log delle applicazioni, loro memorizzazione durevole e loro accesso direttamente dalle applicazioni stesse;
• elaborazione parallela di dati tramite il framework Map Reduce; • creazione di indici ed ottimizzazione della ricerca nelle strutture di
dati utilizzate;
• autenticazione degli utenti tramite i loro Google Account; • interfacciamento dell’applicazione a dispositivi mobile;
• gestione degli aggiornamenti istantanei ai browser degli utenti, nel caso di applicazioni Web;
• supporto per lo scambio di messaggi; • supporto per l’invio di e-mail ;
• possibilit`a di programmare l’esecuzione di determinati lavori ad inter- valli di tempo regolari o in background;
• accesso facilitato ai servizi Web esterni al Cloud, o ad altre risorse presenti in Internet;
• memorizzazione persistente delle informazioni.
5.3.4
Amministrazione del sistema
Sicuramente alleviare gli sviluppatori del compito di gestire personalmente molti degli aspetti che non dipendono dal contesto specifico dell’applicazio- ne `e un vantaggio, sia dal punto di vista economico che tecnico. Tuttavia pu`o essere importante fornire un certo livello di controllo sul sistema, per- mettendo loro cos`ı di non perdere completamente la visibilit`a delle proprie
applicazioni. Se cos`ı non fosse, sarebbe impossibile verificare che queste ulti- me stiano effettivamente funzionando correttamente ed in maniera efficiente e potrebbero verificarsi situazioni in cui il costo di esecuzione di un’applica- zione sia molto pi`u alto di quanto potrebbe essere a causa dell’uso scorretto o sub-ottimale di determinate risorse.
Questo livello di visibilit`a viene fornito tramite una serie di tool che per- mettono, tra le altre cose, di monitorare le metriche pi`u importanti riferite ad una certa applicazione, come l’uso di CPU e memoria.