introduction à google app engine - waq 2011
TRANSCRIPT
En 15 secondes...
Google App Engine permet aux développeurs de bâtir des applications web sur les mêmes infrastructures scalable qui sont derrière les applications de Google.
Support communautaire de Google
‣ Blog
‣ Groups
Mises à jour du SDK
‣ 9 MAJs dans la dernière année
Pas de support commercial
Plateforme d’actualité
Facilité à scalerD
ouleur
Nombre d’utilisateurs
Douleur vs nombre d’utilisateurs
App EngineArchitecture régulière
• Aucune écriture sur le système de fichier
• Aucun socket
• 30 secondes d’exécution
• Tout doit passer en HTTP
• Pas de SSL pour les domaines personnalisés
Limitations
• Datastore (BD non relationnelle)
• Blobstore (gros fichiers)
• Memcache
• TaskQueue (background workers)
• Mail (envoi, réception)
• URLFetch
• ...
Les APIs
• BigTagle : key-value storage
• Architecture distribuée
• Performance et disponibilité variable
• Optimisé pour la lecture
• Transactions avec limitations
• API facile d’utilisation
DatastoreC’est quoi?
• Pas de fonction d’agrégat
• Pas de jointure
• Latence élevée
• 1 mb max / entité
• 1 mb max / appel à l’API
DatastoreLes limitations
DatastoreExemple : Déclarer une entité
from google.appengine.ext import db
class Message(db.Expando): de = db.EmailProperty(required=True) a = db.EmailProperty(required=True)
DatastoreExemple : Enregistrer une entité
m = Message( de = '[email protected]', a = '[email protected]', message = 'Hello World!', priorite = 0)m.put()print m
# ------------------------# Message# De : [email protected]# A : [email protected]# Priorite : 0
m = Message( de = '[email protected]', a = '[email protected]', message = 'Hello World!', priorite = 'URGENT', pjs = ['chat.jpg', 'chien.jpg'])m.put()print m# ------------------------# Message# De : [email protected]# A : [email protected]# Priorite : 'URGENT'# Pjs : ['chat.jpg', 'chien.jpg']
DatastoreExemple : Obtenir et supprimer des entités
#Obtenir 2 entités où Message.de = '[email protected]'requete = Message.all().filter('de', '[email protected]')messages = requete.fetch(2)print messages# ------------------------#[<Message object at ...>, <Message object at ...>]
#Supprimmer les entitésdb.delete(messages)messages = requete.fetch(2)print messages# ------------------------#[]
• Supporte HTML5 multiple file input
• Jusqu’à 2 Go
• Ne permet aucun autre input à partcelui du fichier
Blobstore
• Rapide, sauf latence
• Persistance non garantie
• Sauve du temps et de l’argent
• 1 mb max par entité
Memcache
Gratuité
• Bande passante et CPUpour env. 5 millions de pages
• Limitations importantes au niveaude l’espace de stockage
Ressource Quota Prix / mois
Données du Blobstore 1 gig $0.15
Données du Datastore 1 gig $0.15
Bande passante entrante 1 gig / j. $3.00
Bande passante sortante 1 gig / j. $3.60
Courriels envoyés 2000 / j. $6.00
CPU 6.5 h / j. $9.50
Total mensuel $22.40
Tarification
Ressource Unité AppEngine Amazon
Bande passante sortante gig $0.12 $0.08 - $0.15
Bande passante entrante gig $0.10 $0.10
Temps CPU Heure CPU $0.10 $0.14
Données sauvegardées gig/mois $0.15 $0.25
Courriel envoyé destinataire $0.0001 $0.0001
Payez uniquement ce que vous utilisez
Les scénariosBon cas d’utilisation
Backend pour conserver les scores d’un jeusur plateforme mobile
‣ Application non-critique
‣ Le nombre de clients peut changerd’ordre de magnitude rapidement
‣ Peu de relations entre les entités
‣ Gratuit pour une bonne période
Les scénariosMoins bon cas d’utilisation
Application de gestion d’inventaire,de fournisseurs et de facturation
‣ Application critique
‣ L’ordre de magnitude est peu sujet à changement
‣ Beaucoup de relations entre les entités