SlideShare ist ein Scribd-Unternehmen logo
1 von 7
Downloaden Sie, um offline zu lesen
Elasticsearch 
Performance 
tuning 
Contexte 
L’objet 
de 
cette 
note 
est 
un 
retour 
d’expérience 
sur 
l’optimisation 
des 
performances 
d’un 
cluster 
elasticsearch 
dans 
le 
cadre 
de 
la 
mise 
en 
oeuvre 
d’une 
solution 
de 
recommandation 
en 
ligne 
qui 
s’appuie 
sur 
MLLib 
/ 
Spark 
/elasticsearch. 
Le 
diagramme 
ci-­‐dessous 
illustre 
le 
découpage 
logique 
: 
Machine Learning 
(MLLib) 
Framework de parallelisation et 
d'exécution 
(Apache Spark) 
HDFS 
(ElasticSearch) 
elasticsearch 
est 
une 
solution 
de 
search 
distribuée 
et 
permet 
donc 
de 
répartir 
les 
données 
sur 
plusieurs 
serveurs. 
L’objet 
de 
cette 
note 
est 
de 
décrire 
les 
paramétrages 
réalisés 
sur 
chacun 
des 
noeuds 
pour 
obtenir 
une 
performance 
optimale. 
Pour 
les 
impatients, 
les 
optimisations 
réalisées 
sont 
les 
suivantes 
: 
Amélioration 
des 
temps 
d’indexation 
par 
: 
• Optimisation 
1 
: 
Utilisation 
de 
l’API 
bulk 
• Optimisation 
2 
: 
Débrider 
la 
bande 
passante 
pour 
les 
accès 
disque 
• Optimisation 
3 
: 
Réduire 
la 
fréquence 
des 
opérations 
de 
refresh 
• Optimisation 
4 
: 
Tuning 
des 
paramètres 
de 
flush 
• Optimisation 
5 
: 
Réduction 
du 
nombre 
de 
replicas 
Amélioration 
des 
performances 
de 
"search" 
par 
: 
• Optimisation 
6 
: 
Réduction 
à 
un 
seul 
segment 
Lucene
• Optimisation 
7 
: 
Utilisation 
du 
cache 
de 
filtres 
• Optimisation 
8 
: 
Utilisation 
sélective 
du 
cache 
de 
données 
• Optimisation 
9 
: 
Dimensionnement 
adéquat 
de 
la 
JVM 
et 
du 
cache 
système 
• Optimisation 
10 
: 
Spécialisation 
des 
noeuds 
elasticsearch 
D’autres 
mécanismes 
d’optimisation 
sont 
offerts 
par 
Elasticsearch 
tels 
que 
le 
field 
data 
cache 
pour 
les 
agrégations, 
le 
routing 
pour 
l’orientation 
des 
requêtes 
ou 
encore 
l’API 
warmer 
qui 
consiste 
à 
précharger 
les 
caches 
et 
éviter 
les 
temps 
de 
latence 
lors 
des 
premières 
sollicitations. 
Notre 
objectif 
n’est 
pas 
de 
tous 
les 
énumérer. 
Les 
optimisations 
sont 
celles 
que 
nos 
avons 
mis 
en 
oeuvre 
dans 
un 
contexte 
BigData 
mais 
qui 
s’appliquent 
également 
à 
d’autres 
contextes. 
Optimisation 
de 
l’indexation 
Optimisation 
1 
: 
Optimisation 
applicative 
par 
insertion 
de 
masse 
Dans 
le 
cadre 
de 
traitement 
de 
masse, 
les 
opérations 
sont 
la 
plupart 
du 
temps 
des 
opérations 
ensemblistes 
: 
• Insertion 
de 
masse 
: 
Les 
données 
sont 
injectées 
en 
masse 
dans 
la 
base 
Elasticsearch 
pour 
ensuite 
être 
recherchées 
• Mise 
à 
jour 
/ 
suppression 
de 
masse 
: 
Suite 
à 
un 
calcul 
distribué 
sur 
Spark 
, 
des 
groupes 
de 
données 
stockés 
dans 
Elasticsearch 
sont 
potentiellement 
mises 
à 
jour 
/ 
supprimés. 
• Les 
groupes 
de 
données 
sont 
extraits 
d’elasticsearch 
et 
accédés 
au 
travers 
de 
RDD 
Spark. 
Pour 
éviter 
l’invocation 
séquentielle 
des 
opérations 
d’indexation 
/ 
mise 
à 
jour 
/ 
suppression, 
nous 
avons 
pris 
le 
parti 
d’utiliser 
plutôt 
les 
opérations 
ensemblistes 
et 
de 
les 
invoquer 
au 
travers 
de 
l’API 
_bulk 
d’Elasticsearch. 
Cela 
permet 
à 
Elasticsearch 
d’indexer 
plusieurs 
documents 
en 
une 
seule 
fois. 
Le 
nombre 
de 
documents 
à 
inclure 
dans 
une 
requête 
_bulk 
est 
fonction 
du 
nombre 
de 
documents 
à 
indexer 
et 
de 
la 
taille 
des 
documents. 
Pour 
notre 
part, 
chaque 
opération 
d’indexation 
embarquait 
environ 
5000 
documents 
de 
1,5Ko 
soit 
7,5Mo 
de 
données 
indexées 
par 
Elasticsearch 
en 
une 
seule 
opération.
Noeud Spark 
Noeud Spark 
Noeud Spark 
Cluster 
Elasticsearch 
7,5Mo / opération 
7,5Mo / opération 
7,5Mo / opération 
Les 
opérations 
d’indexation 
de 
masse 
sont 
également 
parallélisées 
sur 
Spark. 
Optimisation 
2 
: 
Pas 
de 
limite 
dans 
l’utilisation 
de 
la 
bande 
passante 
pour 
les 
accès 
disque 
Elasticsearch 
par 
défaut 
limite 
la 
bande 
passante 
sur 
les 
accès 
disques 
à 
20Mb/s. 
Dans 
notre 
contexte 
de 
disques 
rapides, 
nous 
avons 
également 
supprimé 
cette 
limitation 
curl 
-­‐XPUT 
'localhost:9200/moncluster/_settings' 
-­‐d 
'{ 
"transient" 
: 
{ 
"indices.store.throttle.type" 
: 
"none" 
} 
}' 
Noter 
la 
valeur 
"transient" 
qui 
signifie 
que 
nous 
souhaitons 
ce 
paramétrage 
uniquement 
dans 
la 
phase 
courante. 
Un 
arrêt 
/ 
relance 
d’Elasticsearch 
ne 
conservera 
pas 
ces 
valeurs. 
Les 
étapes 
de 
l’indexation 
dans 
elasticsearch 
L’indexation 
d’un 
document 
dans 
Lucene 
se 
déroule 
en 
quatre 
phases 
(bien 
que 
ces 
phases 
ne 
soient 
pas 
tout 
à 
fait 
séquentielles, 
je 
les 
présente 
ainsi 
pour 
faciliter 
l’explication) 
: 
• Phase 
1 
(Indexation 
mémoire) 
: 
Le 
document 
est 
indexé 
dans 
un 
segment 
en 
mémoire. 
Le 
document 
ainsi 
indexé 
est 
encore 
invisible 
aux 
requêtes 
de 
recherche. 
• Phase 
2 
(Log 
sur 
disque): 
Enregistrement 
de 
la 
requête 
d’indexation 
dans 
un 
log 
de 
transactions. 
Comme 
pour 
les 
SGBD 
classiques, 
cela 
permet 
à 
Elasticsearch 
d’être 
résilient 
aux 
pannes 
et 
de 
régénérer 
les 
informations 
d’indexation 
qui 
n’ont 
pas 
encore 
été 
sauvegardées 
en 
cas 
de 
crash. 
• Phase 
3 
(Refresh) 
: 
Périodiquement, 
les 
informations 
d’indexation 
sont 
rendues 
accessibles 
au 
search. 
Cette 
phase, 
va 
provoquer 
l’invalidation 
des 
caches.
• Phase 
4 
(Flush 
disque) 
: 
Périodiquement, 
les 
informations 
d’indexation 
sont 
persistées 
sur 
disque. 
Cette 
phase 
va 
persister 
sur 
disque 
les 
segments 
en 
mémoire 
et 
vider 
le 
fichier 
de 
logs 
de 
transactions. 
Comme 
on 
peut 
le 
deviner, 
les 
phases 
3 
et 
4 
sont 
celles 
qui 
ont 
un 
impact 
sur 
les 
performances. 
Optimisation 
3 
: 
Réduction 
du 
temps 
d’indexation 
par 
réduction 
de 
la 
fréquence 
de 
refresh 
L’opération 
de 
« 
refresh 
» 
(phase 
3 
ci-­‐dessus) 
a 
pour 
rôle 
de 
rendre 
disponible 
les 
informations 
récemment 
indexées 
pour 
le 
search. 
Cette 
opération 
couteuse 
en 
phase 
d’indexation 
peut 
être 
désactivée 
avant 
le 
chargement 
des 
données 
et 
réactivée 
une 
fois 
l’indexation 
terminée 
avec 
les 
commandes 
suivantes 
: 
Commande 
1 
: 
Désactivation 
du 
refresh 
curl 
-­‐XPUT 
'localhost:9200/monindex/_settings' 
-­‐d 
'{ 
"index" 
: 
{ 
"refresh_interval" 
: 
-­‐1 
} 
}' 
Commande 
2 
: 
Insertion 
des 
données 
Commande 
3 
: 
Réactivation 
du 
refresh 
curl 
-­‐XPUT 
'localhost:9200/monindex/_settings' 
-­‐d 
'{ 
"index" 
: 
{ 
// 
1 
seconde 
(valeur 
par 
défaut 
dans 
ES) 
"refresh_interval" 
: 
1s 
} 
}' 
Optimisation 
4 
: 
Réduction 
du 
temps 
d’indexation 
par 
optimisation 
du 
flush 
Dans 
la 
phase 
de 
flush 
(phase 
4 
ci-­‐dessus), 
les 
segments 
sont 
éventuellement 
regroupés 
en 
segments 
de 
taille 
plus 
importante. 
La 
phase 
4 
se 
produit 
dans 
les 
conditions 
suivantes 
: 
• Le 
segment 
mémoire 
est 
plein 
• Le 
délai 
paramétré 
de 
flush 
a 
été 
atteint 
• Le 
log 
de 
transactions 
est 
plein
Document JSON 
Segment mémoire 
Transition Log 
disque 
Indexation 
timeout 
ou 
segment plein 
ou 
transaction log plein 
déclencher le flush 
Au 
moment 
du 
flush, 
les 
segments 
sont 
potentiellement 
fusionnés. 
Cette 
opération 
est 
d’autant 
plus 
couteuse 
que 
la 
taille 
du 
segment 
est 
importante. 
Enfin 
un 
nombre 
trop 
important 
de 
petits 
segments 
va 
ralentir 
les 
opérations 
de 
search. 
Optimisation 
5 
: 
Réduction 
du 
temps 
d’indexation 
par 
réduction 
du 
nombre 
de 
replicas 
Une 
opération 
d’indexation 
est 
terminée 
lorsque 
le 
document 
est 
ajout 
à 
la 
partition 
primaire 
et 
à 
tous 
les 
replicas. 
Le 
nombre 
de 
replicas 
a 
donc 
une 
incidence 
directe 
sur 
le 
délai 
d’indexation. 
Dans 
notre 
cas, 
les 
données 
sont 
sauvegardées 
par 
ailleurs 
et 
les 
données 
indexées 
dans 
le 
cluster 
sont 
"reconstructibles". 
Nous 
avons 
donc 
tout 
simplement 
supprimé 
les 
replicas 
en 
réduisant 
le 
nombre 
de 
replicas 
à 
0 
dans 
le 
fichier 
de 
configuration 
elasticsearch.yml. 
Optimisation 
de 
la 
recherche 
Une 
fois 
les 
données 
indexées, 
nous 
avons 
besoin 
de 
les 
accéder. 
Dans 
notre 
contexte, 
la 
base 
ainsi 
alimentée 
devient 
une 
base 
dédiée 
à 
a 
consultation 
exclusivement. 
Cela 
est 
d’autant 
plus 
simple 
que 
les 
optimisations 
d’indexation 
sont 
souvent 
contradictoires 
avec 
les 
optimisations 
du 
search. 
C’est 
d 
‘ailleurs 
le 
cas 
avec 
notre 
choix 
de 
ne 
pas 
avoir 
de 
replicas, 
qui 
est 
bénéfique 
pour 
l’indexation 
mais 
qui 
l’est 
moins 
pour 
le 
search.
Optimisation 
6 
: 
réduction 
à 
un 
seul 
segment 
Lucene 
Nous 
sommes 
particulièrement 
intéressés 
dans 
notre 
exemple 
par 
la 
rapidité 
du 
search 
et 
le 
nombre 
de 
segments 
a 
un 
impact 
direct 
sur 
les 
performances. 
Une 
fois 
l’indexation 
terminée 
et 
la 
base 
ES 
destinée 
exclusivement 
à 
être 
interrogée, 
nous 
avons 
réduit 
le 
nombre 
de 
segments 
à 
1 
par 
la 
commande 
suivante 
: 
curl 
-­‐XGET 
'localhost:9200/monindex/_optimize?max_num_segments=1&wait_for_merge=fa 
lse’ 
Optimisation 
7 
: 
Choisir 
soigneusement 
les 
types 
de 
filtres 
Deux 
types 
de 
cache 
existent 
dans 
elasticsearch 
; 
Un 
cache 
pour 
les 
filtres 
et 
un 
cache 
pour 
les 
données 
de 
query. 
Les 
requêtes 
de 
type 
"filter" 
sont 
les 
requêtes 
dont 
le 
résultat 
est 
une 
valeur 
booléenne 
et 
les 
requêtes 
de 
type 
"query" 
sont 
destinées 
à 
l’extraction 
de 
documents. 
Cache 
de 
filtres 
Les 
requêtes 
de 
type 
filter 
sont 
beaucoup 
plus 
performantes 
car 
Elasticsearch 
va 
mémoriser 
dans 
un 
bitset 
les 
documents 
qui 
vérifient 
chacun 
des 
filtres 
d’un 
groupe 
de 
filtres 
afin 
de 
pouvoir 
les 
réutiliser 
indépendamment 
les 
uns 
des 
autres. 
Les 
opérations 
mettant 
en 
oeuvre 
le 
"bool 
filter" 
sont 
à 
privilégier. 
Les 
types 
de 
filtres 
les 
plus 
performants 
sont 
ceux 
qui 
mettent 
en 
oeuvre 
les 
bitset. 
Il 
s’agit 
des 
types 
"term" / "exist" / "missing" / "prefix". 
Les 
types 
de 
filtres 
"nested" 
/ 
"has_parent" 
/ 
"has_child" 
/ 
"script" 
ne 
mettent 
pas 
en 
oeuvre 
les 
bitset 
et 
ne 
sont 
pas 
non 
mis 
en 
cache 
par 
défaut 
non 
plus. 
Optimisation 
8 
: 
Mettre 
en 
oeuvre 
le 
cache 
de 
manière 
sélective 
Par 
défaut, 
les 
résultats 
des 
queries 
sont 
mis 
en 
cache. 
Un 
cache 
qui 
se 
remplit 
trop 
vite 
va 
provoquer 
le 
mécanisme 
consommateur 
d’éviction 
LRU 
de 
cache 
d’elasticsearch. 
Pour 
éviter 
un 
remplissage 
un 
peu 
trop 
rapide 
du 
cache, 
nous 
forçons 
la 
propriété 
"_cache" 
à 
la 
valeur 
"false" 
pour 
les 
requêtes 
dont 
le 
résultat 
ne 
sera 
pas 
réutilisé 
d’un 
appel 
à 
l’autre. 
Optimisation 
9 
: 
Cache 
de 
la 
JVM 
et 
cache 
système 
Le 
réflexe 
le 
plus 
courant 
consiste 
à 
dédier 
le 
maximum 
de 
mémoire 
vive 
à 
la 
JVM 
et 
ne 
laisser 
que 
le 
strict 
minimum 
au 
système 
d’exploitation. 
L’OS 
s’adapte 
et 
réduit 
du 
coup 
la 
taille 
du 
cache 
disque 
système, 
ce 
qui 
détériore 
les 
performances 
lors 
de 
l’accès 
aux 
données. 
La 
règle 
préconisée 
consiste 
à 
octroyer 
50% 
de 
la 
mémoire 
à 
la 
JVM 
et 
50% 
à 
l’OS. 
Quant 
à 
la 
taille 
du 
tas 
(heap 
size) 
de 
la 
JVM, 
au 
delà 
de 
32Go, 
les 
références 
sont 
encodées 
en 
64 
bits 
au 
lieu 
d’être 
encodées 
en 
32 
bits, 
c’est 
donc 
autant 
de 
mémoire 
de 
perdue. 
Une 
JVM 
avec 
un 
tas 
de 
48Go 
ne 
sera 
sans 
doute 
pas 
plus 
performante 
qu’une 
JVM 
paramétrée 
à 
32Go. 
Nous 
avons 
donc 
observé 
la 
règle 
suivante 
: 
Une 
JVM 
pour 
32Go 
de 
mémoire.
Optimisation 
10 
: 
Dédier 
des 
noeuds 
à 
la 
collecte 
des 
données. 
Le 
noeud 
qui 
reçoit 
la 
requête 
de 
search, 
réalise 
les 
opérations 
suivantes 
: 
1. Parsing 
de 
la 
requête 
HTTP 
2. Soumission 
de 
la 
requête 
à 
l’ensemble 
des 
noeuds 
de 
données 
3. Collecte 
de 
l’ensemble 
des 
résultats 
4. Agrégation 
des 
données 
reçues 
5. Renvoi 
à 
l’émetteur 
Les 
étapes 
3 
et 
4 
ci-­‐dessous 
sont 
d’autant 
plus 
consommatrices 
de 
CPU 
et 
de 
mémoire 
que 
le 
volume 
de 
données 
à 
renvoyer 
est 
important. 
Nous 
décidons 
de 
soulager 
les 
noeuds 
de 
données 
elasticsearch 
en 
mettant 
en 
frontal 
des 
noeuds 
clients 
chargés 
de 
réaliser 
les 
opérations 
1, 
3, 
4 
et 
5 
ci-­‐dessus. 
La 
mémoire 
et 
la 
CPU 
des 
noeuds 
de 
données 
sont 
ainsi 
exclusivement 
dédiés 
au 
search. 
Noeud de 
données 
Noeud de 
données 
Noeud de 
données 
Noeud client 
HTTP 
Les 
attributs 
node.data 
et 
node.master 
ont 
la 
valeur 
"false" 
dans 
le 
fichier 
de 
configuration 
elasticsearh.yml 
pour 
les 
noeuds 
client 
qui 
n’hébergent 
pas 
de 
données 
et 
sont 
chargés 
exclusivement 
de 
soumettre 
les 
requêtes 
et 
de 
collecter 
puis 
agréger 
les 
résultats.

