nyroBlog
Bannière NyroBlog, par Nyro
Image par Nyro - ?

Tag : Serveur


PHP : un système de cache très simple et efficace

Lorsqu'on doit lister des éléments provenant d'une base de données avec énormément de liaisons dans la requête, le traitement prend quelques secondes et le serveur en prend un coup à chaque affichage de page.

Pour palier à ça, il faut mettre en place un système de cache des pages de listing.

Un système de cache consiste en l'enregistrement de la page une fois totalement traitée (donc ce qu'on affiche, le code HTML final) puis à le ressortir lors de l'appel suivant de la même page. Bien sûr, dans tout bon système de cache, on peut spécifier la durée de vie de ce cache (1 heure par exemple) pour qu'il soit effacé au delà et remplacé par un nouveau.

Avec ceci, on gagne donc en ressource serveur (beaucoup moins de connexions vers le serveur MySQL) mais les pages affichées ne sont pas synchronisées à l'instant T, on a 1 heure maximum de décalage. Même si ce n'est pas énorme, ce peut être handicapant dans certains cas, il faut le garder à l'esprit.

Pour un site que j'ai mis en ligne samedi dernier, qui utilise jusqu'à 11 tables dans ses listings, j'ai dû mettre en place un tel système pour gagner en temps d'affichage. L'avantage est que les listings changent une ou deux fois par jour au grand maximum, pas du tout pour la plupart. Le temps du cache est donc pour l'instant d'une heure, mais il est possible que je le monte à 2 voir 3 heures.

Pour mettre en place un tel système, j'ai regardé s'il n'existait pas un bout de code ou une classe sous licence GPL prête à l'emploi. Après quelques googlisations, j'ai trouvé mon bonheur.

Un petit tour dans le code pour changer le dossier d'enregistrement du cache afin de le rendre inaccessible depuis le site, et pour voir comment il générait ses noms de cache.

Il utilise simplement l'URL de la page demandée, y ajoute tous les paramètres donnés en GET et en fait le MD5 (pour avoir toujours la même longueur de nom fichier et pas de problèmes avec des caractères spéciaux) et y donne l'extension .cache.

Le gros plus de cette classe, c'est qu'elle permet de mettre en cache la page PHP zone par zone. On peut ainsi imaginer une page avec une partie sans cache (le menu avec les infos de connexion par exemple), une partie avec un cache d'une heure (un listing qui change assez souvent) et une partie avec un cache d'une journée (un classement journalier par exemple).

De plus, si vous voulez forcer la reconstruction du cache, il suffit de mettre le paramètre rebuild en GET dans l'URL de la page.

Une classe à ajouter à votre librairie de toute urgence ! (et le site dans vos favoris...)


Modification de décembre 2010

Comme le fichier n'est plus accessible depuis le lien donné plus haut, voici le fichier que j'avais gardé dans mes archives.

Google Gears

La grosse info du jour, c'est Google qui sort une beta de Gears.

Gears est un plugin (pour IE, FireFox e bientôt Safari) qui permet eu développeur de mettre en place facilement une application web fonctionnant offline. Le plugin se comporte comme un base dedonnée locale par laquelle toutes les requêtes vers le serveur passe. Si le serveur n'est plus disponible (déconnecté), alors le plugin enregistre toutes les requêtes effectuées.
A la prochaine connexion, les requêtes seront envoyées dans l'ordre au serveur pour être mise à jour.
En plus de sauvegarder les requêtes, il sauvegarde les CSS, l'HTML, et les javascript; bref, tout ce dont a besoin l'appli pour fonctionner.

Gears est open source, et laisse présager beaucoup de bon pour l'avenir. Je vais m'y intéresser cet été; imaginez, vous proposez à vos clients vagabonds une administration disponible off-line. Le rêve.

La présentation au Google Developper Day 2007 (anglais) :

Reste à choisir entre celui là ou alors attendre FireFox 3 qui permettra de faire aussi des choses du genre. A choisir, ça sera plus Gears car il est disponible avec IE, donc moins contraignant.
Votre avis ?

Via Fred Cavazaa

Interview d'un joueur de Travian

TravianJe vous avais déjà parlé de Travian.
Voici aujourd'hui l'interview de l'ami qui m'en a parlé, et qui y joue toujours.

Pour commencer, peux-tu décrire rapidement Travian : quel est le but du jeu, comment on y joue, qu'est-ce qu'on peut y faire ?
Travian est un jeu de stratégie de guerre au temps des Romains, Gaulois et Germains. Le but est de faire gagner ton alliance en réunissant des Artefacts, et en construisant une Merveille. Le jeu est un peu semblable à Age Of Empires : on développe ses villages (ressources, armurerie, caserne, écurie...) pour ensuite coloniser ou conquérir un autre village...

