lundi 23 juin 2008

Memcached

Connaissez vous memcached? C'est un système de cache distribué, qui permet de sauver et de retrouver un bout de binaire à partir d'une clé, la clé étant un autre bout de binaire. Ainsi, l'on a accès à une quantité de mémoire limitée seulement par le nombre de machines qui font tourner le service, et à partir du moment où l'on connait la clé, toute application pouvant se connecter au cache peut récupérer les données. Rajoutez quelques détails comme la gestion de la durée de vie des objets, et c'est un service tout à fait redoutable qui se profile.

Memcached est principalement utilisé dans les applications web. J'avais installé Mediawiki en local, et voyant le pic CPU lors de la génération de chaque page, je me demandais quel type de hardware wikipedia pouvait bien avoir sous le capot pour gérer autant de requêtes à la fois. La réponse, c'est memcached! Au moment d'accéder à la base de données, Mediawiki regarde tout d'abord si les données sont accessibles dans le cache. Si oui, il les récupère, s'épargnant une couteuse requête auprès de la base de données. Lorsqu'un utilisateur modifie la page, l'entrée dans le cache est supprimée, pour être remplacée par la nouvelle page. En majorité, seules les requêtes en écriture vont effectivement arriver sur la base de données, ce qui améliore grandement les performances. De fait, de nombreux sites à fort débit utilisent memcached.

Récemment, je travaillais sur une application qui commence à poser problème parce qu'elle arrive aux limites des 2 gigaoctets d'espace d'adressage. L'on a bien passé Windows en mode 3 gigaoctets, au prix d'une stabilité réduite, et de soucis avec d'autres applications qui ne s'attendaient pas à ce que le noyau aie son propre espace aussi réduit. Je me disais que c'est probablement la seconde utilisation qui puisse être faite de memcached: au lieu de garder les objets directement dans la mémoire du processus, on peut les envoyer dans la mémoire d'un autre processus, potentiellement sur une autre machine, et libérer ainsi le précieux espace disque sans pour autant trop impacter les performances, en attendant que l'on passe tous enfin en 64 bits.

Aucun commentaire: