I Has A Bug (le blog de jye)
Retour au blog <<

Google AppEngine

Lundi 14 avril 2008 à 17 h 34
Le 8 Avril dernier, Google a lancé son nouveau service, Google AppEngine. Ce service a pour but de vous proposer une solution d'hébergement pour vos applications web. L'avantage d'AppEngine se situe au niveau de la scalabilité (capacité d'un système à évoluer en puissance) de votre architecture web. Pour que vous compreniez mieux, voici un petit exemple. Imaginez que vous développiez une petite application web dans votre coin. Vous êtes une dizaine de personne à vous en servir et vous avez donc un serveur qui est calibré pour ce nombre d'utilisateurs. Du jour au lendemain, un site populaire fait une news sur votre système, ou votre site est "diggué" et donc par conséquent le trafic augmente brutalement. Votre serveur va se retrouver dans les choux et les utilisateurs ne manqueront pas de lâcher un "bouh c'est nul ça marche pas de toute façon". Avec AppEngine, votre architecture web s'adapte à vos besoins (à votre trafic donc), votre serveur devrait donc tenir la charge sans soucis.

Voilà pour la théorie, en pratique, le service vient d'être lancé et il est encore très limité, la partie payante du service n'a pas encore été dévoilé. Pour le moment chaque développeur bénéficie de 500Mo de stockage pour son application et de 5 millions de pages vues par mois. Le dépassement de ces limites entraînera une charge financière pour le développeur mais pour le moment cela bloque juste l'accès à l'application. Je ne m'attarderais donc pas sur ce point. Je vais plutôt vous parler du coté technique.



Un des premiers points négatif tombe directement. Un seul langage supporté (pour le moment). Le Python. Les développeurs PHP, RoR et autres sont donc dans l'impossibilité de déposer leurs applications existantes. Il en est de même pour le système de base de données. Pas de MySQL ou autres, un seul système, BigTable, système interne créé par Google pour leur besoin. On est donc dans l'obligation de se mettre au Python si l'on souhaite créer son application web, forcement l'accessibilité aux services en est réduite. On a donc un premier frein qui va rebuter pas mal de développeur malgré le fait que le Python soit un langage assez simple à comprendre et à utiliser.

A l'ouverture de ce service, je n'ai pas pu récupérer une des 10000 premières invitations. Je me suis donc contenter de récupérer le SDK AppEngine qui permet de travailler en local. Comme d'habitude, Google fait bien les choses puisqu'une doc complète et des tutoriaux viennent illustrer le SDK et ses quelques APIs. On se retrouve très vite avec un "Hello World" qui tourne sur son serveur local. Le principe est très simple. On dispose de deux exécutables pour uploader sur l'AppEngine ainsi que pour tester en local en lançant un serveur web très rapidement.

Après avoir testé un peu plus en profondeur de mon côté, voilà ce que l'on peut reprocher à l'AppEngine :


* Les timezones : Toutes les dates et heures sont basées sur l'heure UTC. Par conséquent il faut insérer des traitements supplémentaires pour recaler les dates et heures au timezone français par exemple. C’est un traitement qui alourdit le temps d’exécution.

* Backup de BDD : Il n'est pas possible à ma connaissance de récupérer un back-up de sa base de données en ligne. On ne peut donc pas non plus faire des traitements de masses sur sa base, si par exemple on souhaite modifier la structure ou faire un import de masse sans passer par l'application web.

* Exécution de tache à heure fixe (CRON par exemple) : La encore on ne peut pas programmer des traitements à heure fixe. Bon ce n'est pas un souci pour la majorité des gens et ça n'est pas dispo' sur la majorité des serveurs web de base non plus.

* Une BDD un peu lente : Quand on commence à pousser un peu niveau requêtes/analyses sur la base (récupérer plus de 2000 lignes par exemple). On se rend compte que BigTable galère un peu et c'est bien dommage.

* Gestion des données en base complexe : Les IDs de lignes ne sont pas accessibles, on est obligé de récupérer l'id après un insert pour ensuite mettre à jour sa colonne perso ID avec le même. Ce qui fait qu'on se retrouve avec deux colonnes représentant la même information, une accessible seulement par BigTable et une autre identique fait par nos soins. D'un fait général, s'aventurer vers une base de données avancée me parait dès lors très complexe.


