SlideShare uma empresa Scribd logo
1 de 28
Memcached
Novembre 2015
www.nimeops.com
contact@nimeops.com
@nimeops
Comprendre pour mieux utiliser
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.)
Clients / APIMemcached
 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
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
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
N’est pas un « Storage Engine »
mais un système de cache
!!!
Memcached
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
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
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
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
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
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
• 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
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
Configuration
 Max connections
 Threads
 Port d’écoute
 Type d’execution (foreground ou daemon)
 TCP ou UDP
Memcached
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
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
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
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
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
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
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
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
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
TPMemcached
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
TPMemcached

Mais conteúdo relacionado

Mais procurados

DrupalCamp Lyon 2012 - Optimiser les performances Drupal depuis les tranchées
DrupalCamp Lyon 2012 -  Optimiser les performances Drupal depuis les tranchéesDrupalCamp Lyon 2012 -  Optimiser les performances Drupal depuis les tranchées
DrupalCamp Lyon 2012 - Optimiser les performances Drupal depuis les tranchéesAurelien Navarre
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linuxKhalid ALLILI
 
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cache
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cacheMeetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cache
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cacheAurelien Navarre
 
Apache server configuration & sécurisation -
Apache server configuration & sécurisation  -Apache server configuration & sécurisation  -
Apache server configuration & sécurisation -achraf_ing
 
Guss webcasts Query Memory Grants - june 2013
Guss webcasts   Query Memory Grants - june 2013Guss webcasts   Query Memory Grants - june 2013
Guss webcasts Query Memory Grants - june 2013David BAFFALEUF
 
Guide pratique openssl sous debian
Guide pratique openssl sous debianGuide pratique openssl sous debian
Guide pratique openssl sous debianyahyaf10
 
05 01 open-vpn
05 01 open-vpn05 01 open-vpn
05 01 open-vpnNoël
 
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8Aurelien Navarre
 
Drupal 8, symfony
Drupal 8, symfonyDrupal 8, symfony
Drupal 8, symfonyjeUXdiCode
 

Mais procurados (14)

Squid squid guard
Squid squid guardSquid squid guard
Squid squid guard
 
Squid
SquidSquid
Squid
 
DrupalCamp Lyon 2012 - Optimiser les performances Drupal depuis les tranchées
DrupalCamp Lyon 2012 -  Optimiser les performances Drupal depuis les tranchéesDrupalCamp Lyon 2012 -  Optimiser les performances Drupal depuis les tranchées
DrupalCamp Lyon 2012 - Optimiser les performances Drupal depuis les tranchées
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linux
 
Présentation de ISP 7.1 (ex TSM)
Présentation de ISP 7.1 (ex TSM)Présentation de ISP 7.1 (ex TSM)
Présentation de ISP 7.1 (ex TSM)
 
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cache
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cacheMeetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cache
Meetup Drupal Lyon mars 2013 - Optimiser les performances Drupal par le cache
 
Apache server configuration & sécurisation -
Apache server configuration & sécurisation  -Apache server configuration & sécurisation  -
Apache server configuration & sécurisation -
 
Guss webcasts Query Memory Grants - june 2013
Guss webcasts   Query Memory Grants - june 2013Guss webcasts   Query Memory Grants - june 2013
Guss webcasts Query Memory Grants - june 2013
 
Rapport tp openssl
Rapport  tp  opensslRapport  tp  openssl
Rapport tp openssl
 
Guide pratique openssl sous debian
Guide pratique openssl sous debianGuide pratique openssl sous debian
Guide pratique openssl sous debian
 
05 01 open-vpn
05 01 open-vpn05 01 open-vpn
05 01 open-vpn
 
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
DrupalCamp Nantes 2016 - Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8
 
Le nouveau AMP : apache mariadb php
Le nouveau AMP : apache mariadb phpLe nouveau AMP : apache mariadb php
Le nouveau AMP : apache mariadb php
 
Drupal 8, symfony
Drupal 8, symfonyDrupal 8, symfony
Drupal 8, symfony
 

Destaque

Growing a Drupalshop from 1 to 12M€
Growing a Drupalshop from 1 to 12M€Growing a Drupalshop from 1 to 12M€
Growing a Drupalshop from 1 to 12M€Adyax
 
Boostez Votre Fiche Conseiller Sur Wengo
Boostez Votre Fiche Conseiller Sur WengoBoostez Votre Fiche Conseiller Sur Wengo
Boostez Votre Fiche Conseiller Sur Wengowengo
 