Weitere ähnliche Inhalte

Was ist angesagt?

Chapitre 2 complexité
Chapitre 2 complexitéChapitre 2 complexité
Chapitre 2 complexitéSana Aroussi
 
Chap4 Récursivité en python
Chap4 Récursivité en pythonChap4 Récursivité en python
Chap4 Récursivité en pythonMariem ZAOUALI
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en PythonABDESSELAM ARROU
 
BigData_TP4 : Cassandra
BigData_TP4 : CassandraBigData_TP4 : Cassandra
BigData_TP4 : CassandraLilia Sfaxi
 
Chapitre2_Partie1.pdf
Chapitre2_Partie1.pdfChapitre2_Partie1.pdf
Chapitre2_Partie1.pdfMbarkiIsraa
 
Spring cloud on kubernetes
Spring cloud on kubernetesSpring cloud on kubernetes
Spring cloud on kubernetesSangSun Park
 
Architecture réparties et les services web
Architecture réparties et les services webArchitecture réparties et les services web
Architecture réparties et les services webCHOUAIB EL HACHIMI
 
Data mining - Classification - arbres de décision
Data mining - Classification - arbres de décisionData mining - Classification - arbres de décision
Data mining - Classification - arbres de décisionMohamed Heny SELMI
 
PrésentationCI_CD.pptx
PrésentationCI_CD.pptxPrésentationCI_CD.pptx
PrésentationCI_CD.pptxBechirElosma
 
