Atelier Google App Engine : la haute disponibilité à la portée de tous

Vous venez de gagner un contrat. Il s'agit de développer le site web qui va annoncer au soir du 6 mai 2012 le nouveau président de la République Française.

Le site devra pouvoir accueillir un traffic potentiel maximum de 50 millions d'utilisateurs le 6 mai. Ce jour là, un pic à 2 millions d'utilisateurs simultanés est attendu a 20h. Le site devra proposer des fonctions de type social : vote de satisfaction, commentaires, publications d'images, ...

Il ne doit pas faire défaut, il n'est pas concevable qu'il tombe a l'heure H.

Objectif de cet atelier technique : Développer et déployer une application capable de s'adapter automatiquement à de très forts pics de connexion.

Pour cela nous allons nous baser sur la solution de cloud fournit par google : GAE.

Qu'est-ce que AppEngine ?

A la base il s'agit simplement d'un moteur de servlet donnant accès à un DataStore (base de donnée NoSQL issue de BigTable) et à un certains nombre d'API.

L'application est déployée au sein même des datacenter de google et peut de fait répondre à plusieurs millions de requêtes simultanées, à la condition sinequanon qu'elle soit pensée "scalable" dans sa conception.

Vous pouvez développer sur GAE en Java, Python et en GO.

En résumé (et de manière plus commerciale)

Développement rapide, déploiement accéléré, administration simplifiée, évolutivité sans effort

API disponibles

Une dizaine d'API sont disponibles nativement dans le SDK GAE, elles vont soit rajouter des fonctionnalités à la stack JavaEE standard ou également fournir des services plus optimisées.

  • Data Store : couche de persistance NoSql basée sur BigTable. L'utiliser signifie oublier complètement le mode relationnel, ici tout est Document et Index. Plusieurs librairies sont disponibles pour requête les données, du bas niveau aux ORM tels que Objectify.
  • CloudSQL (base de donnée SQL,en bêta), et bientôt SearchCloud, un "Lucene dans le cloud".
  • Architecture de Cache répartie basée sur Memcache très performante qui doit être prioritaire à tout requête dans le datastore. Ne pas hésiter à en abuser !
  • Authentification via compte Gmail en 2 lignes de code (bluffant) ou via OAuth
  • Tâches CRONs facilement paramétrables (every monday, every 5 minutes, 5 juil 2012 14:03)
  • Emails : en envoie mais aussi pour déclencher des actions à la réception sur une adresse précise Talk/XMPP
  • Traitement sur des images
  • Url Fetcher : API pour lire et parser des pages webs. "C'est la stack la plus optimisée au monde pour lire des sites web, tout simplement car c'est le coeur de métier de google et que cette API bénéficie de tout leur savoir faire, et également de toute leur infrastructure".

Le leitmotiv de ses API : exposer des services utilisés par Google en interne et le rendre accessible à tous sans limitation de performance.

Ce dernier point est d'ailleurs très important : il est indispensable de bien définir les limitations en termes d'instances que l'on se fixe pour une période donnée. Les data-center de google ne flancheront jamais, en revanche votre porte monnaie si !

Combien ça coute ?

Comme tous les services de Cloud de type PAAS (Microsoft Azure ou Amazon EC2), vous ne payez que ce que vous consommez (et sur GAE tout se paye : la bande passante, les index, opérations I/Os, emails…). C'est donc extrêmement compliqué de prévoir ce que va vous coûter un hébergement sur un mois.

Une chose est sûr : si vous avez besoin de puissance sur un court laps de temps, les hébergement PAAS seront rentables. Dans les autres cas il vous faudra évaluer précisément vos besoins pour estimer les coûts (ou tester sur un mois ou deux si vous êtes téméraire)

Sachez que GAE offre un compte gratuit, mais extrêmement limité (heures CPU disponibles).
Vous pouvez ensuite passer à un compte "billing" avec 9$/mois de frais d'entrée. Pour les entreprise, le compte "premium" est à 500$/mois (hors frais d'hébergement évidemment)

GAE en pratique

Vous retrouverez les slides de l'atelier (tutorial pas à pas simple à suivre, cliquez sur une slide pour avoir la réponse) et le code final (Auteurs : Google et Sfeir)

Mon ressenti à chaud :

  • Le prochain qui me fait écrire des servlet ou des JSP ça va mal se finir pour lui ;)
    Heureusement, c'est GWT qui est mis en avant par GAE.
  • Le plugin eclipse GAE est d'excellente facture. La création d'un projet, son lancement en local et son déploiement en ligne se font en quelques clics (vraiment bluffé sur ce point !)
  • La librairie Objectify est bien pensée. Un mix entre un JPA et ce qu'on a l'habitude de voir avec des bases de données NoSql.
    dao.ofy().query(Comment.class).order("-date").limit(100).list()
  • La gestion de la concurrence sur des données persistées et mises en en cache dans un contexte de haute performance n'est vraiment pas une chose aisée. Référez vous à ce code pour vous en convaincre (slide 20)
  • Les performances et la facilité de déploiement sont vraiment au rendez-vous !

C'est tout pour aujourd'hui. Rendez-vous demain pour un nouvel article !

Ce blog est tenu par Julien Lafont, étudiant en ingénierie Informatique à Montpellier et développeur indépendant à ses heures perdues.

Web, Android & JavaEE enthousiast Developer, Agilist, Software Craftsman and Geek !

Vous aimez cet article ? Partagez le !

Discussions autours de l'article