Mais il ne faut pas oublier que l'AppEngine est tout jeune et comme tout produit Google il est voué à évoluer très rapidement. Les développeurs parlent déjà de supporter plus de langages (ce qui n’est pas forcement une bonne nouvelle, je préfère personnellement cent fois le Python au PHP). Il n'est pas destiné à n'importe qui, mais il offre quelques avantages non négligeables. Comme par exemple l'intégration du SSO Google via l'API. C'est à dire que l'utilisateur s'identifiera avec son compte Google pour se loguer à votre application, en contrepartie vous accéderez à son email, login et autres infos du compte (pas tout bien entendu) alors que vous auriez du coder tout ça -compte et sa gestion- par vous même auparavant.

Il faut donc laisser du temps à l'AppEngine pour murir un peu. Mais nul doute que le produit est intéressant, en particulier si son intégration à Google Apps est possible.

Et vous, vous avez testé ? Ça vous inspire quoi ? Ça vous passe au dessus du cigare ?
par Grizzli
Lundi 14 avril 2008 à 18 h 17
Je trouve que leur application ressemble étroitement à Django project.
C'est pas un mal de faire du dev web en Python c'est juste que la plus part des serveurs proposant une hebergement ne proposent pas python.
On pourra regreter l'absence de SGBD comme Mysql ou Postgres, c'est fort dommage.
@Grizzli
par jye
Lundi 14 avril 2008 à 18 h 25
En effet, extrait de leur FAQ :

What frameworks does Google App Engine Support?

Google App Engine allows most python web frameworks to be uploaded with your application. These web frameworks should need little or no modification to work with our system. For your convenience, Django v0.96.1 is included with the Google App Engine SDK.

Pour ceux qui est du SGBD. On voit bien que pour le lancement ils se sont contenté de pousser les technos qu'ils utilisent en interne. Soit Python/BigTable. On peut imaginer par la suite qu'ils proposent d'autres langages et d'autres SGBD. Mais bon, rien n'est sur.
par casper
Lundi 14 avril 2008 à 18 h 44
Même remarque que Grizzli, pourquoi utiliser un SGBD qui me semble assez poussif d'après ta description au lieu d'utiliser des SGBD qui ont fait leurs preuves ? Comme tu le faisais remarquer dans ton article précédent c'est un peu réinventer la roue...

Et sinon en temps que développeur amateur, j'utilise beaucoup PHP, quels sont les avantages du Python ?
Lundi 14 avril 2008 à 18 h 46
J'utilise Python au boulot (Zope, Plone, toussa), et ma boite va se mettre à Django d'ici peu, donc je suis content qu'ils mettent ces technos en avant.
Je trouve ça vraiment bien ce que fais Google avec les multiples API qu'ils sortent, qui sont bien léchées et bien documentées.
Mais se pose le problème du stockage des données. Stocker toutes ses données sur Google ça me branche pas trop... Je parle d'un point de vue professionnel. Sinon pour un particulier c'est tout bon.

edit : les avantages de Python? Mon opinion : la simplicité, la rapidité de codage, permet de coder des applis webs, des applis graphiques, des scripts... , un beau code propre, des doctests etc...
par mst
Lundi 14 avril 2008 à 18 h 52
Engraisser Google de code/datas voilà ce que j'y vois.
C'est bien beau un SDK mais l'amont n'est pas libre je suppose. Au prix d'un hergement mutualisé, la richesse des API disponibles quels que soit le langage (PEAR, CPAN & co) personnellement je ne vois pas du tout l'interêt de se formater Google.

Edit: Python c'est très bien, je le critique pas du tout ce choix de langage. Mais bon leur API, leur SGBD, leur services.

Sinon rien à voir mais je n'ai pas réagit à ton précédant billet, que je n'ai pas vu. Je n'utilise plus que Mootools comme lib JS, je trouve ça vraiment élégant, complet et intelligent. La stable 1.2 est annoncée pour les jours qui viennent.
Lundi 14 avril 2008 à 19 h 32
Je pense qu'ils imposent BigTable pour des questions de réplication : ils ont déjà toute l'infrastructure pour répliquer les bases en "temps réel" sur leurs datacenters. Et en effet, ce n'est pas une base de données relationnelle, il vaut mieux coder proprement si on veut pouvoir porter le code.
par jye
Lundi 14 avril 2008 à 20 h 26
@casper: Par simplicité. BigTable est le système qu'ils utilisent en interne. Je pense que ce système est efficace, le soucis se situe surement au niveau de l'utilisation au sein de l'AppEngine et notre vision d'un systèmes de base de données qui ne doit pas coller à BigTable, d'où une mauvaise utilisation. Mais ça j'aurais bientôt l'occasion d'en discuter avec Google, je ne manquerais pas de leur poser des questions.