Rapport pfe- Refonte et déploiement d’une solution de messagerie en utilisant...
Rapport pfe- Refonte et déploiement d’une solution de messagerie en utilisant...Rapport pfe- Refonte et déploiement d’une solution de messagerie en utilisant...
Rapport pfe- Refonte et déploiement d’une solution de messagerie en utilisant...Nawres Farhat
 
La spécification des besoins
La spécification des besoinsLa spécification des besoins
La spécification des besoinsIsmahen Traya
 
Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1
Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1
Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1Etsuji Nakai
 
Cours réseaux chap3et4
Cours réseaux chap3et4Cours réseaux chap3et4
Cours réseaux chap3et4Amel Morchdi
 
Chapitre vi np complétude
Chapitre vi np complétudeChapitre vi np complétude
Chapitre vi np complétudeSana Aroussi
 
Data mining - Segmentation(k-means, cah)
Data mining - Segmentation(k-means, cah)Data mining - Segmentation(k-means, cah)
Data mining - Segmentation(k-means, cah)Mohamed Heny SELMI
 
Un slideshow de présentation d'Asterisk présenté en entreprise en 2008.
Un slideshow de présentation d'Asterisk présenté en entreprise en 2008.Un slideshow de présentation d'Asterisk présenté en entreprise en 2008.
Un slideshow de présentation d'Asterisk présenté en entreprise en 2008.betsmee
 

