„Elasticsearch“ geriausios praktikos pavyzdžiai
Mes pradėsime dirbti su geriausios praktikos pavyzdžiais, kad galėtume laikytis „Elasticsearch“ ir kokių problemų jis gali sukelti, kai išvengsime šių punktų. Pradėkime.
Visada apibrėžkite ES susiejimus
Vienas dalykas, kurį ES tikrai gali padaryti, yra darbas be atvaizdavimo. Taigi, kai pradėsite kaupti JSON duomenis į savo ES indeksą, jis kartosis duomenų laukuose ir sukurs tinkamą žemėlapį. Tai atrodo tiesioginė ir lengva, nes ES pati renkasi duomenų tipą. Atsižvelgiant į jūsų duomenis, gali reikėti, kad laukas būtų konkretaus tipo.
Pvz., Tarkime, kad indeksuojate šį dokumentą:
„id“: 1,
"title": "Įdiekite" ElasticSearch "Ubuntu",
"link": "https: // linuxhint.com / install-elasticsearch-ubuntu / ",
„data“: „2018-03-25“
Tokiu būdu „Elasticsearch“ lauką „data“ pažymės kaip „datos“ tipą. Bet indeksuodami šį dokumentą:
„id“: 1,
„title“: „ES geriausia praktika ir našumas“,
„data“: „Laukiama“
Šį kartą datos lauko tipas buvo pakeistas, o ES sukels klaidą ir neleis jūsų dokumento indeksuoti. Kad būtų lengviau, galite indeksuoti kelis dokumentus, pamatyti, kokius laukus indeksuoja ES, ir paimti žemėlapį iš šio URL:
GET / index_name / doc_type / _mappingTokiu būdu jums nereikės kurti ir viso žemėlapio.
Gamybos vėliavos
Vadinamas numatytasis klasterio pavadinimas, kurį pradeda ES elasticsearch. Kai jūsų klasteryje yra daug mazgų, pravartu kuo labiau suderinti pavadinimų vėliavas, pavyzdžiui:
klasteris.pavadinimas: app_es_productionmazgas.pavadinimas: app_es_node_001
Be to, labai svarbu ir mazgų atkūrimo nustatymai. Tarkime, kad kai kurie sankaupos mazgai paleidžiami iš naujo dėl gedimo, o kai kurie mazgai vėl paleidžiami šiek tiek po kitų mazgų. Kad duomenys būtų nuoseklūs tarp visų šių mazgų, turėsime paleisti nuoseklumo programą, kuri išlaikys visas grupes nuoseklioje būsenoje.
vartai.10Taip pat naudinga, kai iš anksto sakote klasteriui, kiek mazgų bus klasteryje ir kiek jiems reikės atkūrimo laiko:
vartai.tikėtini mazgai: 20vartai.atgauti_po_laikas: 7m
Naudojant teisingą konfigūraciją, atkūrimas, kuris būtų užtrukęs kelias valandas, gali užtrukti vos minutę ir gali sutaupyti daug pinigų bet kuriai įmonei.
Pajėgumų aprūpinimas
Svarbu žinoti, kiek vietos užims jūsų duomenys ir kokiu greičiu jie pateks į „Elasticsearch“, nes tai nuspręs, kiek RAM jums reikės kiekviename klasterio mazge ir pagrindiniame mazge.
Žinoma, nėra konkrečių rekomendacijų, kaip pasiekti reikiamą skaičių, tačiau galime imtis tam tikrų veiksmų, kurie mums suteiktų gerą idėją. Vienas iš žingsnių bus imituoti naudojimo atvejis. Sukurkite ES grupę ir tiekite ją beveik tokiu pačiu duomenų greičiu, kokio tikėtumėte atlikdami savo gamybos sąranką. Sąvoka pradėti didelę ir mažinti mastą taip pat gali padėti jums nuosekliai žinoti, kiek vietos reikia.
Dideli šablonai
Apibrėždami indeksuotus didelius šablonus, visada susidursite su problemomis, susijusiomis su šablono sinchronizavimu įvairiuose klasterio mazguose. Visada atkreipkite dėmesį, kad šabloną reikės iš naujo apibrėžti, kai pasikeis duomenų modelis. Tai daug geresnė idėja išlaikyti šablonus dinamiškus. Dinaminiai šablonai automatiškai atnaujina laukų susiejimus pagal anksčiau apibrėžtus susiejimus ir naujus laukus. Atkreipkite dėmesį, kad šablonai nėra kuo mažesni.
2 „mlockall“ naudojimas „Ubuntu“ serveriuose
„Linux“ naudoja keitimosi procesą, kai reikia atminties naujiems puslapiams. Dėl keitimo viskas sulėtėja, nes diskai yra lėtesni nei atmintis. The mlockall ypatybė ES konfigūracijoje nurodo ES nekeisti savo puslapių iš atminties, net jei jie kol kas nereikalingi. Šią ypatybę galima nustatyti YAML faile:
įkrovos diržas.mlockall: tiesaES v5.„x +“ versijose ši ypatybė pakeista į:
įkrovos diržas.memory_lock: tiesaJei naudojate šią nuosavybę, tiesiog įsitikinkite, kad pateikiate ES pakankamai didelę kaupiamąją atmintį naudodami -DXmx variantas arba ES_HEAP_SIZE.
Sumažinkite žemėlapių atnaujinimus
Klasterio našumas šiek tiek nukenčia, kai pateikiate ES klasterio atnaujinimo užklausas. Jei negalite to kontroliuoti ir vis tiek norite atnaujinti susiejimus, galite naudoti ypatybę ES YAML konfigūracijos faile:
indeksai.klasteris.send_refresh_mapping: klaidingasKai modelio naujinimo užklausa laukia pagrindinio mazgo eilės ir ji siunčia duomenis su senais atvaizdais į mazgus, ji taip pat turi vėliau siųsti atnaujinimo užklausą visiems mazgams. Dėl to viskas gali sulėtėti. Kai aukščiau nurodytą ypatybę nustatome kaip „false“, tai supranta, kad atvaizdavimas buvo atnaujintas ir mazgams nebus siunčiama atnaujinimo užklausa. Atminkite, kad tai naudinga tik tuo atveju, jei reguliariai daug keičiate savo susiejimus.
Optimizuotas sriegis
ES mazguose yra daug gijų telkinių, kad būtų galima geriau valdyti gijas mazge. Tačiau yra apribojimų, kiek duomenų gali rūpintis kiekviena gija. Norėdami sekti šią vertę, galime naudoti ES ypatybę:
threadpool.urmu.queue_size: 2000Tai informuoja ES apie fragmentų užklausų, kurias galima eilėje vykdyti mazge, skaičių, kai nėra gijos užklausai apdoroti. Jei užduočių skaičius viršys šią vertę, gausite „RemoteTransportException“. Kuo didesnė ši reikšmė, tuo didesnio kiekio vietos reikės jūsų mazgo mašinoje, taip pat bus sunaudota JVM krūva. Be to, turėtumėte pasiruošti savo kodą, jei ši išimtis bus atmesta.
Išvada
Šioje pamokoje mes pažvelgėme į tai, kaip galime pagerinti „Elasticsearch“ našumą, išvengdami įprastų ir nelabai įprastų klaidų. Skaitykite daugiau „Elasticsearch“ straipsnių apie „LinuxHint“.