Elasticsearchi parimad tavad
Alustame parimate tavade kasutamist, et järgida Elasticsearchi ja milliseid probleeme see võib tekitada, kui neid punkte väldime. Alustame.
Määrake alati ES-kaardistused
Üks asi, mida ES kindlasti teha saab, on ilma kaardistusteta töötamine. Niisiis, kui hakkate JSON-i andmeid oma ES-indeksisse sisestama, kordab see andmevälju ja loob sobiva kaardistamise. See tundub otsene ja lihtne, kuna ES valib ise andmetüübi. Teie andmete põhjal võib vaja minna välja, mis oleks konkreetse andmetüübiga.
Oletame näiteks, et indekseerite järgmise dokumendi:
"id": 1,
"title": "Installige ElasticSearch Ubuntu",
"link": "https: // linuxhint.com / install-elasticsearch-ubuntu / ",
"kuupäev": "2018-03-25"
Nii märgib Elasticsearch välja „kuupäev” tüübiks „kuupäev”. Kuid kui indekseerite järgmise dokumendi:
"id": 1,
"title": "ES parimad tavad ja jõudlus",
"date": "Ootel"
Seekord on kuupäevavälja tüüp muudetud ja ES viskab vea ega luba teie dokumenti indekseerida. Asjade lihtsustamiseks võite mõne dokumendi indekseerida, vaadata, milliseid välju ES indekseerib, ja haarata kaardistamine sellelt URL-ilt:
GET / register_nimi / doc_type / _mappingNii ei pea te ka täielikku kaardistamist koostama.
Tootmislipud
Klastri vaikenime, mida ES käivitab, nimetatakse elasticsearch. Kui teie klastris on palju sõlme, on mõistlik hoida nimetamislipud võimalikult järjepidevad, näiteks:
klaster.nimi: rakenduse_tootminesõlm.nimi: app_es_node_001
Peale selle on sõlmede taastamise seaded samuti olulised. Oletame, et mõned klastri sõlmed taaskäivituvad tõrke tõttu ja mõned sõlmed taaskäivituvad veidi pärast teisi sõlme. Andmete järjepidevuse tagamiseks kõigi nende sõlmede vahel peame käivitama järjepidevusprogrammi, mis hoiab kõiki klastreid järjepidevas olekus.
värav.taastamise_järgsed_sõlmed: 10Samuti on kasulik, kui ütlete klastrile ette, kui palju sõlme klastris on ja kui palju taasteaega need vajavad:
värav.oodatavad_sõlmed: 20värav.taastumisaeg: 7m
Õige konfiguratsiooni korral võib tundideks kulunud taastamine võtta nii vähe kui minut ja see võib säästa mis tahes ettevõttele palju raha.
Võimsuse tagamine
Oluline on teada, kui palju teie andmed ruumi võtavad ja kui kiiresti see Elasticsearchi voolab, sest see otsustab, kui palju RAM-i vajate ka klastri igas sõlmes ja põhisõlmes.
Muidugi pole vajalike arvude saavutamiseks konkreetseid juhiseid, kuid võime teha mõned sammud, mis pakuvad meile head ideed. Üks sammudest on simuleerima kasutamise juhtum. Tehke ES-klaster ja sisestage see peaaegu sama andmeedastuskiirgusega, mida võiksite oodata oma tooteseadistusega. Mõiste alustada suurelt ja vähendada aitab teil olla järjekindel ka selles osas, kui palju ruumi on vaja.
Suured mallid
Indekseeritud suurte mallide määratlemisel peate alati silmitsi probleemidega, mis on seotud malli sünkroonimisega klastri eri sõlmedes. Pidage alati meeles, et mall tuleb uuesti määratleda iga kord, kui toimub andmemudeli muutus. See on palju parem idee hoia mallid dünaamilistena. Dünaamilised mallid värskendavad väljade vastendusi automaatselt varem määratletud vastenduste ja uute väljade põhjal. Pange tähele, et mallide võimalikult väiksena hoidmine ei asenda midagi.
2Mulockalli kasutamine Ubuntu serverites
Linux kasutab vahetamise protsessi, kui see vajab uute lehtede jaoks mälu. Vahetamine muudab asja aeglaseks, kuna kettad on mälust aeglasemad. The mlockall ES-i konfiguratsioonis olev atribuut käsib ES-il oma lehti mälust välja vahetada, isegi kui need pole praegu vajalikud. Selle atribuudi saab määrata YAML-failis:
bootstrap.mlockall: tõsiES v5-s.x + versioonid, see atribuut on muutunud:
bootstrap.memory_lock: tõsiKui kasutate seda omadust, veenduge, et pakuksite ES-ile piisavalt suurt kuppemälu -DXmx valik või ES_HEAP_SIZE.
Minimeeri kaardistamise värskendused
Klastri jõudlust mõjutab veidi iga kord, kui teete oma ES-klastris värskendustaotluste kaardistamise. Kui te ei saa seda kontrollida ja soovite siiski kaardistusi värskendada, saate kasutada ES YAML-i konfiguratsioonifailis atribuuti:
indeksid.klaster.send_refresh_mapping: falseKui mudeli värskendustaotlus on põhisõlme ootel järjekorras ja see saadab sõlmedele vana kaardistusega andmed, peab ta hiljem ka kõigile sõlmedele värskendustaotluse saatma. See võib muuta asja aeglaseks. Kui määrame ülaltoodud atribuudi väärtuseks Väär, on mõistlik, et vastendust on värskendatud ja see ei saada sõlmedele värskendustaotlust. Pange tähele, et see on kasulik ainult siis, kui teete oma kaardistustes regulaarselt palju muudatusi.
Optimeeritud niit-pool
ES-sõlmedel on palju niidipunkte, et parandada lõime haldamist sõlmes. Kuid on olemas piirangud, kui palju andmeid iga lõime eest hoolitseda saab. Selle väärtuse jälgimiseks saame kasutada ES-i omadust:
threadpool.lahtiselt.queue_size: 2000See annab ES-le teada killustikus olevate taotluste arvu, mida saab sõlmes täitmiseks järjekorda seada, kui päringu töötlemiseks pole lõime saadaval. Kui ülesannete arv ületab selle väärtuse, saate a RemoteTransportException. Mida suurem on see väärtus, seda rohkem on teie sõlmmasinas vaja kuhjamahtu ja kulutatakse ka JVM-i kuhja. Samuti peaksite oma koodi valmis hoidma juhul, kui see erand visatakse.
Järeldus
Selles tunnis vaatasime, kuidas saaksime parandada Elasticsearchi jõudlust, vältides inimeste tavalisi ja mitte nii levinud vigu. Lisateave artiklite Elasticsearch artiklite kohta LinuxHintis.