Google App Engine/'ɛn.dʒin/
L’introduction
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.
En ~30 minutes
•   La plateforme
•   Les APIs
•   La tarification
•   Quelques scénarios
Google App Engine


La plateforme
Position dans le Cloud
                       Application




                Plateforme




     Infrastructure

                                     EC2
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
Facilité à scaler
Facilité àd’utilisateurs
Douleur vs nombre
                  scaler

           App Engine




                                                            Douleur
           Architecture régulière




                                    Nombre d’utilisateurs
Les langages
Les frameworks



• Grails
                 • Django
• Play!
                 • web.py
• Spring MVC
Comment ça marche?
  Phase 1: Développer

  Phase 2:   ?
  Phase 3: Profit!
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
Google App Engine


Les APIs
Les APIs
• Datastore (BD non relationnelle)   • Mail (envoi, réception)

• Blobstore (gros fichiers)           • URLFetch

• Memcache                           • ...

• TaskQueue (background workers)
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
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
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)
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']
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
  # ------------------------
  #[]
Blobstore
   • Supporte HTML5 multiple file input
   • Jusqu’à 2 Go
   • Ne permet aucun autre input à part
     celui du fichier
Memcache
  • Rapide, sauf latence
  • Persistance non garantie
  • Sauve du temps et de l’argent
  • 1 mb max par entité
Taskqueue
  • 30 secondes 10 minutes par task
  • Parallélisme
  • Chaque tâche doit être
    idempotente
Google App Engine


La tarification
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
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
Google App Engine


Scénarios
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
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
Google App Engine


Retour
Questions?
Commentaires?
@JimmyBourassa sur Twitter
jbourassa sur GitHub
jimmy.bourassa@hooktstudios.com

Introduction à Google App Engine - WAQ 2011

  • 1.
  • 2.
    En 15 secondes... GoogleApp 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
  • 4.
  • 5.
    Position dans leCloud Application Plateforme Infrastructure EC2
  • 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
  • 7.
  • 8.
    Facilité àd’utilisateurs Douleur vsnombre scaler App Engine Douleur Architecture régulière Nombre d’utilisateurs
  • 9.
  • 10.
    Les frameworks • Grails • Django • Play! • web.py • Spring MVC
  • 11.
    Comment ça marche? Phase 1: Développer Phase 2: ? Phase 3: Profit!
  • 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
  • 13.
  • 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 • Pasde 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
  • 23.
    Google App Engine Latarification
  • 24.
    Gratuité • Bande passanteet 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 uniquementce 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
  • 26.
  • 27.
    Les scénarios Bon casd’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 boncas 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
  • 29.
  • 30.
    Questions? Commentaires? @JimmyBourassa sur Twitter jbourassasur GitHub jimmy.bourassa@hooktstudios.com