Google App Engine (GAE) : une première requête coûteuse

IBonjour à tous,

C'est lent !

Une latence excessive sur votre application GWT/GAE? pas de panique, c’est “peut-être normal”! Pour toi lecteur, je te partage l’info !

Je développe en ce moment une petite application WEB basée sur les technologies GWT et GAE.

Lors de mes récents tests en environnement de “production”, j’ai constaté une réactivité faiblarde à la première interaction avec mon application. Etant donné que l’ensemble de mes fonctions appelées interagissent toutes avec le datastore, et ayant résolu le problème avant d’aller plus loin, je ne peux pas réellement affirmer si c’est l’accès au datastore qui est en cause (les requêtes sont plutôt simples) ou si c’est le serveur applicatif).

Mais une fois passé cette première requête lente…ça envoie de la patate. Et c’est surtout taillé pour monter en charge de manière totalement transparente (avantage du GAE).

Bref, en gros maniaque des performances…je ne pouvais laisser mes futurs utilisateurs adorés avec ce temps d’attente affreux (entre 6 à 8 sec) et surtout trouver l’origine du problème. Ci dessous le message visible dans les logs de GAE (interface admin).

#10-22 12:19PM 12.330 /topsecret/log 200 6352ms 7993cpu_ms 176api_cpu_ms 0kb Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3,gzip(gfe)
78.228.96.116 - - [22/Oct/2009:12:19:18 -0700] “POST /topsecret/log HTTP/1.1″ 200 132 “http://topsecret-beta.appspot.com/topsecret/0D01E7FF5AD6B94356E41E31751A053C.cache.html” “Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3,gzip(gfe)”

Google App Engine optimise ses webfarms. Les ressources allouées pour chaque application est également gérées. Je ne sais pas exactement ce qu’il s’y passe derrière, mais une application tombe en “veille” au bout d’un certain temps (5-10 minutes) s’il n’y a aucune activité (pas de requête).

Voici le test que j’ai réalisé:

  • J’ai attendu au moins 10 min pour placer l’application en veille.
  • Une personne s’est connectée à l’application et a appelé une fonction (en observant ce phénomène de latence).
  • Je me suis connecté à l’application juste après (1 min) et j’ai observé aucune latence sur la même fonction appelée.
  • CQFD.

Cette latence ne sera donc pas observée si l’application est périodiquement utilisée. C’est à dire qu’il faudra que GAE réalise une consommation CPU toutes les 5 ou 10m pour éviter de tomber en mode “veille”, sinon le réveilleur observera ce phénomène de “lenteur”.

Il me semblait intéressant de partager cette information.

Si toi, cher lecteur, tu connait plus précisément le fonctionnement de “veille” de GAE, il serait généreux de ta part de nous éclaircir la lanterne. Merci d’avance.

Merci de m’avoir lu.

RL.

Google App Engine Java + GWT

Google App Engine

Google App Engine

Pour tous ceux qui aime le développement web, mais qui sont rebutés à l’idée de déployer leur application, Google lance son Google App Engine qui supporte désormais le JAVA. Il n’est, bien sûr, pas là par hasard, il vise à étendre l’utilisation de GWT, véritable combattant de la guerre des plateformes client riche avec SilverLight, Flash, JavaFX, Flex, Echo2, YahooUI!, etc…

Un plugin eclipse est disponible comprenant 3 boutons Plugins Eclipse

  • créer une application (GWT),
  • compiler son application,
  • déployer son application sur GAE.

To be free() !

Être incognito sur internet ! Voilà une belle idée ! Mais est-ce vraiment possible ? Avec l’annonce de la loi HADOPI qui compromet sérieusement la liberté de l’internaute, il convient de s’y intéresser d’un peu plus près.

Tout d’abord, dressons un petit schéma de ce qui se trame aujourd’hui lorsque vous naviguez sur internet.

Connexion Internet de chez vous à JDK CC

Actuellement, lorsque que vous vous connectez à votre « box » pour aller naviguer sur Internet, votre FAI (Orange, Free, Alice, Darty, Neuf, etc..) vous attribue une adresse IP. C’est cette adresse IP qui permettra, en cas de problème, de vous retrouver.

Un nommage à Hibernate

Hibernate

Je remonte un problème qui m’a paru personnellement assez fourbe. Il concerne un bug (ou pas?) lors de la création d’une base de données alimenté par un fichier de conf Hibernate.  Bien entendu, je fournis la solution… ;)

On obtient la sortie d’erreurs suivante (il ne veut rien savoir, la table “USER” ne lui plaît pas):

