Introduzione

Google App Engine(GAE) è un servizio di cloud computing PaaS che permette di eseguire le proprie applicazioni caricandole nell’infrastruttura Google. Le caratteristiche principale di GAE sono:
– Supporto per tutti gli standard web, anche obsoleti.
– Datastore con controllo della persistenza e possibilità di effettuare query,    ordinamenti e transazioni.
– Scalabilità all’aumentare degli utenti e del volume di dati introdotto dalle    richieste.
– API per l’autenticazione nel proprio account Google.
– SDK completo di simulatore per l’esecuzione locale delle applicazioni.
– Supporto multitasking.
– Scheduling dei task per attivare azioni ed eventi in istanti specifici e    intervalli regolari.
Google App Engine supporta applicazioni scritte in diversi linguaggi di programmazione tra i quali Java, Python, PHP e Go.
Gli ambienti di sviluppo più utilizzati, quali Java e Python, sono stati forniti per assicurare un’esecuzione efficiente e che non interferisca con le altre applicazioni di sistema.
I servizi offerti sono gratuiti se utilizzati sotto una determinata soglia giornaliera, ovvero, nel caso in cui l’applicazione utilizzi al massimo 500 MB di spazio su disco per la memorizzazione dei dati e banda e CPU sufficienti per servire 5 milioni di pagine al mese.
Oltre questa soglia il servizio di pagamento deve essere abilitato per poter continuare ad utilizzare la propria applicazione da remoto.

La filosofia di App Engine

App Engine non permette di salvare nel filesystem del server spreadsheet e attachment. In particolare, viene sollevata un‘eccezione anche nel caso venga tentato di aprire un file con i permessi di scrittura.
Il motivo è dato dagli obiettivi di sicurezza posti da Google per l‘esecuzione delle applicazioni distribuite.
Tali applicazioni vengono eseguite in un ambiente che fornisce accesso limitato al sistema operativo sottostante. Queste limitazioni permettono a GAE di distribuire le richieste web su nodi eterogenei. L‘applicazione viene quindi isolata in un ambiente sicuro e affidabile indipendente dal sistema operativo e dall‘hardware. Esempi di queste limitazioni sono:

– L‘accesso ad altre macchine nella rete può avvenire solo attraverso    servizio e–mail o specifica dell‘url. Non è possibile come in Apache    specificare l‘indirizzo locale del file da includere. La connessione con    queste può essere realizzata solamente effettuando richieste http (o    https) sulle porte standard.
– Un‘applicazione non può creare nuovi oggetti nel filesystem. È possibile    la lettura di file solo se caricati nel server con l‘applicazione stessa. Per    altri caricamenti devono essere utilizzati i servizi forniti quali il datastore,    memcache, ecc.. Da citare inoltre le quote imposte nell‘elaborazione dati.

Il tempo massimo di esecuzione di ogni singolo task è di trenta secondi. Se il tempo di processing eccede tale limite il task viene fatto ripartire da capo con tutte le problematiche legate all‘idempotenza e alla latenza di risposta. Deve essere quindi considerato un meccanismo di elaborazione parallela che consenta la suddivisione in task.

Riassumendo i problemi principali dovuti alla struttura distribuita riguardano:
– La gestione della base di dati
– L‘importazione dei contenuti
– L‘elaborazione dei dati importati