Le Google App Engine permet à n’importe quel développeur Java (mais également Python) d’héberger son application en utilisant le cloud de Google.
Qu’apporte cette solution de cloud made-in Google ? Quelles sont ses limites ?
Petit rappel sur le cloud
Le cloud peut être divisé en 3 concepts qui partagent un même principe : la dématérialisation. Ces concepts sont :
– SaaS (Software As A Service) : Comme Gmail ou Salesforce, le logiciel est hébergé sur des serveurs qui ne sont pas possédés par la société (ou le particulier) qui s’en sert.
– IAAS (Infrastructure As A Service) : EC2 d’Amazon en est le représentant le plus connu. Il s’agît de laisser la gestion de ses serveurs et du dimensionnement nécessaire pour faire face à la charge à un tiers. Les sociétés se laissant tenter par cette solution n’ont donc plus la main sur leur infrastructure.
– PAAS (Platform As A Service) : C’est ici que se range l’AppEngine de Google. Ici, les applications sont déployées sur un système qui gère automatiquement les besoins en ressources (mémoire, espace disque, …). A la différence de l’IAAS où le choix de la base de données et du type de serveur est à la discrétion de l’utilisateur, ces derniers vous sont ici imposés.
Google Cloud
Il y a plus d’un an, Google ouvrait son AppEngine aux applications Java. Auparavant, seul le langage Python était supporté. Outre la scalabilité qu’offre une telle plateforme, il s’agît surtout de la première plateforme à proposer un hébergement gratuit pour les applications faites en Java. Et oui, fini le temps des limitations des hébergements gracieusement offerts par votre fournisseur d’accès à Internet en PHP seulement. Si vous ne connaissez pas ou n’aimez pas PHP, plus rien ne vous force à sortir de Java s’il s’agit de votre langage de prédilection. Un simple compte Google et l’activation de l’AppEngine permettent désormais de rester en terrain connu, tout en bénéficiant de la scalabilité du cloud.
Cette gratuité se garde aux conditions suivantes :
– Nombre de requêtes : 45200 par minute, avec une limite à 43 millions par jour
– Stockage disque : 1Go sur BigTable
– Disponibilité des processeurs : maximum 15 par CPU-minutes par minute, ou 6,5 CPU-heures par jour
D’autres informations plus complètes sur les limitations sont disponible. Si vous dépassez ces quotas, votre application sera indisponible le temps que les compteurs reviennent à zéro : une fois par jour.
Un tableau récapitulant le prix de chaque élément est également disponible sur la page de développement de Google.
Comment ça marche
Pour utiliser sa plateforme de déploiement, Google met à votre disposition un SDK, mais aussi un plugin Eclipse (très pratique). Pour ce dernier, il s’agît en fait du même plugin utilisé pour GWT.
Pour créer sa prmeière application GAE, rien de plus simple : cliquez sur l’icône bleue Google. La fenêtre suivante apparaît :
Décocher « GWT » (vous n’êtes pas obligé de vous en servir).
Le plugin créé automatiquement une première servlet, qui est le point d’entrée de votre application, comme défini dans le web.xml par défaut.
Comme vous pouvez vous en rendre compte, le plugin créé un war Java standard, à une différence près : le fichier appengine-web.xml, qui décrit votre application au cloud de Google :
– application : Vous entrez l’ID de votre application, qui est le même que vous utiliserez plus tard pour enregistrer votre application sur les serveurs de Google.
– version : Vous spécifiez la version de votre application. Vous pouvez y noter une combinaison de chiffres et de lettres. Chaque déploiement d’une nouvelle version que vous faites, Google conserve l’ancienne. Ceci permet depuis votre console d’administration de choisir quelle version vous voulez rendre disponible à tous.
Les autres propriétés sont optionnelles. Seules les 2 cités ci-dessus sont obligatoires. Parmi les options disponibles, il y a par exemple la possibilité de définir le temps de mise en cache de telle ou telle ressources ou bien définir quelle partie de votre application est accessible en HTTPS uniquement.
Lorsque vous faites tourner votre application, que ce soit en local ou sur les serveurs de Google, le serveur d’application choisi par la firme de Mountain View est Jetty et non Tomcat.
Google met à votre disposition des classes pour bénéficier des avantages de sa plateforme (authentification des utilisateurs via leur compte Google, …) et vous faciliter certaines taches : XMPP, oAuth, Memcache…
Lorsque vous aurez décidé de déployer votre application, cette dernière sera disponible sur l’url suivante : http://application-id.appspot.com. Comme dit précédemment, il s’agira de la version de votre application que vous avez décidé de rendre disponible à tout le monde. Sachez que les autres versions sont disponible suivant le pattern d’url suivant : http://version-id.latest.application-id.appspot.com
A savoir
Nous ne l’avons pas abordé, mais l’API Java de l’AppEngine ne correspond pas tout à fait à la standard 6. Pour des raisons de sécurité et de performance, Google a interdit ou restreint l’appel à certaines classes. Vous ne pouvez par exemple pas créer de thread, ni utiliser le système de fichier comme bon vous semble (vous êtes contraint à l’espace de déploiement des fichiers ressources de votre application).
La base de donnée proposée jusqu’à maintenant est exclusivement BigTable et, même si vous pouvez utiliser JPA et JDO, vous n’avez pas accès à une véritable base de donnée relationnelle.
Si votre application met plus de 30 secondes (ce qui est déjà long) à traiter une requête, cette dernière sera automatiquement invalidée par GAE. Assurez-vous donc de traiter des requêtes simples, et n’espérez pas pouvoir faire du Comet ou du WebSocket (pour le moment).
Enfin dernière limitation, si votre application ne reçoit pas assez de requêtes, elle sera mise en hibernation. Ceci engendrera donc un temps de réponse plus long la première fois qu’une requête lui parviendra, afin de la réveiller.
Il est à noter que GAE est compatible avec la plupart des langages de la JVM : Scala, JRuby, Groovy. Pour ce dernier, un framework de développement spécifique a même été créé : Gaelyk (jeu de mot en GAE et gaelic “qui vient de bretagne”).
Spring Roo donne la possibilité de construire et de déployer une application compatible avec GAE. Cette intégration par l’outil de SpringSource est bien sûr prise en compte par STS (la version made in Spring d’Eclipse).
Play ! a également un module supportant le déploiement sur la plateforme de Google.
Vous l’aurez compris, votre application web existante ne pourra peut-être pas tourner directement sur GAE sans l’adapter.
Une solution d’avenir ?
Comme vous pouvez le voir, la communauté Java suit le travail de Google et est déjà prête pour supporter cette plateforme. Google va bientôt décliner cette offre pour les entreprises (les comptes Google Apps). Dans le même temps, une base de donnée de type SQL sera mise à disposition pour remplacer BigTable.
Georges@Bitbol
4 novembre 2010
Merci pour cette présentation très claire.
Développeur PHP, je suis tout de même de très près ces services de cloud. Nul doute que cela prendra de l’importance dans les années à venir.