Tu es inscrit à Travian depuis plus de 6 mois maintenant. Comment as-tu découvert ce jeu en ligne, et qu'est-ce qui t'a plus ?
C’est un collègue qui m’en a parlé. Le soir même je suis aller sur le site pour voir ce que c’était, je me suis inscrit, et depuis j’ai pas décroché... Ce qui m’as plus, c’est que l’on monte tranquillement ses villages et que l’on guerroie contres ses voisins touts en s’alliant à d’autres... Et le tout accessible 24h/24h. Le site est également très bien conçu et très attractif.

Quels sont les différences entre Romains, Germains et Gaulois ? Lequel conseillerais-tu à quelqu'un qui veut débuter et pourquoi ?
Chaque tribu a ses avantages. Les Germains sont plutôt offensifs, les gaulois défensifs et les Romains polyvalents. Sachant bien sûr que l’on peut être très offensif avec un peuple gaulois, mais ça demandera sûrement plus de ressources que pour se faire une armée aussi efficace qu’avec des Germains.
Pour ceux qui commencent, on préconise souvent les Romains qui sont justement très polyvalents et qui permettent la construction simultanée de ressources et bâtiments... Cependant j’ai commencé avec les Gaulois (pour leur coté pacifique) et je suis actuellement dans les 75 meilleurs de mon serveur (plus de 10 000 au départ...)

As-tu quelques petites astuces qui ne sont pas forcément évidentes et qui peuvent être utiles aux joueurs ? Des conseils ou suggestions pour les (futurs) joueurs ?
Rester collé a son ordi !!! Non le seul conseil que je peux donner c’est de penser à se faire de bonnes relations avec certains joueurs, il ne faut pas essayer de se battre avec tout le monde ! Il faut savoir faire des concessions a certains moments, qui pourront se révéler très judicieuses par la suite ! Mais attention ne cédez pas toujours au chantage, gardez un peu d’humilité !
Dernier conseil : Le niveau de population ne montre pas toujours le niveau du joueur. J'ai eut souvent plus de difficulté à prendre un village à un joueur pourtant plus faible que moi en population, qu'a un joueur plus fort que moi...

Comment se passe le jeu en guilde (équipe) ?
Une fois recruté par une alliance, ou la tienne de créée, tu évolues donc au côté d’alliés. Avec cette alliance, il se crée souvent un forum qui permet de communiquer plus facilement. Se finalise également des Pactes Totaux, ou De Non agression avec d’autres alliance. Il ne faut pas oublier que dans Travian, ce n’est pas un joueur, mais une alliance qui gagne. Il faut savoir aider ses amis aussi bien au niveau offensif que défensif. Le but étant de faire de ton alliance une dominatrice du serveur, avant l’arrivée des Artefacts sur le serveur.

Tu m'a parlé récemment de la version 3 de Travian. Quelles sont les nouveautés qui y sont apportées ? Quelle est la place de la partie payante du jeu ?
La version 3 a amené plusieurs changements. D’un point de vue graphique en premier lieu, mais surtout d’un point de vue du jeu en lui même. De nouvelles fonctionnalités ont été apporté aux peuples, de nouveaux bâtiments (manoir du héros, place de tournoi, pièges,...).
Cependant dans l’ancienne version, ceux qui optaient pour Travian plus (version payante) avait surtout des avantages au niveau des outils pour préparer les attaques, repérer les joueurs... Alors que maintenant les options payantes offres de vrais avantages sur le jeu (bonus de productivité, de ressources, bonus d’attaques ou de défense,...), bienvenue au No-Life !!!

Connais-tu des équivalents à Travian ? Si oui, quels sont les avantages et inconvénients de chacun ?
J’ai déjà entendu parler de O-Game, mais je ne peux pas te dire grand-chose a son sujet, le mieux est d’aller y jeté un coup d’œil.

Merci pour tes réponses.

Le webmail idéal

Cela fait quelques temps que j'en rêve, et je viens d'en parler avec Miho.

Puisqu'un blog sert aussi à ça, je vous livre mon idée, ainsi que toutes les réflexions que j'ai pues me faire.

1) Ce que j'utilise
Depuis plus de 3 ans maintenant, j'utilise Thunderbird sur mon ordinateur qui fonctionne à merveille. Pas moins de 7 comptes mails paramétrés, des possibilités d'aller chercher les mails d'hotmail, gmail et autres services du genre.
Un filtre anti-spam sans équivalent, des fonctionnalités de recherche et de tri (apportées avec la dernière version) qui deviennent vite indispensable, une stabilité à toutes épreuves (mes plantages doivent se compter sur les doigts de la main).
Tout ceci pour dire que je suis pleinement satisfait de Thunderbird.