Pour les avantages, voilà deux trois raisons en anglais :

Highly adaptable - You need a language that is very flexible, so you can adapt your tools during development
Rapid development - For new and experienced developers - The market moves very very quick; you want to be able to keep up with it. If it takes two years for you to respond to something that is needed today, you're behind the curve.
Easy to maintain - most important point in Greg's view - You can come back a year later, look at that code, and understand what is going on.


@Crazralfrill: Le stockage des données chez Google, c'est toujours (et c'est normal) l'argument qui revient en premier quand on parle des services Google aux entreprises. Il faut savoir que Google ne plaisante pas avec ça, je ne vais pas m'étaler à part si ça vous intéresse vraiment.

@mst : oui je suis comme toi, MooTools est mon préféré.

@DjMerguez : Exactement! Vu que BigTable est utilisé en interne, le système est surement bien au point en terme de réplication. Dans les prochains jours, j'ai bien l'intention de mettre un peu à l'épreuve BigTable pour voir ce qu'il a dans le ventre!
par casper
Lundi 14 avril 2008 à 20 h 37
Ok jye mais pour moi ça ressemble plus à du bullshit marketing qu'à de véritables arguments... Qu'est ce qui te plait plus dans le Python que dans le PHP, pas la peine d'écrire trois pages, je veux seulement connaître ton point de vue si ça te dérange pas.
par jye
Lundi 14 avril 2008 à 20 h 43
Bah ce que j'ai copié collé correspond à ce que j'aime au niveau du Python, attention j'aime bien aussi le PHP hein. Avec le Python j'ai très facilement et rapidement un code efficace, rapide et fonctionnel. Le tout assez simple. Et puis c'est facile à lire, donc quand tu dois reprendre du code existant c'est rapide. C'est une question de gout surement, on peut penser pareil du PHP hein, c'est un point de vue comme un autre.
par casper
Lundi 14 avril 2008 à 20 h 48
C'est plus une question de goût en fait, car en effet je pourrais dire pareil du PHP.
par MeraK
Lundi 14 avril 2008 à 21 h 55
"Il faut savoir que Google ne plaisante pas avec ça, je ne vais pas m'étaler à part si ça vous intéresse vraiment."

Ben ouais tiens, perso ça m'intéresse :)

edit : très très chouette css au passage
Lundi 14 avril 2008 à 22 h 37
C'est un véritable plaisir de lire ton blog. Moi qui n'ai jusqu'à présent que codé en PHP, après vos commentaires, le Python m'attire bien (puis ça fera toujours ça de plus sur mon CV, bien que je sois en CDI ça peut toujours être utile).

Question très conne, mais en Python, on peut intégrer du JavaScript comme en PHP (vu que c'est exécuté côté client) ?
par jye
Lundi 14 avril 2008 à 23 h 17
@MeraK : Je le note, j'en ferais un court billet bientôt alors! Et merci pour les compliments!

@Conradson : Merci pour le commentaire, pour te répondre je vais être un peu long mais essayer d'être clair!

D'abord une petite précision, le PHP comme le Python est un langage qui est interprété (exécuté si tu veux) côté serveur.
Lorsque l'on développe il est toujours bien de respecter quelques modèles. La majorité des gens qui codent en PHP ne code pas correctement (à mon sens). En effet la page PHP contiendra à la fois du code HTML/Javascript destiné à être exécuté coté client, mais aussi du code PHP qui sera lui exécuté coté serveur avant d'être envoyé au client. On se retrouve avec une page mélangeant les traitements et le rendu.

Pour coder plus proprement il est préférable de coder selon un modèle MVC (pour Modèle, Vue, Controleur). En gros, qu'est ce que ça signifie ? Tu as ta page PHP d'un coté qui contient tout les traitements des données que tu souhaites afficher. Et de l'autre coté, tu as ta page HTML qui contient le template du rendu que tu souhaites afficher. Tu sépares donc les traitements du rendu.

Pour prendre un exemple concret, quand je code en PHP, j'ai d'un coté mon fichier index.php et de l'autre index.html. Dans mon fichier index.html dès que je dois afficher du contenu généré par mon fichier PHP je met des "variables" du genre %NOM%. Et dans mon fichier PHP après avoir effectué tout mes traitements je charge le fichier index.html et je remplace mes variables comme %NOM% par la donnée que j'ai traité précédemment.

Comme tu peux le voir dans mon exemple, ce n'est pas du tout obligatoire, c'est une habitude et un réflexe. Mais tout est fait à la main.

Dans le cadre de l'AppEngine, il existe des librairies (Django pour l'AppEngine) qui gèrent tout ça mais le fonctionnement est identique.