Proyecto docente 2012 i
Proyecto docente 2012 iProyecto docente 2012 i
Proyecto docente 2012 iElena Tapias
 
Le web 08 OFF - aladom
Le web 08 OFF - aladomLe web 08 OFF - aladom
Le web 08 OFF - aladomaladom
 
Manifesto Blog RH
Manifesto Blog RHManifesto Blog RH
Manifesto Blog RHrmen
 
Para ejercicio de ucpr
Para ejercicio de ucprPara ejercicio de ucpr
Para ejercicio de ucprAmanditaL
 
Buenas practicas de laboratorio
Buenas practicas de laboratorioBuenas practicas de laboratorio
Buenas practicas de laboratoriojosefog
 
Business& Decision - PARIS DEVELOPPEMENT
Business& Decision - PARIS DEVELOPPEMENTBusiness& Decision - PARIS DEVELOPPEMENT
Business& Decision - PARIS DEVELOPPEMENTpberendes
 
My Breizh Open Data – Marchés Publics
My Breizh Open Data – Marchés PublicsMy Breizh Open Data – Marchés Publics
My Breizh Open Data – Marchés PublicsCeline Faivre
 
Menores e infantil
Menores e infantilMenores e infantil
Menores e infantilJuan 23
 
Chinese Stone Sculpture
Chinese Stone SculptureChinese Stone Sculpture
Chinese Stone SculptureVina
 
Eafit los consorcios
Eafit los consorciosEafit los consorcios
Eafit los consorciosElena Tapias
 
Bouffémont d'hier d'aujourd'hui
Bouffémont d'hier d'aujourd'huiBouffémont d'hier d'aujourd'hui
Bouffémont d'hier d'aujourd'huiPatrick Pawlowski
 
Huellas del bicentenario 2
Huellas del bicentenario 2Huellas del bicentenario 2
Huellas del bicentenario 2Escuela 3 DE 11
 
Les nouveautés d'Efficy 2010
Les nouveautés d'Efficy 2010Les nouveautés d'Efficy 2010
Les nouveautés d'Efficy 2010Efficy CRM
 

Destaque (20)

Growing a Drupalshop from 1 to 12M€
Growing a Drupalshop from 1 to 12M€Growing a Drupalshop from 1 to 12M€
Growing a Drupalshop from 1 to 12M€
 
Server Festa 2013 Autumn
Server Festa 2013 AutumnServer Festa 2013 Autumn
Server Festa 2013 Autumn
 
Bits ESKOLA (Septiembre)
Bits ESKOLA (Septiembre)Bits ESKOLA (Septiembre)
Bits ESKOLA (Septiembre)
 
Boostez Votre Fiche Conseiller Sur Wengo
Boostez Votre Fiche Conseiller Sur WengoBoostez Votre Fiche Conseiller Sur Wengo
Boostez Votre Fiche Conseiller Sur Wengo
 
Proyecto docente 2012 i
Proyecto docente 2012 iProyecto docente 2012 i
Proyecto docente 2012 i
 
C 185 de 2011
C 185 de 2011C 185 de 2011
C 185 de 2011
 
Le web 08 OFF - aladom
Le web 08 OFF - aladomLe web 08 OFF - aladom
Le web 08 OFF - aladom
 
Manifesto Blog RH
Manifesto Blog RHManifesto Blog RH
Manifesto Blog RH
 
Para ejercicio de ucpr
Para ejercicio de ucprPara ejercicio de ucpr
Para ejercicio de ucpr
 
Buenas practicas de laboratorio
Buenas practicas de laboratorioBuenas practicas de laboratorio
Buenas practicas de laboratorio
 
Business& Decision - PARIS DEVELOPPEMENT
Business& Decision - PARIS DEVELOPPEMENTBusiness& Decision - PARIS DEVELOPPEMENT
Business& Decision - PARIS DEVELOPPEMENT
 
My Breizh Open Data – Marchés Publics
My Breizh Open Data – Marchés PublicsMy Breizh Open Data – Marchés Publics
My Breizh Open Data – Marchés Publics
 
Menores e infantil
Menores e infantilMenores e infantil
Menores e infantil
 
Chinese Stone Sculpture
Chinese Stone SculptureChinese Stone Sculpture
Chinese Stone Sculpture
 
Eafit los consorcios
Eafit los consorciosEafit los consorcios
Eafit los consorcios
 
Bouffémont d'hier d'aujourd'hui
Bouffémont d'hier d'aujourd'huiBouffémont d'hier d'aujourd'hui
Bouffémont d'hier d'aujourd'hui
 