2) Les webmail existants
On connaît à peu près tous Gmail qui marche très bien avec son interface très simple mais tellement pratique, Hotmail et son nouveau webmail Live avec du tout beau Ajax, Horde et son interface simple et efficace.
Un peu moins connu mais néanmoins très intéressant, RoundCube (sous licence GNU) nous propose une très belle interface, avec glisser/déposer des messages (j'adore ce truc), interface simple et claire, rapide à chargée. Manque la possibilité d'éditer ses mails avec un WYSIWYG. Il fonctionne sur mon téléphone, même le double-clique est géré !

3) Ce dont je rêve
La réponse est simple : un mélange des deux ! Hé oui, je ne veux pas perdre tous les avantages de Thunderbird, mais je veux pouvoir lire mes mails depuis n'importe où, et surtout n'importe quelle plateforme (Windows, Mac, Linux, IE ou FireFox, téléphone, etc...), de la même façon qu'avec Thunderbird.
La solution qui me paraîtrait idéal serait la suivante :

  1. Il y aurait plusieurs interface possibles à la lecture des mails : le logiciel traditionnel et le webmail (éventuellement disponible en plusieurs version, selon la plateforme)
  2. L'idée serait de stocker les mails, dossiers, paramètres et tout ce qui est utile au logiciel sur un serveur. De cette façon, les mails sont à un seul endroit et toutes les interfaces de lecture éditions des mails utiliseraient ces éléments. Avec Thunderbird, je pense que certains pourraient facilement bidouiller ce genre de chose, en passant par un VPN ou quelque chose du genre. L'inconvénient ici serait qu'on a besoin d'être connecté pour consulter sa messagerie. Une sauvegarde locale des 50 derniers mails ?
  3. Pour le webmail, il utiliserai donc ces mêmes paramétres, et fournirai une interface adapté à la plate-forme de l'appareil l'affichant : une version full Ajax pour FireFox (dans l'idée de RoundCube), une version beaucoup plus light pour les téléphones, etc...

Bien sûr, la réception des emails se feraient au niveau du serveur, et non de l'application, puisqu'il y a plusieurs interfaces : la récupération des emails seraient donc plus rapide, du fait de la grosse connexion que possède un serveur dédié (100 Mbps) comparé à une connexion classique.
De plus, et c'est l'idée principale, on peut accéder aux mêmes dossiers, avec les mêmes plugins (si disponibles) depuis n'importe où et de n'importe quel moyen qui soit !
Lors d'un changement d'ordinateur par exemple, pas besoin de se soucier de la sauvegarde des emails, puisqu'ils sont ailleurs.

Alors vous allez me dire : Mais dans ce cas, pourquoi ne pas simplement utilisé un webmail classique, en le paramétrant comme il faut ?
Tout simplement car je ne connais pas de webmail intégrant un antispam aussi puissant que Thunderbird, que je n'ai pas encore trouvé LE webmail qui me convient, et parce que je veux pouvoir consulter (et rédiger) mes mails hors-ligne. Et puis, le logiciel reste quand même beaucoup plus rapide et robuste qu'un webmail.

Qu'en pensez-vous ? Est-ce que vous connaissez des solutions équivalentes ou qui répondraient à mes attentes ? Quels logiciels/webmails utilisez-vous ?

Backup d'une base de donnée MySQL

Quand on veut faire une sauvegarde d'une base de donnée MySQL, il n'y a pas 36 solutions.

Soit on prend son courage à 2 mains et on décide de se faire un script de backup manuellement. C'est long, et on est pas à l'abri d'oublier quelque chose, si on ajoute des tables par la suite.

Soit on se dit qu'une base de données, ce n'est que des fichiers et on décide de sauvegarder dans un tar gzippé le dossier contenant ces fichiers. Pour les remettre, c'est moins évident.

Soit on cherche un peu dans la doc MySQL et dans les commandes Bash commençant par mysql, et on découvre des choses toutes faites, qui, en une ligne, nous permettent de faire la sauvegarde de toute une base, voir de plusieurs.

Vous l'attendez tous, voici la ligne de commande :

mysqldump --user=LOGIN --password=PASSE --add-drop-table NOMBASE

Cette commande vous écrit toutes les requêtes MySQL à exécuter pour retrouver votre base de données. Le --add-drop-table permet d'ajouter les instructions de suppression de tables, si elles existent.

Là, je vous ai donné pour ne sauvegarder qu'une seule base. Pour en sauvegarder plusieurs, il faut remplacer NOMBASE par --databases NOMBASE1 NOMBASE2 NOMBASE3.

Pour sauvegarder toutes les bases de données, il faut remplacer NOMBASE par --all-databases.

Bon avec tout ça, vous allez avoir toutes les requêtes qui vont défiler sur votre écran. Pas très pratique pour restaurer... Un simple pipe vers un fichier pour sauvegarder le tout et le tour est joué :

mysqldump --user=LOGIN --password=PASSE --add-drop-table NOMBASE > FICHIER.sql

Enfin, pour restaurer, vous pouvez utiliser la technique que je vous ai déjà donné pour les grosses requêtes MySQL.