Was ist angesagt? (20)

Chapitre 2 complexité
Chapitre 2 complexitéChapitre 2 complexité
Chapitre 2 complexité
 
Un introduction à Pig
Un introduction à PigUn introduction à Pig
Un introduction à Pig
 
Chap4 Récursivité en python
Chap4 Récursivité en pythonChap4 Récursivité en python
Chap4 Récursivité en python
 
La programmation modulaire en Python
La programmation modulaire en PythonLa programmation modulaire en Python
La programmation modulaire en Python
 
BigData_TP4 : Cassandra
BigData_TP4 : CassandraBigData_TP4 : Cassandra
BigData_TP4 : Cassandra
 
Chapitre2_Partie1.pdf
Chapitre2_Partie1.pdfChapitre2_Partie1.pdf
Chapitre2_Partie1.pdf
 
Spring cloud on kubernetes
Spring cloud on kubernetesSpring cloud on kubernetes
Spring cloud on kubernetes
 
Une introduction à Hive
Une introduction à HiveUne introduction à Hive
Une introduction à Hive
 
Architecture réparties et les services web
Architecture réparties et les services webArchitecture réparties et les services web
Architecture réparties et les services web
 
Data mining - Classification - arbres de décision
Data mining - Classification - arbres de décisionData mining - Classification - arbres de décision
Data mining - Classification - arbres de décision
 
PrésentationCI_CD.pptx
PrésentationCI_CD.pptxPrésentationCI_CD.pptx
PrésentationCI_CD.pptx
 
Rapport pfe- Refonte et déploiement d’une solution de messagerie en utilisant...
Rapport pfe- Refonte et déploiement d’une solution de messagerie en utilisant...Rapport pfe- Refonte et déploiement d’une solution de messagerie en utilisant...
Rapport pfe- Refonte et déploiement d’une solution de messagerie en utilisant...
 
La spécification des besoins
La spécification des besoinsLa spécification des besoins
La spécification des besoins
 
Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1
Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1
Architecture Overview: Kubernetes with Red Hat Enterprise Linux 7.1
 
Chp3 - ESB
Chp3 - ESBChp3 - ESB
Chp3 - ESB
 
Cours réseaux chap3et4
Cours réseaux chap3et4Cours réseaux chap3et4
Cours réseaux chap3et4
 
Chapitre vi np complétude
Chapitre vi np complétudeChapitre vi np complétude
Chapitre vi np complétude
 
Data mining - Segmentation(k-means, cah)
Data mining - Segmentation(k-means, cah)Data mining - Segmentation(k-means, cah)
Data mining - Segmentation(k-means, cah)
 
Cours listes
Cours listesCours listes
Cours listes
 
Un slideshow de présentation d'Asterisk présenté en entreprise en 2008.
Un slideshow de présentation d'Asterisk présenté en entreprise en 2008.Un slideshow de présentation d'Asterisk présenté en entreprise en 2008.
Un slideshow de présentation d'Asterisk présenté en entreprise en 2008.
 

Andere mochten auch

