Pasiekite aukščiausią našumą su „Elasticsearch“! Šis vadovas apima indeksavimo strategijas, užklausų optimizavimą ir aparatinės įrangos svarstymus.
Elasticsearch optimizavimas: išsamus vadovas pasauliniam mastui
„Elasticsearch“ tapo modernios paieškos infrastruktūros kertiniu akmeniu, palaikančiu viską nuo elektroninės prekybos produktų paieškos iki žurnalų analizės informacijos panelių. Jo paskirstyta prigimtis ir galingos užklausų galimybės daro jį idealų didžiuliams duomenų rinkiniams ir sudėtingiems paieškos reikalavimams tvarkyti. Tačiau norint pasiekti optimalų „Elasticsearch“ našumą, reikia kruopštaus planavimo, konfigūravimo ir nuolatinio optimizavimo. Šiame išsamiame vadove pateikiamos veiksmingos strategijos ir geriausia praktika, kaip maksimaliai padidinti „Elasticsearch“ diegimo efektyvumą ir mastelį, nepaisant geografinės vietos ar pramonės.
„Elasticsearch“ architektūros supratimas
Prieš pasinerdami į optimizavimo metodus, būtina suprasti „Elasticsearch“ pagrindinę architektūrą:
- Mazgai (Nodes): Atskiri serveriai arba virtualios mašinos, kuriose veikia „Elasticsearch“.
- Klasteriai (Clusters): Mazgų rinkinys, kuris kartu saugo ir indeksuoja duomenis.
- Indeksai (Indices): Logiška dokumentų grupė, panaši į lentelę santykinėje duomenų bazėje.
- Dokumentai (Documents): Pagrindinis „Elasticsearch“ duomenų vienetas, pateikiamas kaip JSON objektai.
- Dalys (Shards): Indeksai suskirstomi į dalis, kurios paskirstomos tarp kelių mazgų, siekiant mastelio ir perteklinumo.
- Kopijos (Replicas): Dalims skirtos kopijos, kurios užtikrina atsparumą gedimams ir pagerina skaitymo našumą.
Efektyvus „Elasticsearch“ optimizavimas apima šių komponentų derinimo, siekiant pasiekti norimą našumo, mastelio ir atsparumo gedimams balansą.
Indeksavimo optimizavimas
Indeksavimas yra žalių duomenų konvertavimo į ieškomą formatą procesas. Indeksavimo našumo optimizavimas yra labai svarbus mažinant vėlavimą ir gerinant bendrą sistemos pralaidumą.
1. Mappingo projektavimas
Mappingo apibrėžia, kaip „Elasticsearch“ turėtų interpretuoti ir saugoti kiekvieną jūsų dokumentų lauką. Tinkamų duomenų tipų ir analizatorių pasirinkimas gali žymiai paveikti indeksavimo ir užklausų našumą.
- Duomenų tipai: Kiekvienam laukui naudokite tinkamiausią duomenų tipą. Pavyzdžiui, naudokite
keyword
laukams, kurie naudojami tiksliam atitikimui, irtext
laukams, kuriems reikalinga pilno teksto paieška. - Analizatoriai: Analizatoriai naudojami tekstinių laukų tokenizavimui ir normalizavimui. Tinkamo analizatoriaus pasirinkimas priklauso nuo konkrečių jūsų paieškos programos reikalavimų. Pavyzdžiui,
standard
analizatorius yra gera pradžia bendrosios paskirties tekstinei paieškai, owhitespace
analizatorius tinka laukams, kuriuose yra tarpais atskirti tokenai. Apsvarstykite kalbos specifinius analizatorius (pvz.,english
,spanish
,french
) geresniam šaknies sudarymui ir nereikšmingų žodžių pašalinimui daugialypiame turinyje.
Pavyzdys: Apsvarstykite produktų katalogo indeksą. Produkto pavadinimo laukas turėtų būti analizuojamas naudojant kalbos specifinį analizatorių, kad būtų pagerintas paieškos tikslumas. Produkto ID laukas turėtų būti susietas kaip keyword
tipo, skirtas tiksliam atitikimui.
2. Masinis indeksavimas
Užuot indeksuodami dokumentus individualiai, naudokite masinio indeksavimo API, kad vienu metu indeksuotumėte kelis dokumentus. Tai sumažina antkainį ir žymiai pagerina indeksavimo greitį. Masinio indeksavimo API yra būtina bet kuriam duomenų įkėlimo procesui.
Pavyzdys: Sujunkite 1000 dokumentų į vieną masinį užklausą, užuot siuntę 1000 individualių indeksavimo užklausų. Tai gali žymiai pagerinti našumą.
3. Atnaujinimo intervalas
Atnaujinimo intervalas kontroliuoja, kaip dažnai „Elasticsearch“ daro naujai indeksuotus dokumentus ieškomais. Atnaujinimo intervalo mažinimas didina indeksavimo greitį, bet taip pat gali padidinti paieškos vėlavimą. Atnaujinimo intervalą reguliuokite pagal jūsų programos specifinius reikalavimus. Didelio įsisavinimo scenarijuose, kur greitas ieškomumas nėra kritinis, apsvarstykite galimybę nustatyti atnaujinimo intervalą į -1
, kad išjungtumėte automatinius atnaujinimus ir, jei reikia, atliktumėte rankinius atnaujinimus.
4. Indeksavimo buferio dydis
„Elasticsearch“ naudoja buferį indeksavimo duomenims saugoti atmintyje, prieš juos perkeliant į diską. Indeksavimo buferio dydžio didinimas gali pagerinti indeksavimo našumą, bet taip pat padidina atminties naudojimą. Indeksavimo buferio dydį reguliuokite pagal turimą atmintį ir indeksavimo pralaidumo reikalavimus.
5. „Translog“ patvarumas
„Translog“ yra operacijų žurnalas, suteikiantis patvarumą indeksavimo operacijoms. Pagal nutylėjimą „Elasticsearch“ po kiekvienos operacijos atlieka „translog“ sinchronizavimą, kuris garantuoja, kad duomenys nebus prarasti gedimo atveju. Tačiau tai gali paveikti indeksavimo našumą. Apsvarstykite galimybę nustatyti „translog“ patvarumą į async
, kad pagerintumėte indeksavimo greitį, bet su šiek tiek sumažintu duomenų patvarumu. Atkreipkite dėmesį, kad duomenų praradimas vis tiek yra mažai tikėtinas, bet galimas ekstremaliose gedimo situacijose.
Užklausų optimizavimas
Užklausų optimizavimas yra labai svarbus siekiant sumažinti paieškos vėlavimą ir pagerinti vartotojo patirtį. Prastai optimizuota užklausa gali paralyžiuoti visą jūsų „Elasticsearch“ klasterį. Norint pasiekti optimalų našumą, svarbu suprasti, kaip „Elasticsearch“ vykdo užklausas, ir naudoti tinkamus užklausų tipus.
1. Užklausų tipai
„Elasticsearch“ siūlo įvairius užklausų tipus, kurių kiekvienas yra sukurtas specifiniams naudojimo atvejams. Tinkamo užklausų tipo pasirinkimas gali žymiai paveikti našumą.
- Terminų užklausos (Term Queries): Naudokite terminų užklausas tiksliam raktinių žodžių atitikimui. Jos yra greitos ir efektyvios ieškant indeksuotų terminų.
- Atitikimo užklausos (Match Queries): Naudokite atitikimo užklausas pilno teksto paieškai. Jos analizuoja užklausos eilutę ir atitinka dokumentus, kuriuose yra susijusių terminų.
- Diapazono užklausos (Range Queries): Naudokite diapazono užklausas, kad ieškotumėte reikšmių diapazone. Jos efektyvios filtruojant duomenis pagal skaitinius arba datos diapazonus.
- Loginės užklausos (Boolean Queries): Naudokite logines užklausas, kad sujungtumėte kelias užklausas naudodami loginius operatorius (AND, OR, NOT). Jos yra universalios kuriant sudėtingus paieškos kriterijus.
- Kelių atitikimų užklausos (Multi-Match Queries): Naudokite kelių atitikimų užklausas, kad ieškotumėte keliuose laukuose su skirtingais svorio faktoriais.
- Simbolių užklausos (Wildcard Queries): Naudokite simbolių užklausas, kad atitiktumėte modelius naudodami simbolius (
*
,?
). Būkite atsargūs naudodami simbolių užklausas, nes jos gali būti lėtos ir reikalauti daug išteklių. - Fuzisinės užklausos (Fuzzy Queries): Naudokite fuzisines užklausas, kad rastumėte dokumentus, panašius į paieškos terminą, net jei juose yra rašybos klaidų ar variantų.
Pavyzdys: Ieškant produktų pagal pavadinimą, naudokite match
užklausą. Filtruojant produktus pagal kainos diapazoną, naudokite range
užklausą. Sujungiant kelis paieškos kriterijus, naudokite bool
užklausą.
2. Filtravimas
Naudokite filtravimą, kad susiaurintumėte paieškos rezultatus prieš taikydami brangesnes užklausas. Filtravimas paprastai yra greitesnis nei užklausos, nes jis veikia su iš anksto indeksuotais duomenimis.
Pavyzdys: Užuot naudoję bool
užklausą su should
sąlyga tiek filtravimui, tiek paieškai, naudokite bool
užklausą su filter
sąlyga filtravimui ir must
sąlyga paieškai.
3. Talpinimas atmintyje (Caching)
„Elasticsearch“ talpina dažnai naudojamas užklausas ir filtrus, kad pagerintų našumą. Konfigūruokite talpinimo nustatymus, kad padidintumėte talpinimo pataikymo dažnį ir sumažintumėte užklausų vėlavimą.
- Mazgo užklausų talpinimas (Node Query Cache): Talpina užklausų rezultatus mazgo lygiu.
- Dalies užklausų talpinimas (Shard Request Cache): Talpina dalies lygio užklausų rezultatus.
Įjunkite talpinimą didelio skaitymo krūvio atvejais ir reguliuokite talpinimo dydį pagal turimą atmintį.
4. Paginacija
Venkite vienu metu gauti didelius dokumentų kiekius. Naudokite paginaciją, kad gautumėte rezultatus mažesniais gabalėliais. Tai sumažina „Elasticsearch“ klasterio apkrovą ir pagerina atsakymų laikus.
- Dydis ir „From“ (Size and From): Naudokite
size
irfrom
parametrus rezultatų paginacijai. - „Scroll“ API: Naudokite „scroll“ API, kad gautumėte didelius duomenų rinkinius nuosekliai.
5. Profiliavimas
Naudokite „Elasticsearch“ profiliavimo API, kad analizuotumėte savo užklausų našumą. Profiliavimo API suteikia išsamią informaciją apie tai, kaip „Elasticsearch“ vykdo užklausas, ir nustato galimus stabdymus. Naudokite šią informaciją, kad optimizuotumėte savo užklausas ir pagerintumėte našumą. Nustatykite lėtas užklausas ir analizuokite jų vykdymo planą, kad nustatytumėte tobulintinas sritis, pvz., neefektyvius filtrus ar trūkstamus indeksus.
Aparatinės įrangos svarstymai
Aparatinės įrangos infrastruktūra atlieka kritinį vaidmenį „Elasticsearch“ našumui. Tinkamų aparatinės įrangos komponentų pasirinkimas ir tinkamas jų konfigūravimas yra būtinas optimaliam našumui pasiekti.
1. CPU
„Elasticsearch“ yra intensyvus CPU, ypač indeksavimo ir užklausų apdorojimo metu. Pasirinkite CPU su aukštu laikrodžio greičiu ir keliais branduoliais, kad pasiektumėte optimalų našumą. Apsvarstykite CPU su AVX-512 instrukcijomis, kad pagerintumėte vektorinį apdorojimą.
2. Atmintis
„Elasticsearch“ labai priklauso nuo atminties talpinimui ir indeksavimui. Paskirkite pakankamai atminties „Elasticsearch“ kaupikliui (heap) ir operacinės sistemos talpyklai. Rekomenduojamas kaupiklių dydis paprastai yra 50% turimos RAM, iki ne daugiau kaip 32 GB.
3. Saugykla
Naudokite greitus saugojimo įrenginius, tokius kaip SSD, „Elasticsearch“ duomenims saugoti. SSD suteikia žymiai geresnį skaitymo ir rašymo našumą, palyginti su tradiciniais standžiaisiais diskais. Apsvarstykite NVMe SSD, kad pasiektumėte dar didesnį našumą.
4. Tinklas
Užtikrinkite didelės spartos, mažo vėlavimo tinklo ryšį tarp „Elasticsearch“ mazgų. Tai labai svarbu paskirstytoms paieškos operacijoms. Naudokite 10 Gigabitų Ethernet arba spartesnį ryšį optimaliam našumui.
Klasterio konfigūracija
Tinkamas jūsų „Elasticsearch“ klasterio konfigūravimas yra būtinas masteliui, atsparumui gedimams ir našumui.
1. Skaidymas (Sharding)
Skaidymas leidžia paskirstyti jūsų duomenis tarp kelių mazgų, gerinant mastelį ir našumą. Pasirinkite tinkamą skaidymų skaičių pagal jūsų duomenų dydį ir jūsų klasteryje esančių mazgų skaičių. Pernelyg didelis skaidymas gali lemti didesnį antkainį, o nepakankamas skaidymas gali apriboti mastelį.
Praktinė taisyklė: Siekite, kad skaidymo dydis būtų tarp 20 GB ir 40 GB.
2. Kopijos (Replicas)
Kopijos užtikrina atsparumą gedimams ir pagerina skaitymo našumą. Konfigūruokite kopijų skaičių pagal norimą perteklinumo lygį ir skaitymo pralaidumo reikalavimus. Dažna konfigūracija yra viena kopija skaidymui.
3. Mazgų vaidmenys
„Elasticsearch“ palaiko skirtingus mazgų vaidmenis, pvz., pagrindinius mazgus (master nodes), duomenų mazgus (data nodes) ir koordinuojančius mazgus (coordinating nodes). Priskirkite mazgų vaidmenis pagal kiekvieno mazgo specifines funkcijas. Atskiri pagrindiniai mazgai yra atsakingi už klasterio valdymą, o duomenų mazgai saugo ir indeksuoja duomenis. Koordinuojantys mazgai apdoroja gaunamas užklausas ir paskirsto jas tinkamiems duomenų mazgams.
4. Maršrutizavimas (Routing)
Maršrutizavimas leidžia kontroliuoti, į kuriuos skaidymus dokumentas yra indeksuojamas. Naudokite maršrutizavimą, kad optimizuotumėte užklausų našumą, užtikrindami, kad susiję dokumentai būtų saugomi tame pačiame skaidyme. Tai gali būti naudinga programoms, kurioms reikia ieškoti susijusių dokumentų.
Stebėjimas ir priežiūra
Nuolatinis stebėjimas ir priežiūra yra būtini jūsų „Elasticsearch“ klasterio sveikatai ir našumui palaikyti.
1. Stebėjimo įrankiai
Naudokite „Elasticsearch“ stebėjimo įrankius, tokius kaip „Kibana“, kad stebėtumėte savo klasterio našumą. Stebėkite pagrindinius metrikus, tokius kaip CPU naudojimas, atminties naudojimas, disko I/O ir užklausų vėlavimas. Nustatykite įspėjimus, kad būtumėte informuoti apie galimas problemas.
2. Žurnalų analizė
Analizuokite „Elasticsearch“ žurnalus, kad nustatytumėte klaidas ir našumo stabdymus. Naudokite žurnalų agregavimo įrankius, tokius kaip pats „Elasticsearch“, kad centralizuotumėte ir analizuotumėte žurnalus iš visų klasterio mazgų.
3. Indeksų valdymas
Reguliariai optimizuokite ir prižiūrėkite savo indeksus. Ištrinkite senus arba nereikalingus duomenis, kad sumažintumėte saugojimo išlaidas ir pagerintumėte užklausų našumą. Naudokite indeksų gyvavimo ciklo valdymą (ILM), kad automatizuotumėte indeksų valdymo užduotis, tokias kaip perėjimas (rollover), susitraukimas (shrink) ir ištrynimas.
4. Klasterio atnaujinimai
Atnaujinkite savo „Elasticsearch“ klasterį naujausiomis versijomis. Naujos versijos dažnai apima našumo patobulinimus, klaidų taisymus ir saugos pataisas. Kruopščiai planuokite ir vykdykite klasterio atnaujinimus, kad sumažintumėte prastovos laiką.
Pažangūs optimizavimo metodai
Be pagrindinių optimizavimo metodų, yra keletas pažangių strategijų, kurios gali toliau pagerinti „Elasticsearch“ našumą.
1. Grandinės pertraukikliai (Circuit Breakers)
„Elasticsearch“ naudoja grandinės pertraukiklius, kad išvengtų atminties trūkumo klaidų. Grandinės pertraukikliai stebi atminties naudojimą ir neleidžia vykdyti operacijų, kurios greičiausiai viršys turimą atmintį. Grandinės pertraukiklių nustatymus reguliuokite pagal turimą atmintį ir darbo krūvio ypatybes.
2. Laukų duomenų įkėlimas (Field Data Loading)
Laukų duomenys naudojami rūšiavimui ir agregavimui teksto laukuose. Laukų duomenų įkėlimas į atmintį gali reikalauti daug išteklių. Naudokite dokumentų reikšmes (doc values) vietoj laukų duomenų, kad rūšiuotumėte ir agregotumėte didelius teksto laukus. Dokumentų reikšmės saugomos diske ir yra efektyvesnės dideliems duomenų rinkiniams.
3. Adaptinis kopijų pasirinkimas (Adaptive Replica Selection)
„Elasticsearch“ gali automatiškai pasirinkti geriausią kopiją užklausai, atsižvelgiant į kopijos našumą ir prieinamumą. Įjunkite adaptinį kopijų pasirinkimą, kad pagerintumėte užklausų našumą didelio srauto scenarijuose.
4. Indekso rūšiavimas (Index Sorting)
Rūšiuokite savo indekso dokumentus pagal konkretų lauką. Tai gali pagerinti užklausų našumą, kai užklausos naudoja tą patį rūšiavimo tvarką. Indekso rūšiavimas gali būti ypač naudingas laiko pagrindu indeksams, kai užklausos dažnai filtruojamos pagal laiko diapazoną.
5. „Force Merge“
Atlikite „force merge“ jūsų indekso segmentus, kad sumažintumėte segmentų skaičių ir pagerintumėte užklausų našumą. „Force merge“ turėtų būti atliekama ne darbo valandomis, nes ji gali reikalauti daug išteklių. Apsvarstykite galimybę naudoti _forcemerge
API su max_num_segments
parametru, kad sujungtumėte segmentus.
Pasauliniai svarstymai
Diegiant „Elasticsearch“ pasaulinėje aplinkoje, reikia atsižvelgti į kelis papildomus veiksnius.
1. Geo-paskirstymas
Diekite „Elasticsearch“ klasterius keliuose geografiniuose regionuose, kad sumažintumėte vėlavimą ir pagerintumėte prieinamumą vartotojams visame pasaulyje. Naudokite klasterių tarpinę replikaciją (CCR), kad sinchronizuotumėte duomenis tarp skirtingų regionų klasterių.
2. Kalbos palaikymas
„Elasticsearch“ teikia išplėstinį kalbos palaikymą tekstiniams duomenims indeksuoti ir užklausti. Naudokite kalbos specifinius analizatorius, kad pagerintumėte paieškos tikslumą skirtingoms kalboms. Apsvarstykite ICU papildinio naudojimą pažangiam Unicode palaikymui.
3. Laiko juostos
Laiko juostas tinkamai tvarkykite indeksuodami ir užklausdami laiko pagrindu duomenis. Saugojimo datos saugokite UTC formatu ir konvertuokite jas į vartotojo vietinį laiko juostą, kai jas rodote. Naudokite date
duomenų tipą ir nurodykite tinkamą laiko juostos formatą.
4. Duomenų lokalizavimas
Kurpdami savo „Elasticsearch“ indeksus, atsižvelkite į duomenų lokalizavimo reikalavimus. Saugojimo duomenis skirtinguose indeksuose, remdamiesi vartotojo lokalizacija ar regionu. Tai gali pagerinti užklausų našumą ir sumažinti vėlavimą vartotojams skirtingose pasaulio dalyse.
Išvada
„Elasticsearch“ optimizavimas yra nuolatinis procesas, reikalaujantis nuolatinio stebėjimo, analizės ir derinimo. Laikydamiesi šiame vadove aprašytų strategijų ir geriausios praktikos, galite atskleisti visą „Elasticsearch“ potencialą ir pasiekti optimalų našumą savo paieškos programoms, nepaisant mastelio ar pasaulinio aprėpties. Nepamirškite pritaikyti savo optimizavimo pastangas prie specifinių jūsų programos reikalavimų ir nuolat stebėti bei koreguoti savo konfigūraciją, atsižvelgiant į jūsų duomenų ir naudojimo modelių evoliuciją. Efektyvus optimizavimas yra kelionė, o ne tikslas.