2. 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.
3. En ~30 minutes
• La plateforme
• Les APIs
• La tarification
• Quelques scénarios
6. Plateforme d’actualité
Support communautaire de Google
‣ Blog
‣ Groups
Mises à jour du SDK
‣ 9 MAJs dans la dernière année
Pas de support commercial
12. Limitations
• 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
14. Les APIs
• Datastore (BD non relationnelle) • Mail (envoi, réception)
• Blobstore (gros fichiers) • URLFetch
• Memcache • ...
• TaskQueue (background workers)
15. Datastore
C’est quoi?
• BigTagle : key-value storage
• Architecture distribuée
• Performance et disponibilité variable
• Optimisé pour la lecture
• Transactions avec limitations
• API facile d’utilisation
16. Datastore
Les limitations
• Pas de fonction d’agrégat
• Pas de jointure
• Latence élevée
• 1 mb max / entité
• 1 mb max / appel à l’API
17. Datastore entité
Exemple : Déclarer une
from google.appengine.ext import db
class Message(db.Expando):
de = db.EmailProperty(required=True)
a = db.EmailProperty(required=True)
18. Datastore entité
Exemple : Enregistrer une
m = Message( m = Message(
de = 'un.sender@dom.com', de = 'un.sender@dom.com',
a = 'un.receiver@dom.com', a = 'un.receiver@dom.com',
message = 'Hello World!', message = 'Hello World!',
priorite = 0 priorite = 'URGENT',
) pjs = ['chat.jpg', 'chien.jpg']
m.put() )
print m m.put()
print m
# ------------------------ # ------------------------
# Message # Message
# De : un.sender@dom.com # De : un.sender@dom.com
# A : un.receiver@dom.com # A : un.receiver@dom.com
# Priorite : 0 # Priorite : 'URGENT'
# Pjs : ['chat.jpg', 'chien.jpg']
19. Datastore des entités
Exemple : Obtenir et supprimer
#Obtenir 2 entités où Message.de = 'un.sender@dom.com'
requete = Message.all().filter('de', 'un.sender@dom.com')
messages = requete.fetch(2)
print messages
# ------------------------
#[<Message object at ...>, <Message object at ...>]
#Supprimmer les entités
db.delete(messages)
messages = requete.fetch(2)
print messages
# ------------------------
#[]
20. Blobstore
• Supporte HTML5 multiple file input
• Jusqu’à 2 Go
• Ne permet aucun autre input à part
celui du fichier
21. Memcache
• Rapide, sauf latence
• Persistance non garantie
• Sauve du temps et de l’argent
• 1 mb max par entité
22. Taskqueue
• 30 secondes 10 minutes par task
• Parallélisme
• Chaque tâche doit être
idempotente
24. Gratuité
• Bande passante et CPU Ressource Quota Prix / mois
pour env. 5 millions de pages Données du Blobstore 1 gig $0.15
• Limitations importantes au niveau Données du Datastore 1 gig $0.15
de l’espace de stockage 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
25. Tarificationvous utilisez
Payez uniquement ce que
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
27. Les scénarios
Bon cas d’utilisation
Backend pour conserver les scores d’un jeu
sur plateforme mobile
‣ Application non-critique
‣ Le nombre de clients peut changer
d’ordre de magnitude rapidement
‣ Peu de relations entre les entités
‣ Gratuit pour une bonne période
28. Les scénarios
Moins 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