Honest Performance Testing with "NDBench" (Vinay Chella, Netflix) | Cassandra...
Honest Performance Testing with "NDBench" (Vinay Chella, Netflix) | Cassandra...Honest Performance Testing with "NDBench" (Vinay Chella, Netflix) | Cassandra...
Honest Performance Testing with "NDBench" (Vinay Chella, Netflix) | Cassandra...DataStax
 
100% Truffaut - Edition spéciale Noël
100% Truffaut - Edition spéciale Noël100% Truffaut - Edition spéciale Noël
100% Truffaut - Edition spéciale Noëlnavicreed
 
Challenge VDN 2013 : classement final femmes
Challenge VDN 2013 : classement final femmesChallenge VDN 2013 : classement final femmes
Challenge VDN 2013 : classement final femmesVal Binbin
 
Centre d’Excellence Académique Alnair
Centre d’Excellence Académique AlnairCentre d’Excellence Académique Alnair
Centre d’Excellence Académique AlnairAlnair Lubnan
 
Risques et crises sanitaires : le climat inquiète les Français
Risques et crises sanitaires : le climat inquiète les FrançaisRisques et crises sanitaires : le climat inquiète les Français
Risques et crises sanitaires : le climat inquiète les Françaisvaesoliscorp
 
Dp wipigroup m_ai_juin11
Dp wipigroup m_ai_juin11Dp wipigroup m_ai_juin11
Dp wipigroup m_ai_juin11witschi
 
Étude Vae Solis : qui sont les meilleurs communicants?
Étude Vae Solis : qui sont les meilleurs communicants?Étude Vae Solis : qui sont les meilleurs communicants?
Étude Vae Solis : qui sont les meilleurs communicants?vaesoliscorp
 
Storyboard Technique de commercialisation
Storyboard Technique de commercialisationStoryboard Technique de commercialisation
Storyboard Technique de commercialisationservice_info
 
La révolution américaine
La révolution américaine La révolution américaine
La révolution américaine kksaunders
 
Tuberculosis
TuberculosisTuberculosis
Tuberculosisgguss12
 
ExpGrupal-software educativoDEM
ExpGrupal-software educativoDEMExpGrupal-software educativoDEM
ExpGrupal-software educativoDEMDaisy Abarca
 
Le météo
Le météoLe météo
Le météopa10ger
 
CODEEN - Proyectos estratégicos para el desarrollo económico sustentable de E...
CODEEN - Proyectos estratégicos para el desarrollo económico sustentable de E...CODEEN - Proyectos estratégicos para el desarrollo económico sustentable de E...
CODEEN - Proyectos estratégicos para el desarrollo económico sustentable de E...Ricardo Meza
 
17 méthodes simples pour augmenter facilement la crédibilité de votre site web
17 méthodes simples pour augmenter facilement la crédibilité de votre site web17 méthodes simples pour augmenter facilement la crédibilité de votre site web
17 méthodes simples pour augmenter facilement la crédibilité de votre site webAudray Bélanger
 
Spreecast 5 16 mars 2015 hec
Spreecast 5 16 mars 2015 hecSpreecast 5 16 mars 2015 hec
Spreecast 5 16 mars 2015 hecFirst_Finance
 

Andere mochten auch (20)

Honest Performance Testing with "NDBench" (Vinay Chella, Netflix) | Cassandra...
Honest Performance Testing with "NDBench" (Vinay Chella, Netflix) | Cassandra...Honest Performance Testing with "NDBench" (Vinay Chella, Netflix) | Cassandra...
Honest Performance Testing with "NDBench" (Vinay Chella, Netflix) | Cassandra...
 
100% Truffaut - Edition spéciale Noël
100% Truffaut - Edition spéciale Noël100% Truffaut - Edition spéciale Noël
100% Truffaut - Edition spéciale Noël
 
Carlos magis
Carlos magisCarlos magis
Carlos magis
 
Challenge VDN 2013 : classement final femmes
Challenge VDN 2013 : classement final femmesChallenge VDN 2013 : classement final femmes
Challenge VDN 2013 : classement final femmes
 
Essai gravel marie-geneviève
Essai gravel marie-genevièveEssai gravel marie-geneviève
Essai gravel marie-geneviève
 
Lumières
LumièresLumières
Lumières
 
Jeu de piste
Jeu de pisteJeu de piste
Jeu de piste
 
Centre d’Excellence Académique Alnair
Centre d’Excellence Académique AlnairCentre d’Excellence Académique Alnair
Centre d’Excellence Académique Alnair
 
Risques et crises sanitaires : le climat inquiète les Français
Risques et crises sanitaires : le climat inquiète les FrançaisRisques et crises sanitaires : le climat inquiète les Français
Risques et crises sanitaires : le climat inquiète les Français
 
Dp wipigroup m_ai_juin11
Dp wipigroup m_ai_juin11Dp wipigroup m_ai_juin11
Dp wipigroup m_ai_juin11
 
Étude Vae Solis : qui sont les meilleurs communicants?
Étude Vae Solis : qui sont les meilleurs communicants?Étude Vae Solis : qui sont les meilleurs communicants?
Étude Vae Solis : qui sont les meilleurs communicants?
 
Storyboard Technique de commercialisation
Storyboard Technique de commercialisationStoryboard Technique de commercialisation
Storyboard Technique de commercialisation
 
La révolution américaine
La révolution américaine La révolution américaine
La révolution américaine
 
maps turquie
maps turquiemaps turquie
maps turquie
 
Tuberculosis
TuberculosisTuberculosis
Tuberculosis
 
ExpGrupal-software educativoDEM
ExpGrupal-software educativoDEMExpGrupal-software educativoDEM
ExpGrupal-software educativoDEM
 
Le météo
Le météoLe météo
Le météo
 
CODEEN - Proyectos estratégicos para el desarrollo económico sustentable de E...
CODEEN - Proyectos estratégicos para el desarrollo económico sustentable de E...CODEEN - Proyectos estratégicos para el desarrollo económico sustentable de E...
CODEEN - Proyectos estratégicos para el desarrollo económico sustentable de E...
 
17 méthodes simples pour augmenter facilement la crédibilité de votre site web
17 méthodes simples pour augmenter facilement la crédibilité de votre site web17 méthodes simples pour augmenter facilement la crédibilité de votre site web
17 méthodes simples pour augmenter facilement la crédibilité de votre site web
 
Spreecast 5 16 mars 2015 hec
Spreecast 5 16 mars 2015 hecSpreecast 5 16 mars 2015 hec
Spreecast 5 16 mars 2015 hec
 

