Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Web Development
Code

Améliorez les Performances de Votre Application Avec Memcached

by
Difficulty:AdvancedLength:MediumLanguages:

French (Français) translation by Willy Touomi (you can also view the original English article)

L'une des façons les plus simples d'améliorer les performances de votre application consiste à mettre en place une solution de cache en amont de votre base de données. Dans ce tutoriel, je vous expliquerai comment utiliser Memcached avec Rails, Django, ou Drupal.

De par l'activité de sa communauté, la simplicitié de son installation et sa solide histoire, Memcached constitue un bon choix pour pallier ce genre de problème. Des sociétés de tout genre en font usage, les grandes comme les petites, et même des geants comme Facebook, Youtube et Twitter. Le site de Memcached lui-même le présente comme étant un "Système de cache d'objet par mémoire distribué, gratuit & open source, haute-performance, générique par nature, mais conçu pour accélérer les applications web, en réduisant la charge sur la base de données".

Les appels aux bases de données sont généralement lents.

En général, les appels aux bases de données sont lents, puisque le traitement des données nécessite des ressources CPU et que ces données sont (habituellement) extraites à partir du disque dur. D'un autre côté, un cache en mémoire, comme Memcached, demande très peu de ressources CPU et les données sont récupérées depuis la mémoire plutôt que depuis le disque. L'allègement du processeur est une conséquence de la conception de Memcached; contrairement à une base de données SQL, Memcached ne peut exécuter des requêtes. Par contre, il utilise une paire clé/valeur pour l'extraction des données, et l'on ne peut pas extraire une valeur sans connaître à l'avance sa clé.

Memcached garde entièrement les paires clé/valeur en mémoire. Cela rend la récupération des données extrêmement rapide, mais leur confère aussi un caractère éphémère. En effet, en cas de crash ou de redémarrage, la mémoire sera effacée et toutes les paires clé/valeur devront être reconstruites. Memcached ne dispose d'aucun système de haute-disponibilité et/ou de basculement automatique intégré. Cependant, c'est un système distribué. Ainsi, les données sont sauvegardées au travers de plusieurs noeuds. Si un noeud est manquant, les noeuds restant prennent en charge le traitement de ses requêtes et son remplissage.

Installation de Memcached

L'installation de Memcached est un processus relativement simple. Vous pouvez l'installer via un gestionnaire de paquets ou en le compilant depuis une source. En fonction de votre distribution, il pourrait être nécessaire de faire une compilation depuis la source, puisque les paquets ont tendance à sortir un peu en retard.

Vous désirerez certainement configurer Memcached selon vos besoins, mais, pour cet exemple, nous le ferons fonctionner avec une configuration basique.

A ce niveau, Memcached devrait normalement être en cours d'exécution. Dans la suite, nous verrons comment utiliser Memcached avec Rails, Django et Drupal. Il faut noter que vous n'êtes obligé d'utiliser Memcached à l'intérieur d'un framework seulement. Via ses nombreux clients disponibles, vous pouvez aussi l'utiliser avec divers langages de programmation.

Utilisation de Memcached avec Rails 3

Rails 3 fait une abstraction du système de cache et l'on peut donc changer le client selon notre désir. Dans Ruby, le client Memcached de prédilection est Dalli.

Lorsque vous êtes en mode de développement, vous utiliserez forcement Memcached. Donc, lancez Rails en mode de production avec rails server -e production, ou ajoutez les lignes ci-dessus à votre fichier config/environments/development.rb.

L'utilisation du cache se fait simplement à travers les méthodes write/read qui permettent de récupérer les données:

La modèle le plus courant de manipulation du cache avec Rails est via la méthode fetch. Elle tentera de récupérer la clé (dans ce cas, expensive-query), puis de retourner la valeur. Si la clé n'existe pas, le bloc sera exécuté et le résultat sera gardé dans la clé spécifiée.

Dans l'exemple ci-dessus, le problème est l'expiration du cache (l'une des deux grande difficultés en informatique). Une solution plus avancée et plus robuste serait d'utiliser une partie des résultats dans la clé du cache elle-même, afin que la clé expire automatiquement si le résultat venait à changer.

Ici, nous utilisons la date updated_at comme partie de la clé, ce qui nous permet d'avoir un système intégré l'expiration du cache. Ainsi, si la date user.updated_at venait à changer, la nouvelle clé ne retournera aucun résultat (le profil ne sera pas retrouvé dans le cache), et une nouvelle entrée de cache sera créée. Dans notre cas précis, nous aurons besoin de mettre à jour le champ updated_at quand le profil utilisateur est mis à jour. C'est aussi simple qu'ajouter:

Maintenant, vous avez des profils auto-expirant, sans aucune crainte que vous récupérerez des données obsolètes après mise à jour du profil utilisateur. C'est quasiment magique!

Utilisation de Memcached avec Django

Une fois que Memcached est installé, il est facilement accessible avec Django. Commencons par installer une bibliothèque cliente. Nous utiliserons pylibmc.

L'application devrait avoir démarré maintenant et devrait utiliser Memcached. Comme les autres bibliothèques, vous aurez à disposition des méthodes basiques getter et setter pour accéder au cache:

De plus, avec add, vous pouvez ajouter une clé si elle n'existe pas encore. Si elle existe déjà, la nouvelle valeur sera ignorée.

Avec la bibliothèque Python Decorator Library, vous pouvez créer un décorateur memoized pour cacher les résultats d'un appel de méthode.

Les décorateurs vous donnent la capacité de traiter le plus gros du travail du cache et de l'expiration de cache. Pendant la plannification de votre système de cache, rassurez-vous d'avoir lu les exemples de cache présents dans la bibliothèque Decorator Library.

Utilisation de Memcached avec Drupal

L'utilisation de Memcached avec Drupal commence par l'installation de l'extension Memcached pour Php.

Vous devrez redémarrer votre application afin que les modifications soient prises en compte.

Comme on s'y attendait, les méthodes getter et setter sont incluses dans le module Memcached. Un chose à noter cependant, c'est que cache_get retourne la ligne de cache. Il vous faudra donc accéder aux données sérialisées contenues dans la ligne.

Et aussi simplement, vous avez votre système de cache en place avec Drupal. Vous avez la possibilité de créer des fonctions personnalisées pour repliquer des fonctionnalités comme le cache.fetch de Rails. Avec un petit peu de plannification, vous arriverez à construire une solution de cache qui aménera la réactivité de votre application à un autre niveau.

Et voilà, vous y êtes

Bien qu'une bonne stratégie de cache demande un certain temps pour s'affiner, elle ne devrait pas vous empêcher de vous y mettre.

Implémenter un système de cache peut n'être qu'une formalité. Avec la bonne configuration, une solution de cache peut nettement améliorer la vie de votre architecture actuelle et rendre votre application plus performante qu'elle ne l'a jamais été. Et même si la mise en place d'une bonne stratégie de cache demande un certain temps pour être affinée, cela ne devrait pas être une raison pour ne pas commencer.

Comme avec tout système complexe, le monitoring est critique. Il est donc important de comprendre comment votre cache est utilisé, et où sont points chauds dans vos données. Cela vous aidera à améliorer la performance de votre cache.

Memcached possède un système de stats de qualité qui saura vous aider à monitorer votre cluster de cache. Mais vous devez aussi utiliser un outil comme New Relic afin de garder un oeil sur la différence de temps d'accès entre le cache et la base de données. Comme bonus, vous pourrez obtenir un T-Shirt gratuit 'Data Nerd' après inscription et déploiment.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.