ELASTICSEARCH @SYNTHESIO FRED DE VILLAMIL BACKGROUND • FRED DE VILLAMIL, 37 ANS, HEAD OF INFRASTRUCTURE @SYNTHESIO • LINUX / (FREE)BSD DEPUIS 1996 • CONTRIBUTEUR OPEN SOURCE DEPUIS 1998 • ELASTICSEARCH EN PRODUCTION DEPUIS LA 0.17.6 SYNTHESIO • Leader du “social listening” • Crawl le Web, enrichit les données avec de l’analyse de sentiment et démographique • Bureaux à Paris, Londres, New York et Singapour ELASTICSEARCH CHEZ SYNTHESIO • 3 clusters, 116 serveurs, 271 TB de stockage, 7,25TB de RAM • 60 milliards de documents indexés, 160TB de données • 1,5 milliards de nouveaux documents par mois • Utilisé pour agréger plusieurs clusters SQL de dizaines de TB PHASE 1 : OFFLOADER LES MYSQL • 1 index global, 512 shards, 5 milliard de documents • 1000 documents / seconde en continu • 47 serveurs en RAID0, ES 1.3.2 puis 1.3.9 • Capacité : 40TB, dont, 24TB utilisés, 2.62 TB RAM TYPOLOGIE DU CLUSTER • 2 QUERY NODES : VM, 8GB DE RAM • 3 MASTER NODES : VM, 8GB DE RAM • 42 DATA NODE : PHYSIQUE, 1TB SSD, RAID0, 64GB DE RAM MODÈLE DE DONNÉES • ROUTAGE PAR MOIS • INDEXATION DES DONNÉES, PUIS DES DASHBOARDS EN NESTED { "document": { "dashboards": { "dashboard_id": 1, "dashboard_id": 2 } } } PROBLÈMES • DES SHARDS DE 500 À 900GB (!!!) • IMPOSSIBLE DE MODIFIER LE MAPPING • IMPOSSIBLE DE SUPPRIMER LES DONNÉES PÉRIMÉES SANS RÉINDEXER TOUT UN MOIS • 20% DE DOCUMENTS DELETED IMPOSSIBLES À SUPPRIMER • PROBLÈMES DE GARBAGE COLLECTOR, CLUSTER QUI FLAP EN PERMANENCE • 3 JOURS POUR REDÉMARRER LE CLUSTER QUAND TOUT VA BIEN LUCENE • SEGMENTS : FICHIERS IMMUTABLES ÉCRITS PAR LUCENE • PAS DE RÉELLE SUPPRESSION : FLAG DELETED • MERGES POUR FAIRE UN SEUL FICHIER : BESOIN DE 2 * L’ESPACE DISQUE • OPTIMISATION : DELETE + MERGE MERGE ET DELETE SOLUTIONS • PASSAGE DE MMAPFS À NIOFS • PASSAGE DE CMS À G1GC • MISE EN PLACE D’EXPIRE SUR LE FIELDDATA CACHE MMAPFS VS NIOFS • MMAPFS : MAPPING DES FICHIERS LUCÈNE SUR DES PAGES MMAP. • NIOFS : SHARED LOCK SUR LES FICHIERS + UTILISATION DU CACHE DU FS TUNING G1GC JAVA_OPTS="$JAVA_OPTS -XX:MAXGCPAUSEMILLIS=200" JAVA_OPTS="$JAVA_OPTS -XX:+USEG1GC " JAVA_OPTS="$JAVA_OPTS XX:GCPAUSEINTERVALMILLIS=1000" JAVA_OPTS="$JAVA_OPTS XX:INITIATINGHEAPOCCUPANCYPERCENT=35" TUNING FIELD DATA FIELDDATA: BREAKER: LIMIT: 80% CACHE: SIZE: 30% EXPIRE: 1M EXPIRE DE CACHE • FORMELLEMENT DÉCONSEILLÉ PAR LA DOC ES • FORCE LE VIDAGE DES CACHES INTERNES À ES • OVERLAP DU GARBAGE COLLECTOR • PROBLÈME : PERTE DE PERFORMANCES PHASE 2 : PLUS VITE, PLUS HAUT, PLUS FORT • 8200 indexes, 10 milliards de documents • 15000 documents / seconde en continu • 70 serveurs, es 1.7.5 • Capacité : 60TB, dont, 50TB utilisés, 3,75 TB RAM TYPOLOGIE DES CLUSTERS • 2 CLUSTERS ISO • 2 QUERY NODES : VM, 64GB DE RAM • 3 MASTER NODES : PHYSIQUE, 64GB DE RAM • 30 DATA NODE : PHYSIQUE, 1TB SSD, RAID0, 64GB DE RAM NOUVELLE ORIENTATION PRODUIT • 1 INDICE PAR DASHBOARD, 1 SHARD / 5 MILLIONS DE DOCS • VERSION DU MAPPING • PLUSIEURS VERSIONS D’UN MÊME MAPPING EN PARALLÈLE • SWITCH DE MAPPING SANS INTERRUPTION • BALDUR… BALDUR PROBLÈMES • DES MILLIERS DE SEGMENTS LUCÈNE SUR CHAQUE MACHINE • 75% DE LA HEAP UTILISÉE POUR GÉRER LES SEGMENTS • ON CRÉE PLUS DE SEGMENTS QU’ON ARRIVE À MERGER • REDÉMARRAGE / MISE À JOUR DE LA CONFIGURATION FRÉQUENTS ET COMPLIQUÉS SOLUTIONS • OPTIMISATION EN CONTINU QUAND DELETED • NETTOYAGE EN CONTINU DES VIEUX INDEXES • RACK AWARENESS : REDÉMARRAGE D’UN CLUSTER DE NOEUDS EN 30 MINUTES 60 RACK AWARENESS BLACKHOLE • 70 SERVEURS, 36 INDEXES, 50 MILLIARDS DE DOCUMENTS, 120TB DE DONNÉES, 160TB DE CAPACITÉ • REQUÊTES TRANSVERSES SUR L’ENSEMBLE DES DONNÉES • 1 INDEX PAR MOIS DE DONNÉES, 30 SHARDS, PAS DE ROUTAGE TYPOLOGIE DU CLUSTER • 2 QUERY NODES : VM, 31GB DE RAM • 3 MASTER NODES : VM, 31GB DE RAM • 62 DATA NODE : PHYSIQUE, 3,2TB SSD, RAID0, 64GB DE RAM, XEON D INDEXATION • MERGE DE 3 CLUSTERS GALERA ET UN CLUSTER ES DANS UNE QUEUE KAFKA : 30.000 DOCUMENTS / SECONDE • INJECTION DES DONNÉES DE KAFKA DIRECTEMENT DANS LES DATA NODES: 60.000 DOCUMENTS / SECONDE DE MOYENNE SUR 3 SEMAINES CPU BOUND ARCHITECTURE D'INDEXATION PROBLÈMES • ES TENTE DE METTRE LES DONNÉES EN CACHE • DES REQUÊTES SUR 3 ANS DE DONNÉES SANS LIMITE DE DATE PASSENT, AVEC UNE LIMITE, PERTE DE LA MOITIÉ DES NOEUDS • LENTEUR DES REQUÊTES LES PLUS GROSSES SOLUTIONS • DÉSACTIVER LES CACHES D’ES • PARALLELISATION DES REQUÊTES PAR INDEX NOUVEAUX DOCUMENTS : QUI VA OÙ ? • PROBLÈME : COMMENT SAVOIR DANS QUELS DASHBOARD VA UN NOUVEAU DOCUMENT ? • NE PLUS DÉPENDRE DE MYSQL • 50 MILLIONS DE DOCUMENTS / JOUR SOLUTION : LA PERCOLATION • SYSTÈME D'ANNUAIRE INVERSÉ: • STOCKAGE DES REQUÊTES ET NON DES DOCUMENTS • POUR CHAQUE DOCUMENT, TEST DE CHAQUE REQUÊTE JUSQU’À TROUVER LA CORRESPONDANCE PROBLÈMES DE LA PERCOLATION • ESSAIE CHAQUE REQUÊTE STOCKÉE • 35000 REQUÊTES À TESTER, EN CROISSANCE • 1.750.000.000.000 REQUÊTES À PASSER PAR JOUR • CPU GREEDY SOLUTIONS • ROUTAGE À PARTIR DE LA LANGUE DES DOCUMENTS • HASH SUR LES LANGUES ACCEPTÉES PAR LES DASHBOARDS • FILTRAGE ENSUITE SUR LES TERMES DE LA REQUÊTE • RÉSULTAT : PERMET DE TRAITER JUSQU’À 100.000 REQUÊTES / SECONDE QUESTIONS ? CVS : [email protected]