Wrapper Memcached pour Azure In-Role Cache

Important

Microsoft recommande tous les nouveaux développements d’utiliser le Cache Redis Azure. Pour obtenir de la documentation et des conseils actuels sur le choix d’une offre Azure Cache, consultez Quelle offre Azure Cache est adaptée à moi ?

Vue d'ensemble de Memcache

Memcache est une solution de mise en cache en mémoire distribuée qui permet d'accélérer les applications web à grande échelle en réduisant la pression sur la base de données. Combiné à d'autres technologies de façon innovante, Memcache est utilisé par de nombreux grands sites web.

Azure prend en charge le protocole Memcache pour permettre aux clients ayant des implémentations Memcache de migrer facilement vers Azure. Si une application utilise déjà Memcache, il n'est pas nécessaire de remplacer ce code par un nouveau code.

L'exécution d'une mise en cache Azure avec Memcache constitue une meilleure option que, par exemple, l'exécution seule de Memcache dans un rôle de travail. En effet, la mise en cache Azure inclut des fonctionnalités à valeur ajoutée, telles que l'arrêt correct, la haute disponibilité, la mise en cache locale (sur le shim de client), les notifications (sur le shim de client), la cohérence des données, la mise à l'échelle simplifiée transparente pour les clients, etc. Par exemple, le schéma de hachage du serveur et la gestion des partitions dans une mise en cache Azure avec Memcache permettent d'équilibrer la charge et de préserver la cohérence des données.

Prise en charge du protocole Memcache

La mise en cache Azure prend en charge le protocole filaire Memcache. Il existe deux versions du protocole : une version binaire et une version texte.

La mise en cache Azure prend en charge ce protocole en plus de son propre protocole filaire. Un client Memcache doit prévoir la compatibilité avec Azure. La mise en cache Azure prend en charge la plupart des API prises en charge par d'autres implémentations de Memcache.

À ce titre, si un utilisateur migre une application Memcache vers Azure et la fait pointer vers l'implémentation Memcache d'Azure, celle-ci devrait continuer à fonctionner sans autre modification.

Memcache prend en charge deux expériences de développement distinctes : l’utilisation d’une « passerelle de serveur » et l’utilisation d’un « shim client ».

Passerelle de serveur Memcache

Une passerelle de serveur est simple dans la perspective de l'implémentation, du déploiement et de la présentation conceptuelle. Elle est toutefois associée à d'importants facteurs décrits ci-dessous.

Lorsqu'une passerelle de serveur est utilisée, le cluster de cache du serveur écoute sur le socket Memcache. En d'autres termes, il ouvre un socket et écoute les paquets sur le protocole Memcache. Il n'y a pas de couche de traduction (décrite ci-dessous).

Pour activer cette fonctionnalité, ouvrez un autre point de terminaison interne dans votre cluster de cache, nommez-le et définissez-le comme port Memcache. Tout le trafic lié à ce port sera reçu via le protocole Memcache.

En comparaison du shim de client, la passerelle de serveur affecte toutefois les performances dans les scénarios très sensibles aux performances. En effet, le mode de hachage défini par les implémentations Memcache est différent de celui défini par la mise en cache Azure. Les implémentations Memcache laissent la définition du schéma de hachage au client de cache. Dans Azure, le serveur de cache génère le hachage. Le comportement de cache d'Azure consiste à laisser le serveur de cache spécifier le comportement de hachage. Ceci permet au serveur d'équilibrer la charge, de gonfler et compresser, et d'éviter toute perte de données, etc.

Quand Azure met en cache un élément, un hachage est généré sur la base de la clé de l'élément. Azure utilise le hachage pour identifier le serveur dans le cluster de cache qui contiendra l'élément mis en cache. La passerelle de serveur Azure doit donc hacher à nouveau la clé et acheminer l'élément jusqu'au serveur de destination dans le cluster de cache. Cette opération implique un saut de réseau supplémentaire susceptible d'affecter les performances.

Shim de client Memcache

Le shim de client Memcache est installé sur le client qui accède au cache. Il s'agit généralement du rôle Azure associé à l'application. Le shim de client prend en charge le cache local.