Compliments 2008 (7)
Compliments 2008 (7)Compliments 2008 (7)
Compliments 2008 (7)
 
Huellas del bicentenario 2
Huellas del bicentenario 2Huellas del bicentenario 2
Huellas del bicentenario 2
 
Les nouveautés d'Efficy 2010
Les nouveautés d'Efficy 2010Les nouveautés d'Efficy 2010
Les nouveautés d'Efficy 2010
 
Eje temático No 1 - Doc. electrónico
Eje temático No 1 - Doc. electrónicoEje temático No 1 - Doc. electrónico
Eje temático No 1 - Doc. electrónico
 

Semelhante a Memcached: Comprendre pour mieux utiliser

Réussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDBRéussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDB MongoDB
 
ch2-hadoop-L3-2023-4p (1).pdf
ch2-hadoop-L3-2023-4p (1).pdfch2-hadoop-L3-2023-4p (1).pdf
ch2-hadoop-L3-2023-4p (1).pdfsalmanakbi
 
Spark - au dela du dataframe avec Tungsten et Catalyst
Spark - au dela du dataframe avec Tungsten et CatalystSpark - au dela du dataframe avec Tungsten et Catalyst
Spark - au dela du dataframe avec Tungsten et CatalystMathieu Goeminne
 
OutOfMemoryError : quel est le coût des objets en java
OutOfMemoryError : quel est le coût des objets en javaOutOfMemoryError : quel est le coût des objets en java
OutOfMemoryError : quel est le coût des objets en javaJean-Philippe BEMPEL
 
Scalabilité de MongoDB
Scalabilité de MongoDBScalabilité de MongoDB
Scalabilité de MongoDBMongoDB
 
PerfUG - Hadoop Performances
PerfUG - Hadoop PerformancesPerfUG - Hadoop Performances
PerfUG - Hadoop PerformancesSofian Djamaa
 
GUSS - Les IO dans SQL Server (en partenariat avec DataCore)
GUSS - Les IO dans SQL Server (en partenariat avec DataCore)GUSS - Les IO dans SQL Server (en partenariat avec DataCore)
GUSS - Les IO dans SQL Server (en partenariat avec DataCore)GUSS
 
802.1X filaire, un monde idéal illusoire? (Olivier Bilodeau)
802.1X filaire, un monde idéal illusoire? (Olivier Bilodeau)802.1X filaire, un monde idéal illusoire? (Olivier Bilodeau)
802.1X filaire, un monde idéal illusoire? (Olivier Bilodeau)Hackfest Communication
 
GAB 2017 PARIS - Tester la sécurité de vos annuaires Active Directory et Azur...
GAB 2017 PARIS - Tester la sécurité de vos annuaires Active Directory et Azur...GAB 2017 PARIS - Tester la sécurité de vos annuaires Active Directory et Azur...
GAB 2017 PARIS - Tester la sécurité de vos annuaires Active Directory et Azur...AZUG FR
 
Guss webcasts Tempdb Internals - june 2013
Guss webcasts   Tempdb Internals - june 2013Guss webcasts   Tempdb Internals - june 2013
Guss webcasts Tempdb Internals - june 2013David BAFFALEUF
 
04 01 configuration raid
04 01 configuration raid04 01 configuration raid
04 01 configuration raidNoël
 
Présentation RAID (mise à jour 2016)
Présentation RAID (mise à jour 2016)Présentation RAID (mise à jour 2016)
Présentation RAID (mise à jour 2016)Emmanuel Florac
 
Les secrets de la JVM pour les algos à haute fréquence
Les secrets de la JVM pour les algos à haute fréquenceLes secrets de la JVM pour les algos à haute fréquence
Les secrets de la JVM pour les algos à haute fréquenceOCTO Technology
 
SQLSaturday Paris 2014 - Monitoring et configuration SSAS
SQLSaturday Paris 2014 - Monitoring et configuration SSASSQLSaturday Paris 2014 - Monitoring et configuration SSAS
SQLSaturday Paris 2014 - Monitoring et configuration SSASGUSS
 
Les nouveautés stockage dans Windows Server 2012 R2
Les nouveautés stockage dans Windows Server 2012 R2Les nouveautés stockage dans Windows Server 2012 R2
Les nouveautés stockage dans Windows Server 2012 R2Georgeot Cédric
 
Présentation du stockage RAID
Présentation du stockage RAIDPrésentation du stockage RAID
Présentation du stockage RAIDEmmanuel Florac
 