Ähnlich wie Elasticsearch performance tuning

Apache solr andré bois-crettez 08
Apache solr   andré bois-crettez 08Apache solr   andré bois-crettez 08
Apache solr andré bois-crettez 08Loïc Descotte
 
Déploiement ELK en conditions réelles
Déploiement ELK en conditions réellesDéploiement ELK en conditions réelles
Déploiement ELK en conditions réellesGeoffroy Arnoud
 
LP_Admin_base_données.ppt
LP_Admin_base_données.pptLP_Admin_base_données.ppt
LP_Admin_base_données.pptIdriss22
 
Chapitre3 elk concepts_avances
Chapitre3 elk concepts_avancesChapitre3 elk concepts_avances
Chapitre3 elk concepts_avancesFabien SABATIER
 
Azure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmediaAzure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmediaMicrosoft
 
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?Benoit Fillon
 
Presentation intis 2017 version27112017
Presentation intis 2017 version27112017Presentation intis 2017 version27112017
Presentation intis 2017 version27112017Dr Hajji Hicham
 
Cloud design patterns
Cloud design patternsCloud design patterns
Cloud design patternsPascal Laurin
 
Distributed computing with Spark 2.x
Distributed computing with Spark 2.xDistributed computing with Spark 2.x
Distributed computing with Spark 2.xDr Hajji Hicham
 
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
 
Spark SQL principes et fonctions
Spark SQL principes et fonctionsSpark SQL principes et fonctions
Spark SQL principes et fonctionsMICHRAFY MUSTAFA
 
Les bases BI sont-elles différentes?
Les bases BI sont-elles différentes?Les bases BI sont-elles différentes?
Les bases BI sont-elles différentes?Franck Pachot
 
IBM FlashSystem : Les bonnes raisons de passer au Flash
IBM FlashSystem : Les bonnes raisons de passer au Flash IBM FlashSystem : Les bonnes raisons de passer au Flash
IBM FlashSystem : Les bonnes raisons de passer au Flash Solutions IT et Business
 
Réplication de base de données oracle avec Golden Gate
Réplication de base de données oracle avec Golden GateRéplication de base de données oracle avec Golden Gate
Réplication de base de données oracle avec Golden GateMor THIAM
 
