Memcached: Comprendre pour mieux utiliser

174 vues

Publié le

Mieux comprendre Memcached pour mieux l'utiliser et optimiser le service.

Publié dans : Logiciels
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
174
Sur SlideShare
0
Issues des intégrations
0
Intégrations
4
Actions
Partages
0
Téléchargements
0
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Memcached: Comprendre pour mieux utiliser

  1. 1. Memcached Novembre 2015 www.nimeops.com contact@nimeops.com @nimeops Comprendre pour mieux utiliser
  2. 2. Memcached : ??? Développé par Brad Fitzpatrick (LiveJournal) in 2003 Open Source (memcached.org / BSD License) Massivement utilisé sur les sites à fort trafic (Youtube, Facebook, Flickr, Wikipedia, Twitter, etc.)
  3. 3. Clients / APIMemcached
  4. 4.  Système de cache distribué permettant de stocker des données (clé/valeur) sur la mémoire vive (RAM)  Possibilité de définir une durée de validité  I/O non bloquant (asynchrone) Principalement utilisé pour :  des données volatiles (non persistantes)  soulager les traitements en Base de Données  Partage de données Memcached
  5. 5. Pourquoi  Utilisé dans le cadre d’une donnée temporaire  Tout est traité en mémoire  Excellentes performances en lecture et écriture  Distribution du cache sur « n » serveurs Memcached (grâce à l’API) Memcached
  6. 6. Quand  Les requêtes en lecture sont largement majoritaires  Limites d’optimisation du Query Cache de la BDD Pour quel type d’utilisation ?  Stockage de sessions utilisateurs  Statistiques et données diverses et variées (nombre de users, etc.)  Résultat de requêtes SQL  Données à partager  Données est < 1 Mo  Clé 250 caractères au maximum  Eviter la pénalité réseau entre le client et Memcached Memcached
  7. 7. N’est pas un « Storage Engine » mais un système de cache !!! Memcached
  8. 8. Le service  Accepte des connexions en lecture / écriture en TCP  Ecoute sur un port TCP spécifique  Possibilité de fixer l’allocation de mémoire réservée  Stock la donnée en RAM  Utilise libevent  Algorithme de cache LRU (Least Recently Used) sur les Slab Class => Remplace le cache utilisé le moins récemment Memcached
  9. 9. Distribution  Le pool de serveurs est géré par le client  + La notion de failover => Chaque serveur est indépendant, et n’a pas connaissance des autres.  La donnée peut être lue sur « n » serveurs  La donnée est écrite / stockée sur 1 serveur Memcached
  10. 10. Fonctionnalités Memcached Redis Données persistantes NON OUI Réplication en natif NON OUI Master / Slave (Sentinel) Authentification NON OUI Orienté performance OUI + OUI - Structures de données + ++ (hashes, lists, sets, sorted sets) Memcached vs Redis
  11. 11. Objectif  L’objectif est de soulager la BDD  La BDD est sollicitée que si le cache n’est pas présent dans Memcached Memcached
  12. 12. Objectif Projet mysql Apache/PHP memcached NFS Varnish 4(read/write) 6(write) 7 5(write) 2 3(read) Client 1 8 MISS MISS Cached  L’objectif 1 : soulager la BDD  La BDD est sollicitée que si  Le cache n’est pas dans Varnish  Le cache n’est pas dans Memcached Memcached
  13. 13. Utilisation • Modification replace key_test_set 0 3600 3 111 STORED get key_test_set VALUE key_test_set 0 3 111 END • Suppression delete key_test_set DELETED • Ecriture : Set « key » « flags» « expiration » « taille_bytes » set key_test_set 0 3600 5 11111 STORED • Lecture : get « key » get key_test_set VALUE key_test_set 0 5 11111 END Memcached
  14. 14. • 1 caractère = 1 byte set key_test_set 0 3600 5 11111 STORED => 5 bytes set key_test_set 0 3600 5 11111 STORED stats items STAT items:1:number 1 STAT items:1:age 3558 STAT items:1:evicted 0 STAT items:1:evicted_nonzero 0 STAT items:1:evicted_time 0 STAT items:1:outofmemory 0 STAT items:1:tailrepairs 0 END stats cachedump 1 1 ITEM key_test_set [5 b; 1447428938 s] END StockageMemcached
  15. 15. replace key_test_set 0 3600 3 000 STORED stats items STAT items:1:number 1 STAT items:1:age 3726 STAT items:1:evicted 0 STAT items:1:evicted_nonzero 0 STAT items:1:evicted_time 0 STAT items:1:outofmemory 0 STAT items:1:tailrepairs 0 END stats cachedump 1 1 ITEM key_test_set [3 b; 1447429106 s] END set key_test_set 0 3600 5 11111 STORED stats items STAT items:1:number 1 STAT items:1:age 3558 STAT items:1:evicted 0 STAT items:1:evicted_nonzero 0 STAT items:1:evicted_time 0 STAT items:1:outofmemory 0 STAT items:1:tailrepairs 0 END stats cachedump 1 1 ITEM key_test_set [5 b; 1447428938 s] END StockageMemcached
  16. 16. Configuration  Max connections  Threads  Port d’écoute  Type d’execution (foreground ou daemon)  TCP ou UDP Memcached
  17. 17. Configuration par défaut Sour RedHat (/etc/sysconfig/memcached): memcached -d -p 11211 -u memcached -m 64 -c 1024 -P /var/run/memcached/memcached.pid (-n) Default Chunk Size : 48 bytes (key+value+flags) en multiple de 8 (-f) Chunk growth Factor : 1,25 (-t) Max Threads : 4 CAS Enabled (Compare And Swap) (-C pour le désactiver) -d : Daemon -p : Port d’écoute -u : user -m : memory size in Mo -c : Max Connexion -P : Fichier PID Memcached
  18. 18. Slabs class « 96 » bytes Pages 1M Chunk « 96 » b Chunk « 96 » b Item Item Slabs class « 120 » bytes Pages 1M Chunk « 120 » b Chunk « 120 » b Item Item Slabs class « 152 » bytes Pages 1M Chunk « 152 » b Chunk « 152 » b Item Item Items < ou = 96 bytes Items < ou = 120 bytes et > 96 bytes Items < ou = 152 bytes et > 120 bytes StockageMemcached
  19. 19. memcached (-u memcached) -vv slab class 1: chunk size 96 perslab 10922 slab class 22: chunk size 11104 perslab 94 slab class 2: chunk size 120 perslab 8738 slab class 23: chunk size 13880 perslab 75 slab class 3: chunk size 152 perslab 6898 slab class 24: chunk size 17352 perslab 60 slab class 4: chunk size 192 perslab 5461 slab class 25: chunk size 21696 perslab 48 slab class 5: chunk size 240 perslab 4369 slab class 26: chunk size 27120 perslab 38 slab class 6: chunk size 304 perslab 3449 slab class 27: chunk size 33904 perslab 30 slab class 7: chunk size 384 perslab 2730 slab class 28: chunk size 42384 perslab 24 slab class 8: chunk size 480 perslab 2184 slab class 29: chunk size 52984 perslab 19 slab class 9: chunk size 600 perslab 1747 slab class 30: chunk size 66232 perslab 15 slab class 10: chunk size 752 perslab 1394 slab class 31: chunk size 82792 perslab 12 slab class 11: chunk size 944 perslab 1110 slab class 32: chunk size 103496 perslab 10 slab class 12: chunk size 1184 perslab 885 slab class 33: chunk size 129376 perslab 8 slab class 13: chunk size 1480 perslab 708 slab class 34: chunk size 161720 perslab 6 slab class 14: chunk size 1856 perslab 564 slab class 35: chunk size 202152 perslab 5 slab class 15: chunk size 2320 perslab 451 slab class 36: chunk size 252696 perslab 4 slab class 16: chunk size 2904 perslab 361 slab class 37: chunk size 315872 perslab 3 slab class 17: chunk size 3632 perslab 288 slab class 38: chunk size 394840 perslab 2 slab class 18: chunk size 4544 perslab 230 slab class 39: chunk size 493552 perslab 2 slab class 19: chunk size 5680 perslab 184 slab class 40: chunk size 616944 perslab 1 slab class 20: chunk size 7104 perslab 147 slab class 41: chunk size 771184 perslab 1 slab class 21: chunk size 8880 perslab 118 slab class 42: chunk size 1048576 perslab 1 Chunk size in Slab Class1 = minimum Chunk size + 48 bytes Chunk size in Slab Class2 = (Chunk size in Slab Class1) x (Chunk growth Factor) + « n » (« n » pour passer en multiple de 8) Slab ClassMemcached
  20. 20. Répartition dans les Slabs Key Value Flag 1 1 0 2 2 0 3 3 0 112 112 0 113 113 0 114 114 0 Memcached
  21. 21. Items Size Calcul de la taille des Items Key (Nombre de caractères) + 1 + Data (Nombre de caractères) + 2 bytes ( rn ) + Header + Chunk Size + CAS Size size_t ntotal = item_make_header(nkey + 1, flags, nbytes, suffix, &nsuffix); Header = Flags (Nombre de caractères) + nData (Nombre de caractères) + 4 bytes (2 espaces et rn) nsuffix = (uint8_t) snprintf(suffix, 40, " %d %drn", flags, nbytes - 2); Chunk Size = 48 bytes (défaut) CAS Size = 8 bytes (plateforme 64 bits) Memcached
  22. 22. Items Size – CAS Enabled Calcul de la taille des Items Exemple : • Key : test • Data : 90 bytes • Flags : 0 Taille : (4+1) + (90+2) + (1+2+4) + 48 + 8 = 160 Bytes => Slab 4 (192 Bytes) Key (Nombre de caractères) + 1 + Data (Nombre de caractères) + 2 bytes ( rn ) + Header + Chunk Size + CAS Size Header = Flags (Nombre de caractères) + nData (Nombre de caractères) + 4 bytes (2 espaces et rn) Chunk Size = 48 bytes (défaut) CAS Size = 8 bytes (plateforme 64 bits) Memcached
  23. 23. TP Désactiver CAS et constater l’impact sur le stockage memcached -d -p 11211 -u memcached -m 64 -c 1024 -P /var/run/memcached/memcached.pid -C Memcached
  24. 24. Items Size – CAS Disabled Calcul de la taille des Items Exemple : • Key : test • Data : 90 bytes • Flags : 0 Taille : (4+1) + (90+2) + (1+2+4) + 48 + 0 = 152 Bytes => Slab 3 (152 Bytes) Key (Nombre de caractères) + 1 + Data (Nombre de caractères) + 2 bytes ( rn ) + Header + Chunk Size + CAS Size Header = Flags (Nombre de caractères) + nData (Nombre de caractères) + 4 bytes (2 espaces et rn) Chunk Size = 48 bytes (défaut) CAS Size = 0 bytes (plateforme 64 bits) Memcached
  25. 25. TP Modifier le Chunk Size à 64 bytes memcached -d -p 11211 -u memcached -m 64 -c 1024 -P /var/run/memcached/memcached.pid -C -n 64 Memcached
  26. 26. TPMemcached
  27. 27. Modifier le Chunk growth Factor à 2 memcached -d -p 11211 -u memcached -m 64 -c 1024 -P /var/run/memcached/memcached.pid -C -n 64 -f 2 TPMemcached
  28. 28. TPMemcached

×