24 mars 2009 22:54:45 org.hibernate.tool.hbm2ddl.SchemaExport create
GRAVE: Unsuccessful: create table USER (UID integer not null, LOGIN varchar(12) not null unique, PASSWORD varchar(12) not null, EMAIL varchar(255) not null, REGISTRATION-DATE timestamp not null, STATUS integer not null, primary key (UID))
24 mars 2009 22:54:45 org.hibernate.tool.hbm2ddl.SchemaExport create
GRAVE: Erreur de syntaxe : Encountered “USER” at line 1, column 14

Avec comme configuration :

<class name="core.User" table="USER">
        <id name="uid" column="UID">
            <generator class="increment"/>
        </id>
        <property name="login" column="LOGIN" not-null="true" unique="true" length="12"/>
        <property name="password" column="PASSWORD" not-null="true" length="12"/>
        <property name="email" column="EMAIL" not-null="true" />
        <property name="registrationDate" column="REGISTRATION-DATE" not-null="true" type="timestamp"/>
        <property name="status" column="STATUS" not-null="true" type="integer"/>
</class>

Problème bête (une histoire de nommage…):

Le problème vient de la définition de l’attribut “column”.  Hibernate ne supporte pas les majuscules en nom de colonne. C’est valable également pour les tables.

Solutions (si j’avais su…):

  • écrire les tables en minuscule,
  • rajouter des back-quotes –> ` <– (comme ceci: column=”`LOGIN`”)

En espérant vous avoir aidé !

Romain LAFOND.

Codeurs du dimanche

Artiste

Il faut l’avouer, en tant que développeurs, nous avons acquis des compétences particulières nous octroyant la merveilleuse capacité de…créer. Ça fait un peu « dieu » dit comme ça. Mais créer quoi au fait ? Nous ne sommes pas vraiment ce que l’on appelle « des artistes ». Ou du moins, pas au sens des beaux arts comme on l’entend. Nos outils ne sont pas aussi nobles qu’un pinceau ou qu’un crayon. La création se fait avec des centaines voire des milliers de lignes de code Et oui…c’est nettement moins sexy dit comme ça, mais on aime ça ! Mais quelque part, il y a une graine d’artiste qui sommeille en nous avec un style, par contre, beaucoup plus…geek !

Changer la couleur d’un Clip Flash en AS3

Changer la couleur d'un Clip Flash en AS

Vous voulez changer dynamiquement la couleur d’un de vos Clip ou MovieClip en Flash à partir d’Action Script 3.0 (AS3).

Cela se fait en 3 lignes de code:

/* création du Clip - MovieClip */
var monClip:Rond = new Rond();
this.addChild(monClip);
 
/* on change ici sa couleur */
var newColorTransform:ColorTransform=monClip.transform.colorTransform;
newColorTransform.color=0x330000; // ici le code couleur FF330000
 
monClip.transform.colorTransform=newColorTransform;

Voilà !

Romain LAFOND

Le problème des threads avec Server Push

Nous verrons dans cet article les limites du principe de Server Push lorsqu’il est implanté avec une API I/O standard (non multiplexée).  Pour mieux comprendre, rappelons brièvement le cycle de vie d’une servlet (source).

La solution du server push : « connection refresh »

Le protocole TCP/IP s’assure, entre autre, du bon transport d’une information (un ensemble de paquets  IP) d’un point A au point B (rapide résumé de ce qui nous intéresse sur ce protocole). Cette traversé, si on peut l’appeler comme ça, est composée d’une multitude d’obstacles comme par exemple des routeurs, des firewall, des proxy, des VLAN, etc. Chaque élément est soumis à des contraintes physiques (avoir un temps de réponse acceptable), des contraintes de sécurité et des contraintes de bon fonctionnement (ne pas altérer l’intégrité des données).

Connection refresh : la solution du server push

Comet ? Qu’est-ce que c’est ?

Le terme « comet » est employé à toutes les sauces aujourd’hui. C’est devenu un terme fourre-tout et ultra tendance lorsqu’on veut parler de web 2.0 ou 3.0. Lorsqu’on parle de comet, on parle également de reverse-ajax, cometd, long polling, slow polling, long-lived HTTP connections, server push…Une petite explication s’impose !

Comet

On va tâcher d’expliquer la différence entre server push et comet. Nous verrons que ce n’est pas tout à fait la même chose, bien qu’ils soient, aujourd’hui, très souvent associés l’un à l’autre.

Les mécanismes du Server Push : les problèmes

Dans ce billet, nous allons soulever les problèmes liés à la mise en place du mécanisme de Server Push dans une application web.

Les mécanismes du server push