Stockage et Cloud [#CloudAccelerate 13/06/2014 @ IBM CC Paris]
Stockage et Cloud [#CloudAccelerate 13/06/2014 @ IBM CC Paris]Stockage et Cloud [#CloudAccelerate 13/06/2014 @ IBM CC Paris]
Stockage et Cloud [#CloudAccelerate 13/06/2014 @ IBM CC Paris]IBM France PME-ETI
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : SparkLilia Sfaxi
 

Ähnlich wie Elasticsearch performance tuning (20)

Chapitre1 elk chez_psa
Chapitre1 elk chez_psaChapitre1 elk chez_psa
Chapitre1 elk chez_psa
 
Apache solr andré bois-crettez 08
Apache solr   andré bois-crettez 08Apache solr   andré bois-crettez 08
Apache solr andré bois-crettez 08
 
Déploiement ELK en conditions réelles
Déploiement ELK en conditions réellesDéploiement ELK en conditions réelles
Déploiement ELK en conditions réelles
 
LP_Admin_base_données.ppt
LP_Admin_base_données.pptLP_Admin_base_données.ppt
LP_Admin_base_données.ppt
 
Cache
CacheCache
Cache
 
Chapitre3 elk concepts_avances
Chapitre3 elk concepts_avancesChapitre3 elk concepts_avances
Chapitre3 elk concepts_avances
 
Azure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmediaAzure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmedia
 
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?
MasterClass SQL : Comment avoir de bonnes performances avec SQL Server ?
 
Presentation intis 2017 version27112017
Presentation intis 2017 version27112017Presentation intis 2017 version27112017
Presentation intis 2017 version27112017
 
Elastic serach
Elastic serachElastic serach
Elastic serach
 
Cloud design patterns
Cloud design patternsCloud design patterns
Cloud design patterns
 
Distributed computing with Spark 2.x
Distributed computing with Spark 2.xDistributed computing with Spark 2.x
Distributed computing with Spark 2.x
 
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
 
Spark SQL principes et fonctions
Spark SQL principes et fonctionsSpark SQL principes et fonctions
Spark SQL principes et fonctions
 
Les bases BI sont-elles différentes?
Les bases BI sont-elles différentes?Les bases BI sont-elles différentes?
Les bases BI sont-elles différentes?
 
Big data architectures
Big data architecturesBig data architectures
Big data architectures
 
IBM FlashSystem : Les bonnes raisons de passer au Flash
IBM FlashSystem : Les bonnes raisons de passer au Flash IBM FlashSystem : Les bonnes raisons de passer au Flash
IBM FlashSystem : Les bonnes raisons de passer au Flash
 
Réplication de base de données oracle avec Golden Gate
Réplication de base de données oracle avec Golden GateRéplication de base de données oracle avec Golden Gate
Réplication de base de données oracle avec Golden Gate
 
Stockage et Cloud [#CloudAccelerate 13/06/2014 @ IBM CC Paris]
Stockage et Cloud [#CloudAccelerate 13/06/2014 @ IBM CC Paris]Stockage et Cloud [#CloudAccelerate 13/06/2014 @ IBM CC Paris]
Stockage et Cloud [#CloudAccelerate 13/06/2014 @ IBM CC Paris]
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : Spark
 

Mehr von ebiznext

Spark / Mesos Cluster Optimization
Spark / Mesos Cluster OptimizationSpark / Mesos Cluster Optimization
Spark / Mesos Cluster Optimizationebiznext
 
Machine learning
Machine learningMachine learning
Machine learningebiznext
 
EBIZNEXT-RIAK
EBIZNEXT-RIAKEBIZNEXT-RIAK
EBIZNEXT-RIAKebiznext
 
Machine Learning - Spark / MLlib
Machine Learning - Spark / MLlibMachine Learning - Spark / MLlib
Machine Learning - Spark / MLlibebiznext
 
Realtime Web avec Kafka, Spark et Mesos
Realtime Web avec Kafka, Spark et MesosRealtime Web avec Kafka, Spark et Mesos
Realtime Web avec Kafka, Spark et Mesosebiznext
 
Les modèles NoSQL
Les modèles NoSQLLes modèles NoSQL
Les modèles NoSQLebiznext
 
Scala io2013 : Our journey from UML/MDD to Scala macros
Scala io2013 : Our journey from UML/MDD to Scala macrosScala io2013 : Our journey from UML/MDD to Scala macros
Scala io2013 : Our journey from UML/MDD to Scala macrosebiznext
 

Mehr von ebiznext (7)

Spark / Mesos Cluster Optimization
Spark / Mesos Cluster OptimizationSpark / Mesos Cluster Optimization
Spark / Mesos Cluster Optimization
 
Machine learning
Machine learningMachine learning
Machine learning
 
EBIZNEXT-RIAK
EBIZNEXT-RIAKEBIZNEXT-RIAK
EBIZNEXT-RIAK
 
Machine Learning - Spark / MLlib
Machine Learning - Spark / MLlibMachine Learning - Spark / MLlib
Machine Learning - Spark / MLlib
 
Realtime Web avec Kafka, Spark et Mesos
Realtime Web avec Kafka, Spark et MesosRealtime Web avec Kafka, Spark et Mesos
Realtime Web avec Kafka, Spark et Mesos
 
Les modèles NoSQL
Les modèles NoSQLLes modèles NoSQL
Les modèles NoSQL
 
Scala io2013 : Our journey from UML/MDD to Scala macros
Scala io2013 : Our journey from UML/MDD to Scala macrosScala io2013 : Our journey from UML/MDD to Scala macros
Scala io2013 : Our journey from UML/MDD to Scala macros
 

Elasticsearch performance tuning

  • 1. Elasticsearch Performance tuning Contexte L’objet de cette note est un retour d’expérience sur l’optimisation des performances d’un cluster elasticsearch dans le cadre de la mise en oeuvre d’une solution de recommandation en ligne qui s’appuie sur MLLib / Spark /elasticsearch. Le diagramme ci-­‐dessous illustre le découpage logique : Machine Learning (MLLib) Framework de parallelisation et d'exécution (Apache Spark) HDFS (ElasticSearch) elasticsearch est une solution de search distribuée et permet donc de répartir les données sur plusieurs serveurs. L’objet de cette note est de décrire les paramétrages réalisés sur chacun des noeuds pour obtenir une performance optimale. Pour les impatients, les optimisations réalisées sont les suivantes : Amélioration des temps d’indexation par : • Optimisation 1 : Utilisation de l’API bulk • Optimisation 2 : Débrider la bande passante pour les accès disque • Optimisation 3 : Réduire la fréquence des opérations de refresh • Optimisation 4 : Tuning des paramètres de flush • Optimisation 5 : Réduction du nombre de replicas Amélioration des performances de "search" par : • Optimisation 6 : Réduction à un seul segment Lucene
  • 2. • Optimisation 7 : Utilisation du cache de filtres • Optimisation 8 : Utilisation sélective du cache de données • Optimisation 9 : Dimensionnement adéquat de la JVM et du cache système • Optimisation 10 : Spécialisation des noeuds elasticsearch D’autres mécanismes d’optimisation sont offerts par Elasticsearch tels que le field data cache pour les agrégations, le routing pour l’orientation des requêtes ou encore l’API warmer qui consiste à précharger les caches et éviter les temps de latence lors des premières sollicitations. Notre objectif n’est pas de tous les énumérer. Les optimisations sont celles que nos avons mis en oeuvre dans un contexte BigData mais qui s’appliquent également à d’autres contextes. Optimisation de l’indexation Optimisation 1 : Optimisation applicative par insertion de masse Dans le cadre de traitement de masse, les opérations sont la plupart du temps des opérations ensemblistes : • Insertion de masse : Les données sont injectées en masse dans la base Elasticsearch pour ensuite être recherchées • Mise à jour / suppression de masse : Suite à un calcul distribué sur Spark , des groupes de données stockés dans Elasticsearch sont potentiellement mises à jour / supprimés. • Les groupes de données sont extraits d’elasticsearch et accédés au travers de RDD Spark. Pour éviter l’invocation séquentielle des opérations d’indexation / mise à jour / suppression, nous avons pris le parti d’utiliser plutôt les opérations ensemblistes et de les invoquer au travers de l’API _bulk d’Elasticsearch. Cela permet à Elasticsearch d’indexer plusieurs documents en une seule fois. Le nombre de documents à inclure dans une requête _bulk est fonction du nombre de documents à indexer et de la taille des documents. Pour notre part, chaque opération d’indexation embarquait environ 5000 documents de 1,5Ko soit 7,5Mo de données indexées par Elasticsearch en une seule opération.
  • 3. Noeud Spark Noeud Spark Noeud Spark Cluster Elasticsearch 7,5Mo / opération 7,5Mo / opération 7,5Mo / opération Les opérations d’indexation de masse sont également parallélisées sur Spark. Optimisation 2 : Pas de limite dans l’utilisation de la bande passante pour les accès disque Elasticsearch par défaut limite la bande passante sur les accès disques à 20Mb/s. Dans notre contexte de disques rapides, nous avons également supprimé cette limitation curl -­‐XPUT 'localhost:9200/moncluster/_settings' -­‐d '{ "transient" : { "indices.store.throttle.type" : "none" } }' Noter la valeur "transient" qui signifie que nous souhaitons ce paramétrage uniquement dans la phase courante. Un arrêt / relance d’Elasticsearch ne conservera pas ces valeurs. Les étapes de l’indexation dans elasticsearch L’indexation d’un document dans Lucene se déroule en quatre phases (bien que ces phases ne soient pas tout à fait séquentielles, je les présente ainsi pour faciliter l’explication) : • Phase 1 (Indexation mémoire) : Le document est indexé dans un segment en mémoire. Le document ainsi indexé est encore invisible aux requêtes de recherche. • Phase 2 (Log sur disque): Enregistrement de la requête d’indexation dans un log de transactions. Comme pour les SGBD classiques, cela permet à Elasticsearch d’être résilient aux pannes et de régénérer les informations d’indexation qui n’ont pas encore été sauvegardées en cas de crash. • Phase 3 (Refresh) : Périodiquement, les informations d’indexation sont rendues accessibles au search. Cette phase, va provoquer l’invalidation des caches.
  • 4. • Phase 4 (Flush disque) : Périodiquement, les informations d’indexation sont persistées sur disque. Cette phase va persister sur disque les segments en mémoire et vider le fichier de logs de transactions. Comme on peut le deviner, les phases 3 et 4 sont celles qui ont un impact sur les performances. Optimisation 3 : Réduction du temps d’indexation par réduction de la fréquence de refresh L’opération de « refresh » (phase 3 ci-­‐dessus) a pour rôle de rendre disponible les informations récemment indexées pour le search. Cette opération couteuse en phase d’indexation peut être désactivée avant le chargement des données et réactivée une fois l’indexation terminée avec les commandes suivantes : Commande 1 : Désactivation du refresh curl -­‐XPUT 'localhost:9200/monindex/_settings' -­‐d '{ "index" : { "refresh_interval" : -­‐1 } }' Commande 2 : Insertion des données Commande 3 : Réactivation du refresh curl -­‐XPUT 'localhost:9200/monindex/_settings' -­‐d '{ "index" : { // 1 seconde (valeur par défaut dans ES) "refresh_interval" : 1s } }' Optimisation 4 : Réduction du temps d’indexation par optimisation du flush Dans la phase de flush (phase 4 ci-­‐dessus), les segments sont éventuellement regroupés en segments de taille plus importante. La phase 4 se produit dans les conditions suivantes : • Le segment mémoire est plein • Le délai paramétré de flush a été atteint • Le log de transactions est plein
  • 5. Document JSON Segment mémoire Transition Log disque Indexation timeout ou segment plein ou transaction log plein déclencher le flush Au moment du flush, les segments sont potentiellement fusionnés. Cette opération est d’autant plus couteuse que la taille du segment est importante. Enfin un nombre trop important de petits segments va ralentir les opérations de search. Optimisation 5 : Réduction du temps d’indexation par réduction du nombre de replicas Une opération d’indexation est terminée lorsque le document est ajout à la partition primaire et à tous les replicas. Le nombre de replicas a donc une incidence directe sur le délai d’indexation. Dans notre cas, les données sont sauvegardées par ailleurs et les données indexées dans le cluster sont "reconstructibles". Nous avons donc tout simplement supprimé les replicas en réduisant le nombre de replicas à 0 dans le fichier de configuration elasticsearch.yml. Optimisation de la recherche Une fois les données indexées, nous avons besoin de les accéder. Dans notre contexte, la base ainsi alimentée devient une base dédiée à a consultation exclusivement. Cela est d’autant plus simple que les optimisations d’indexation sont souvent contradictoires avec les optimisations du search. C’est d ‘ailleurs le cas avec notre choix de ne pas avoir de replicas, qui est bénéfique pour l’indexation mais qui l’est moins pour le search.
  • 6. Optimisation 6 : réduction à un seul segment Lucene Nous sommes particulièrement intéressés dans notre exemple par la rapidité du search et le nombre de segments a un impact direct sur les performances. Une fois l’indexation terminée et la base ES destinée exclusivement à être interrogée, nous avons réduit le nombre de segments à 1 par la commande suivante : curl -­‐XGET 'localhost:9200/monindex/_optimize?max_num_segments=1&wait_for_merge=fa lse’ Optimisation 7 : Choisir soigneusement les types de filtres Deux types de cache existent dans elasticsearch ; Un cache pour les filtres et un cache pour les données de query. Les requêtes de type "filter" sont les requêtes dont le résultat est une valeur booléenne et les requêtes de type "query" sont destinées à l’extraction de documents. Cache de filtres Les requêtes de type filter sont beaucoup plus performantes car Elasticsearch va mémoriser dans un bitset les documents qui vérifient chacun des filtres d’un groupe de filtres afin de pouvoir les réutiliser indépendamment les uns des autres. Les opérations mettant en oeuvre le "bool filter" sont à privilégier. Les types de filtres les plus performants sont ceux qui mettent en oeuvre les bitset. Il s’agit des types "term" / "exist" / "missing" / "prefix". Les types de filtres "nested" / "has_parent" / "has_child" / "script" ne mettent pas en oeuvre les bitset et ne sont pas non mis en cache par défaut non plus. Optimisation 8 : Mettre en oeuvre le cache de manière sélective Par défaut, les résultats des queries sont mis en cache. Un cache qui se remplit trop vite va provoquer le mécanisme consommateur d’éviction LRU de cache d’elasticsearch. Pour éviter un remplissage un peu trop rapide du cache, nous forçons la propriété "_cache" à la valeur "false" pour les requêtes dont le résultat ne sera pas réutilisé d’un appel à l’autre. Optimisation 9 : Cache de la JVM et cache système Le réflexe le plus courant consiste à dédier le maximum de mémoire vive à la JVM et ne laisser que le strict minimum au système d’exploitation. L’OS s’adapte et réduit du coup la taille du cache disque système, ce qui détériore les performances lors de l’accès aux données. La règle préconisée consiste à octroyer 50% de la mémoire à la JVM et 50% à l’OS. Quant à la taille du tas (heap size) de la JVM, au delà de 32Go, les références sont encodées en 64 bits au lieu d’être encodées en 32 bits, c’est donc autant de mémoire de perdue. Une JVM avec un tas de 48Go ne sera sans doute pas plus performante qu’une JVM paramétrée à 32Go. Nous avons donc observé la règle suivante : Une JVM pour 32Go de mémoire.
  • 7. Optimisation 10 : Dédier des noeuds à la collecte des données. Le noeud qui reçoit la requête de search, réalise les opérations suivantes : 1. Parsing de la requête HTTP 2. Soumission de la requête à l’ensemble des noeuds de données 3. Collecte de l’ensemble des résultats 4. Agrégation des données reçues 5. Renvoi à l’émetteur Les étapes 3 et 4 ci-­‐dessous sont d’autant plus consommatrices de CPU et de mémoire que le volume de données à renvoyer est important. Nous décidons de soulager les noeuds de données elasticsearch en mettant en frontal des noeuds clients chargés de réaliser les opérations 1, 3, 4 et 5 ci-­‐dessus. La mémoire et la CPU des noeuds de données sont ainsi exclusivement dédiés au search. Noeud de données Noeud de données Noeud de données Noeud client HTTP Les attributs node.data et node.master ont la valeur "false" dans le fichier de configuration elasticsearh.yml pour les noeuds client qui n’hébergent pas de données et sont chargés exclusivement de soumettre les requêtes et de collecter puis agréger les résultats.