Elastisk søk

Elasticsearch beste praksis og økende ytelse

Elasticsearch beste praksis og økende ytelse
I dette innlegget vil vi prøve å samle beste praksis og også hvilke ting du må unngå når du arbeider med Elasticsearch og mater data inn i det. På denne måten vil vi vite hva vi trenger å ta vare på før vi til og med begynner å jobbe med denne utmerkede søkemotoren.

Best Practices for elastisk søk

Vi vil begynne å jobbe med Best Practices for å følge med Elasticsearch og hvilke problemer det kan skape når vi unngår disse punktene. La oss komme i gang.

Definer alltid ES Mappings

En ting ES sikkert kan gjøre er å jobbe uten kartlegginger. Så når du begynner å mate JSON-data til ES-indeksen din, vil den gjentas over datafeltene og lage en passende kartlegging. Dette virker direkte og enkelt ettersom ES velger selve datatypen. Basert på dataene dine, trenger du kanskje et felt for å være av spesifikk datatype.

Anta for eksempel at du indekserer følgende dokument:


"id": 1,
"title": "Installer ElasticSearch på Ubuntu",
"link": "https: // linuxhint.no / install-elasticsearch-ubuntu / ",
"date": "2018-03-25"

På denne måten vil Elasticsearch merke "dato" -feltet som "dato" -type. Men når du indekserer følgende dokument:


"id": 1,
"title": "ES Best Practices and Performance",
"date": "Venter"

Denne gangen er datofeltets type endret, og ES kaster en feil og tillater ikke at dokumentet blir indeksert. For å gjøre ting enkelt kan du indeksere noen få dokumenter, se hvilke felt som indekseres av ES og ta kartleggingen fra denne URL:

GET / index_name / doc_type / _mapping

På denne måten trenger du ikke å konstruere hele kartleggingen også.

Produksjonsflagg

Standard klyngenavnet som ES starter, heter elasticsearch. Når du har mange noder i klyngen din, er det lurt å holde navngivningsflaggene så konsistente som mulig, som:

klynge.navn: app_es_production
node.navn: app_es_node_001

Bortsett fra dette, har gjenopprettingsinnstillinger for noder også mye. Anta at noen av nodene i en klyngestart på grunn av en feil, og at noen noder starter på nytt litt etter andre noder. For å holde dataene konsistente mellom alle disse nodene, må vi kjøre konsistensprogram som vil holde alle klynger i en konsistent tilstand.

inngangsport.gjenopprette_noder: 10

Det er også nyttig når du på forhånd informerer klyngen om hvor mange noder som vil være til stede i klyngen, og hvor mye gjenopprettingstid disse trenger:

inngangsport.forventet_noder: 20
inngangsport.gjenopprette_tid: 7m

Med riktig konfigurasjon kan gjenoppretting som ville tatt timer ta så lite som et minutt og kan spare mye penger for ethvert selskap.

Kapasitetsforsyning

Det er viktig å vite hvor mye plass dataene dine tar og hastigheten de strømmer inn i Elasticsearch, fordi det vil avgjøre hvor mye RAM du trenger på hver av klyngenodene og masternoden også.

Selvfølgelig er det ingen spesifikke retningslinjer for å oppnå tallene som trengs, men vi kan ta noen skritt som gir oss en god ide. En av trinnene vil være å simulere brukssaken. Lag en ES-klynge og mat den med nesten samme datahastighet som du forventer med produksjonsoppsettet ditt. Konseptet av begynn stort og skaler ned kan også hjelpe deg å være konsekvent om hvor mye plass som trengs.

Store maler

Når du definerer indekserte store maler, vil du alltid møte problemer knyttet til synkronisering av malen på tvers av forskjellige noder i klyngen. Vær alltid oppmerksom på at malen må defineres på nytt når det skjer en endring av datamodellen. Det er en mye bedre idé å holde malene like dynamiske. Dynamiske maler oppdaterer automatisk feltkartlegginger basert på kartleggingen vi definerte tidligere og de nye feltene. Merk at det ikke er noen erstatning for å holde malene så små som mulig.

2Bruke mlockall på Ubuntu-servere

Linux bruker bytteprosessen når den trenger minne for nye sider. Bytte gjør ting tregt siden disker er tregere enn minnet. De mlockall egenskap i ES-konfigurasjon forteller ES å ikke bytte sider ut av minnet selv om de ikke er nødvendige for nå. Denne egenskapen kan angis i YAML-filen:

Støvelhempe.mlockall: sant

I ES v5.x + versjoner, denne egenskapen har endret seg til:

Støvelhempe.memory_lock: true

Hvis du bruker denne egenskapen, er det bare å sørge for at du gir ES stort nok hukommelsesminne ved hjelp av -DXmx alternativ eller ES_HEAP_SIZE.

Minimer kartoppdateringer

Ytelsen til en klynge påvirkes litt når du lager kartoppdateringsforespørsler på ES-klyngen din. Hvis du ikke kan kontrollere dette og fremdeles vil gjøre oppdateringer til kartlegginger, kan du bruke en egenskap i ES YAML-konfigurasjonsfilen:

indekser.klynge.send_refresh_mapping: false

Når modelloppdateringsforespørselen er i ventende kø for masternoden og den sender data med den gamle kartleggingen til nodene, må den også sende en oppdateringsforespørsel senere til alle nodene. Dette kan gjøre ting tregt. Når vi setter den ovennevnte egenskapen til false, gir dette mening at det er gjort en oppdatering av kartleggingen, og den vil ikke sende oppdateringsforespørselen til nodene. Merk at dette bare er nyttig hvis du gjør mange endringer i kartleggingen regelmessig.

Optimalisert trådbasseng

ES-noder har mange trådbassenger for å forbedre hvordan tråder håndteres i en node. Men det er begrensninger på hvor mye data hver tråd kan ta vare på. For å holde rede på denne verdien kan vi bruke en ES-egenskap:

trådbasseng.bulk.køstørrelse: 2000

Dette informerer ES om antall forespørsler i en skjær som kan stå i kø for kjøring i noden når det ikke er noen tråd tilgjengelig for å behandle forespørselen. Hvis antall oppgaver går høyere enn denne verdien, får du en RemoteTransportException. Jo høyere denne verdien er, desto større mengde bunkeplass vil det være behov for på nodemaskinen din, og JVM-bunken blir også fortært. Du bør også holde koden klar i tilfelle dette unntaket blir kastet.

Konklusjon

I denne leksjonen så vi på hvordan vi kan forbedre Elasticsearch-ytelsen ved å unngå vanlige og ikke så vanlige feil folk gjør. Les mer Elasticsearch-artikler på LinuxHint.

Kamp for Wesnoth 1.1. 3.6 Utvikling utgitt
Kamp for Wesnoth 1.1. 3.6 utgitt i forrige måned, er den sjette utgivelsen i 1.1. 3.x-serien, og den leverer en rekke forbedringer, spesielt til bruke...
Slik installerer du League Of Legends på Ubuntu 14.04
Hvis du er fan av League of Legends, er dette en mulighet for deg å prøvekjør League of Legends. Merk at LOL støttes på PlayOnLinux hvis du er en linu...
Installer det siste OpenRA-strategispillet på Ubuntu Linux
OpenRA er en Libre / Free Real Time Strategy-spillmotor som gjenskaper de tidlige Westwood-spillene som den klassiske Command & Conquer: Red Alert. Di...