Your browser doesn't support impress.js. Try Chrome or Safari.

Introduzione a

Google App Engine

Torino, 5 Giugno 2012

Cosa è Google Application Engine?

Piattaforma cloud di hosting per applicazioni web

Tre linguaggi supportati: Python, Java e GO!

Datastore NoSQL e tanti servizi a disposizione

Sistema di pagamento a counsumo

Punti di forza della piattaforma

Scalabilità
le risorse allocate aumentano in base alla richiesta
Modalità di pagamento
tetto massimo di spesa e quote modificabili al volo
Console di amministrazione
configurazione, log, dati, risorse utilizzate
Deploy e versioning
rilascio direttamente da eclipse, 10 versioni dell'app in linea
Persistenza dei dati

Persistenza dei dati: 3 possibilità

  1. App Engine Datastore
    Database NoSQL
  2. Google Cloud SQL
    Database MySQL Experimental
  3. Google Cloud Storage
    Storage per file fino a Terabytes di spazio Experimental

Datastore - Introduzione

Database non relazionale, basato su Big Table, pensato per lavorare su enormi quantità di dati.

Il peso di una query é dato dal numero di dati restituti, indipendentemente dalla dimensione della tabella: una query su milioni di record ha lo stesso peso di una query su qualche centinaio.

Ci sono limitazioni (non banali): niente join, niente filtri con disuguaglianze su più attributi, niente IN o simili.

Datastore - Entity

// Inserire un record Entity employee = new Entity("Employee"); employee.setProperty("lastName", "Antonio"); DatastoreService ds = DatastoreServiceFactory.getDatastoreService(); ds.put(employee);
// Gerarchia padre figlio Entity address = new Entity("Address", employee.getKey()); ds.put(address);

Datastore - Query

// Effettuare una query Query q = new Query("Employee"); q.addFilter("lastName", Query.FilterOperator.EQUAL, lastNameParam); PreparedQuery pq = ds.prepare(q); for (Entity result : pq.asIterable()) { String firstName = (String) result.getProperty("firstName"); Integer weight = (Integer) result.getProperty("weight"); System.out.println(firstName + " pesa " + weight +" kg"); }

Datastore - Transazioni

Transaction txn = ds.beginTransaction(); try { Key employeeKey = KeyFactory.createKey("Employee", "Joe"); Entity employee = datastore.get(employeeKey); employee.setProperty("vacationDays", 10); ds.put(employee); txn.commit(); } finally { if (txn.isActive()) txn.rollback(); }

Datastore - Framework

Nel Datastore sono incluse le implementazioni di JDO e JPA

Esistono anche altri framework che facilitano l'utilizzo del Datastore.
I principali sono Objectify, Twig e Slim3
Questi framework non sono sviluppati da Google, ma sono consigliati. Per utilizzarli é necessario includere le librerie nel progetto
Servizi

Blobstore

Serve per gestire oggetti di dimensioni molto grosse (immagini, filmati...)
Si caricano i dati su una url generata dal blobService
<form action="<%= blobstore.createUploadUrl("/upload") %>" method="post" enctype="multipart/form-data"> <input type="file" name="myFile">
Quando é terminato l'upload viene invocata la servlet specificata durante la creazione dove sarà possibile recuperare le chiavi dei blob caricati
Map<String, BlobKey> blobs = blobstore.getUploadedBlobs(req); BlobKey blobKey = blobs.get("myFile");

Images

Serve per manipolare le immagini
Ridimensiona, Ruota, Riflette, Ritaglia, Esalta contrasti e colori
ImagesService imageService = ImagesServiceFactory.getImagesService(); Image old = ImagesServiceFactory.makeImage(bytesArray); Transform r = ImagesServiceFactory.makeResize(200, 300); Image new = imagesService.applyTransform(resize, old);

Memcache

E' una memoria cache distribuita
Conviene usarla, si risparmia in tempi di attesa e in risorse
Un dato inserito in cache resta li il più a lungo possibile.
Ma Attenzione: Non va usato come datastore!
MemcacheService syncCache = MemcacheServiceFactory.getMemcacheService(); value = (byte[]) syncCache.get(key); // read from cache if (value == null) { ... // reload the value syncCache.put(key, value); // populate cache }

User Authentication

E' un servizio di autenticazione che gestisce tre tipi di utenti
UserService si preoccupa di creare le login e logout ,
e di fornire lo User ad autenticazione avvenuta

Task Queue

Sono Task asincroni indipendenti dalle request di un utente.

Push Queue: coda di default, i task vengono inseriti dall'app stessa

Pull Queue: i task vengono inseriti da app esterne

// push queue Queue queue = QueueFactory.getDefaultQueue(); queue.add(withUrl("/worker").param("key", key));

Tanti altri

Grazie per l'attenzione
Gtug
Use a spacebar or arrow keys to navigate