Le shim est une couche de traduction. Il traduit les appels du client Memcache à l'API de mise en cache Azure. Le shim inclut deux parties (gestionnaire de protocole Memcache et client de mise en cache Azure). Le shim (ou couche de traduction) est installé sur le client lui-même, quelle que soit la provenance des appels Get et Put à l'API de mise en cache Azure.

Lorsque le client Memcache pointe vers l'hôte local comme serveur Memcache, les opérations Put sont gérées initialement par l'instance locale du shim, plutôt que par le serveur de cache dans Azure. Le shim détermine ensuite le serveur de destination correct dans le cluster de cache et redirige l'opération Put vers Azure.

Ceci permet d'éliminer le saut de réseau supplémentaire présent dans le scénario impliquant la passerelle de serveur. L'inconvénient est que vous devez obtenir ce shim et le placer dans votre application.

Utilisation de la passerelle de serveur ou du shim de client

Il existe deux topologies de mise en cache : la mise en cache colocalisé et un rôle de cache dédié.

Si le cluster de cache est déployé dans un rôle de travail de cache dédié, vous devez utiliser le shim Memcache à partir du client de cache. Vous bénéficiez ainsi de meilleures performances et n'avez pas besoin de créer du code de découverte automatique.

Si la mise en cache colocalisée est utilisée et le client de cache est hébergé dans le même rôle, vous devez utiliser la passerelle de serveur Memcache. L'utilisation du shim de client implique une couche supplémentaire de traitement et de redirection, inutile lors de l'accès au cache depuis le même rôle. La redirection supplémentaire implique une charge non nécessaire.

Il n'existe pas de modèle de programmation pour l'utilisation de la passerelle de serveur ou du shim de client. Seule la modification des paramètres de configuration est nécessaire. Le shim de client requiert également une installation.

L'utilisation d'une passerelle de serveur ou d'un shim de client relève davantage de l'opération de déploiement que d'un modèle de programmation. Un programmeur invoque toujours les mêmes API Get ou Put. L'application est seulement reliée un peu différemment. Plutôt que de pointer vers le serveur de mise en cache d'origine, elle pointe vers la passerelle de serveur ou le shim de client.

Enfin, tant la passerelle de serveur que le shim de client ignorent la bibliothèque cliente Memcache utilisée, car les implémentations Memcache standard utilisent le même protocole. Le serveur de cache est concerné par les paquets de données associés au protocole Memcache standard et non par les implémentations du client Memcache elles-mêmes.

Déploiement de la passerelle de serveur pour les applications Azure

  1. Sur le rôle qui hébergera le serveur de cache, accédez aux propriétés du rôle, puis à l'onglet Mise en cache.

  2. Cochez la case « Activer la mise en cache ».  Cela ajoute des points de terminaison d’entrée dans csdef, l’élément importModule et d’autres paramètres csdef/cscfg. L'expérience de déploiement consiste ensuite à ajouter un point de terminaison d'entrée appelé « memcache_default » sous l'onglet Points de terminaison.

  3. Le client doit désormais être configuré pour pointer vers ce cluster. Si la passerelle de serveur est utilisée avec la mise en cache colocalisée ou le shim de client avec la mise en cache dédiée, pointez simplement l'application vers « localhost_thisrolename ». Aucune opération de découverte automatique n'est nécessaire.

Déploiement du shim de client pour les applications Azure

  1. Sur le rôle sur lequel le client Memcache est installé, cliquez avec le bouton droit sur le nom du rôle, puis sélectionnez « Ajouter une référence au package de bibliothèques » pour ouvrir la fenêtre NuGet.

  2. Recherchez « Azure Caching Memcache Shim ». Installez ce package NuGet.

  3. Celui-ci crée la tâche de démarrage, ajoute un point de terminaison interne supplémentaire pour memcache_default, le mappe à 11211, puis ajoute les sections dataCacheClients appropriées aux fichiers App.config et web.config. Vous pouvez modifier ceci sous l'onglet Points de terminaison internes.

  4. Indiquez le nom du rôle dans l’élément autoDiscovery du fichier App.config ou Web.config.

  5. Le client doit désormais être configuré pour pointer vers le shim. Modifiez la configuration du client Memcache et définissez le serveur sur « localhost ». Le ou les numéros de port corrects doivent également être définis.