une mise à jour significative du système de mise en cache des données en mémoire vive , qui gère les données au format clé/valeur et est remarquablement facile à utiliser. Memcached est généralement utilisé comme une solution légère pour accélérer le fonctionnement des sites à fort trafic en mettant en cache l'accès aux bases de données et aux données intermédiaires. Le code sous licence BSD.
Dans la nouvelle version, l'implémentation du stockage «« a été stabilisée et est maintenant construite par défaut (une option «—disable-extstore» est prévue dans le script configure pour la désactiver), mais nécessite une activation explicite au moment du démarrage (les anciennes installations continueront de fonctionner sans modification après la mise à jour). Bien que le stockage «extstore» soit généralement considéré comme stable, il est recommandé de faire preuve de prudence lors de son déploiement dans des systèmes très volumineux.
Extstore permet d'utiliser des disques SSD/Flash pour augmenter la taille du cache. Tout comme avec la mémoire vive, le stockage sur Flash n'est pas permanent et est réinitialisé lors du redémarrage. Le nouveau mode est destiné à assurer un caching efficace des données de grande taille. Lors de l'utilisation de «extstore», les clés et les métadonnées, comme auparavant, sont stockées uniquement en mémoire vive, mais les grandes données associées aux clés, dépassant un seuil établi, sont conservées dans un stockage externe, tandis qu'en RAM ne reste qu'un pointeur.
Si une clé est associée à des données de petite taille, Memcached fonctionne normalement, conserve les données en mémoire et ne fait pas appel au stockage externe. S'il y a beaucoup de mémoire libre, les données les plus demandées peuvent en plus rester entièrement dans le cache en mémoire vive (par exemple, il est possible de spécifier que seuls les objets de plus de 1024 octets, qui n'ont pas été accédés pendant 3600 secondes, soient envoyés sur Flash).
La mise en œuvre est optimisée pour garantir des performances maximales et une charge CPU minimale, au détriment de l'efficacité du stockage (niveau élevé de fragmentation). Pour prolonger la durée de vie des disques Flash, les données sont mises en cache et écrites dans le stockage de manière séquentielle. Pour maintenir l'état du cache entre les redémarrages, il est possible d'utiliser la fonctionnalité introduite dans la version 1.5.18 qui permet de vider le dump avec le cache dans un fichier. Lors du prochain démarrage, il est possible de restaurer le cache à partir de ce fichier pour éviter les pics de charge sur les gestionnaires de contenu dus à un cache non rempli (le cache devient immédiatement « chaud »).
La deuxième modification importante dans Memcached 1.6 a été la réécriture du code pour la communication réseau, qui est désormais adaptée pour gérer automatiquement les appels groupés dans un seul appel système. Auparavant, lors de l'envoi de plusieurs commandes « GET » dans un même paquet TCP, memcached envoyait les résultats en effectuant des appels système séparés. Dans Memcached 1.6, les réponses sont agrégées et renvoyées par un seul appel système. En moyenne, il y a maintenant 1,5 clé par appel système, ce qui montre, lors des tests, une réduction de la charge CPU jusqu'à 25 % et une diminution de la latence de quelques pourcents.
La refonte de la sous-système réseau a également permis de passer à l'allocation dynamique des buffers en fonction des besoins, au lieu de l'attribution statique des buffers. Cette optimisation a réduit la consommation de mémoire en attente de nouvelles commandes via une connexion établie par le client de 4,5 Ko à 400-500 octets, et a également permis d'éliminer de nombreux appels malloc, realloc et free, qui entraînaient une fragmentation excessive de la mémoire sur les systèmes avec un grand nombre de connexions. Chaque thread de travail traite désormais son propre pool de buffers de lecture et d'écriture pour les connexions clients actives. Pour configurer la taille de ces buffers,
des options « -o resp_obj_mem_limit=N » et « -o read_buf_mem_limit=N » sont prévues.
Dans la branche 1.6, il a également été annoncé que le protocole binaire devient obsolète. Protocole texte se poursuivra sans changements. Le nouveau protocole a remplacé le protocole binaire (version textuelle du protocole avec des méta-commandes compactes), affichant un équilibre optimal entre performance et fiabilité. Le nouveau protocole couvre toutes les opérations précédemment accessibles via les protocoles textuels et binaires.
Source : opennet.ru