Dans mon code Python je calcule mes données que je stock dans un tableau destiné pour mon template index.html. Dans index.html j'affiche les données calculées avec des balises du type {{ maVariable }}. Et bien sur pour en venir à ta question sur le javascript, tu l'auras compris, ton template HTML peut contenir tout le Javascript que tu souhaites.

Voilà j'ai préféré reprendre d'assez haut pour expliquer clairement mais je suis pas sur d'être très clair au final. Dis moi si tu ne saisis pas un truc et je te posterais un exemple plus concret à base de code!
@jye
Mardi 15 avril 2008 à 09 h 54
Peut être actuellement Google ne plaisante pas avec ça. Mais le jour où les fondateurs auront quitté la boite, et où les actionnaires en prendront le contrôle (si ce n'est pas déjà le cas actuellement), qui sais ce qui va se passer..
par jye
Mardi 15 avril 2008 à 10 h 41
C'est une vision très paranoïaque que tu as j'ai l'impression. Je ne vois pas trop l'intérêt de creuser dans cette direction. Et je ne vois pas quel bonne pub ça leur ferait ?

Pour ce qui est du milieu de l'entreprise, il y a des contrats qui posent clairement les choses. Une entreprise n'irait pas s'engager avec Google si elle n'avait pas de sécurité.

J'en ferais un billet bientôt et on aura l'occasion d'en discuter!
Mardi 15 avril 2008 à 11 h 02
C'est peut être un peu paranoïaque, mais en tout cas c'est une possibilité. Imagine la base d'informations qu'ils vont posséder pour faire de la veille ou de l'espionnage économique!

J'attends ton prochain billet.
Mardi 15 avril 2008 à 11 h 28
Juste pour dire que je chie sur ton blog avec sa sélection de texte tuning quasi invisible.

Ha si quand même, j'ai eu l'occasion de travailler avec Python, sa syntaxe est tout simplement horrible et ultra rigide. Tu mets une tabulation là où il faut pas: t'es mort. Supayr ce concept dis donc.
@El_Porico
par jye
Mardi 15 avril 2008 à 12 h 12
D'une je n'avais jamais remarquer et je ne sais pas d'où ça sort puisque je n'ai rien custom dans ma CSS en ce qui concerne la sélection. Edit : voilà qui est corrigé.

De deux, modère ton langage sinon je supprimerais tes message vu que je ne peux pas les modifier moi même.

De trois, si tu es habitué à mal coder, c'est sur que le respect d'une syntaxe imposé par Python oblige à faire un petit effort. Mais cet effort est nécessaire pour une meilleure reprise du code par la suite.
par MeraK
Mardi 15 avril 2008 à 13 h 23
Tiens, ça doit être le premier commentaire négatif vis à vis de la syntaxe de Python que je lis.

(c'est vrai que c'est plus compliqué de coder n'importe comment avec python qu'avec php par exemple)
par ap0
Mardi 15 avril 2008 à 20 h 29
Je vais me remettre au python.

Article intéressant, et, j'aime beaucoup ta css.

J'attends ton prochain article.
Tout le monde peut publier un commentaire, vous n'avez pas besoin de compte (dans ce cas votre commentaire ne sera publié qu'une fois validé par le propriétaire du blog)

Commenter

Tags autorisés : [b] [/b], [i] [/i], [u] [/u], [code] [/code], [img]Adresse d'une image[/img], [url=Adresse d'un site web] [/url]
Vous pouvez aligner vos images à droite ou à gauche en modifiant le tag [img] comme ceci : [img right] ou [img left].

Pour vos vidéos/animations flash : [video]Adresse d'une animation[/video], pour préciser la largeur et hauteur : [video width=100 height=200]...[/video]