Semelhante a Memcached: Comprendre pour mieux utiliser (20)

Réussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDBRéussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDB
 
Implementing a key/value store
Implementing a key/value storeImplementing a key/value store
Implementing a key/value store
 
ch2-hadoop-L3-2023-4p (1).pdf
ch2-hadoop-L3-2023-4p (1).pdfch2-hadoop-L3-2023-4p (1).pdf
ch2-hadoop-L3-2023-4p (1).pdf
 
Hackerspace jan-2013
Hackerspace jan-2013Hackerspace jan-2013
Hackerspace jan-2013
 
Spark - au dela du dataframe avec Tungsten et Catalyst
Spark - au dela du dataframe avec Tungsten et CatalystSpark - au dela du dataframe avec Tungsten et Catalyst
Spark - au dela du dataframe avec Tungsten et Catalyst
 
OutOfMemoryError : quel est le coût des objets en java
OutOfMemoryError : quel est le coût des objets en javaOutOfMemoryError : quel est le coût des objets en java
OutOfMemoryError : quel est le coût des objets en java
 
Scalabilité de MongoDB
Scalabilité de MongoDBScalabilité de MongoDB
Scalabilité de MongoDB
 
PerfUG - Hadoop Performances
PerfUG - Hadoop PerformancesPerfUG - Hadoop Performances
PerfUG - Hadoop Performances
 
GUSS - Les IO dans SQL Server (en partenariat avec DataCore)
GUSS - Les IO dans SQL Server (en partenariat avec DataCore)GUSS - Les IO dans SQL Server (en partenariat avec DataCore)
GUSS - Les IO dans SQL Server (en partenariat avec DataCore)
 
802.1X filaire, un monde idéal illusoire? (Olivier Bilodeau)
802.1X filaire, un monde idéal illusoire? (Olivier Bilodeau)802.1X filaire, un monde idéal illusoire? (Olivier Bilodeau)
802.1X filaire, un monde idéal illusoire? (Olivier Bilodeau)
 
Exchange 2013 Bonnes pratiques
Exchange 2013 Bonnes pratiques Exchange 2013 Bonnes pratiques
Exchange 2013 Bonnes pratiques
 
GAB 2017 PARIS - Tester la sécurité de vos annuaires Active Directory et Azur...
GAB 2017 PARIS - Tester la sécurité de vos annuaires Active Directory et Azur...GAB 2017 PARIS - Tester la sécurité de vos annuaires Active Directory et Azur...
GAB 2017 PARIS - Tester la sécurité de vos annuaires Active Directory et Azur...
 
Guss webcasts Tempdb Internals - june 2013
Guss webcasts   Tempdb Internals - june 2013Guss webcasts   Tempdb Internals - june 2013
Guss webcasts Tempdb Internals - june 2013
 
RAID.pdf
RAID.pdfRAID.pdf
RAID.pdf
 
04 01 configuration raid
04 01 configuration raid04 01 configuration raid
04 01 configuration raid
 
Présentation RAID (mise à jour 2016)
Présentation RAID (mise à jour 2016)Présentation RAID (mise à jour 2016)
Présentation RAID (mise à jour 2016)
 
Les secrets de la JVM pour les algos à haute fréquence
Les secrets de la JVM pour les algos à haute fréquenceLes secrets de la JVM pour les algos à haute fréquence
Les secrets de la JVM pour les algos à haute fréquence
 
SQLSaturday Paris 2014 - Monitoring et configuration SSAS
SQLSaturday Paris 2014 - Monitoring et configuration SSASSQLSaturday Paris 2014 - Monitoring et configuration SSAS
SQLSaturday Paris 2014 - Monitoring et configuration SSAS
 
Les nouveautés stockage dans Windows Server 2012 R2
Les nouveautés stockage dans Windows Server 2012 R2Les nouveautés stockage dans Windows Server 2012 R2
Les nouveautés stockage dans Windows Server 2012 R2
 
Présentation du stockage RAID
Présentation du stockage RAIDPrésentation du stockage RAID
Présentation du stockage RAID
 

Memcached: Comprendre pour mieux utiliser

  • 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.)
  • 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. 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. 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. N’est pas un « Storage Engine » mais un système de cache !!! Memcached
  • 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. 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. 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. 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. 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. 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. • 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. 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. Configuration  Max connections  Threads  Port d’écoute  Type d’execution (foreground ou daemon)  TCP ou UDP Memcached
  • 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. 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. 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. 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. 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. 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. 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. 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. 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
  • 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