Elastisk sökning

Elasticsearch bästa metoder och ökad prestanda

Elasticsearch bästa metoder och ökad prestanda
I det här inlägget kommer vi att försöka samla in bästa praxis och även vilka saker som ska undvikas när vi arbetar med Elasticsearch och matar in data i det. På så sätt vet vi vad vi behöver ta hand om innan vi ens börjar arbeta med den här utmärkta sökmotorn.

Best Practices för elasticsearch

Vi kommer att börja arbeta med Best Practices för att följa med Elasticsearch och vilka problem det kan skapa när vi undviker dessa punkter. Låt oss börja.

Definiera alltid ES Mappings

En sak som ES säkert kan göra är att arbeta utan mappningar. Så när du börjar mata JSON-data till ditt ES-index kommer det att iterera över datafälten och skapa en lämplig kartläggning. Detta verkar direkt och enkelt eftersom ES väljer själva datatypen. Baserat på dina data kan du behöva ett fält för att vara av specifik datatyp.

Antag till exempel att du indexerar följande dokument:


"id": 1,
"title": "Installera ElasticSearch på Ubuntu",
"länk": "https: // linuxhint.com / install-elasticsearch-ubuntu / ",
"date": "25-03-2018"

På detta sätt markerar Elasticsearch fältet “datum” som “datum” -typ. Men när du indexerar följande dokument:


"id": 1,
"title": "ES Best Practices and Performance",
"date": "Väntar"

Den här gången har typen av datumfält ändrats och ES kommer att kasta ett fel och tillåter inte att ditt dokument indexeras. För att göra det enkelt kan du indexera några dokument, se vilka fält som indexeras av ES och ta kartan från den här URL: en:

GET / index_name / doc_type / _mapping

På så sätt behöver du inte konstruera hela kartläggningen också.

Produktionsflaggor

Standardklusternamnet som ES startar kallas elasticsearch. När du har många noder i ditt kluster är det en bra idé att hålla namngivningsflaggorna så konsekventa som möjligt, som:

klunga.namn: app_es_production
nod.namn: app_es_node_001

Bortsett från detta spelar återställningsinställningar för noder också mycket roll. Anta att några av noderna i en klusterstart på grund av ett fel och vissa noder startar om lite efter andra noder. För att hålla data konsistenta mellan alla dessa noder måste vi köra konsekvensprogram som håller alla kluster i ett konsekvent tillstånd.

inkörsport.recover_after_nodes: 10

Det är också användbart när du berättar klustret i förväg hur många noder som kommer att finnas i klustret och hur mycket återställningstid dessa behöver:

inkörsport.förväntade_noder: 20
inkörsport.återhämta sig_ efter_tid: 7m

Med rätt konfiguration kan en återhämtning som skulle ta timmar ta så lite som en minut och kan spara mycket pengar till alla företag.

Kapacitetsförsörjning

Det är viktigt att veta hur mycket utrymme dina data kommer att ta och med vilken hastighet de flyter till Elasticsearch, eftersom det kommer att avgöra hur mycket RAM du behöver på varje nod i klustret och masternoden också.

Naturligtvis finns det inga specifika riktlinjer för att uppnå de siffror som behövs, men vi kan ta några steg som ger oss en bra idé. Ett av stegen blir att simulera användningsfallet. Skapa ett ES-kluster och mata det med nästan samma datahastighet som du förväntar dig med din produktionsinställning. Konceptet av börja stort och skala ner kan också hjälpa dig att vara konsekvent om hur mycket utrymme som behövs.

Stora mallar

När du definierar indexerade stora mallar kommer du alltid att möta problem relaterade till att synkronisera mallen över dina olika noder i klustret. Observera alltid att mallen måste omdefinieras när en ändring av datamodellen inträffar. Det är en mycket bättre idé att håll mallarna lika dynamiska. Dynamiska mallar uppdaterar automatiskt fältmappningar baserat på de mappningar vi definierade tidigare och de nya fälten. Observera att det inte finns någon ersättning för att hålla mallarna så små som möjligt.

2Använda mlockall på Ubuntu-servrar

Linux använder swapp-processen när det behöver minne för nya sidor. Byte gör saker långsamma eftersom skivor är långsammare än minnet. De mlockall egenskap i ES-konfiguration ber ES att inte byta sidor ur minnet även om de inte krävs för tillfället. Den här egenskapen kan ställas in i YAML-filen:

bootstrap.mlockall: sant

I ES v5.x + versioner, den här egenskapen har ändrats till:

bootstrap.memory_lock: true

Om du använder den här egenskapen, se bara till att du förser ES med tillräckligt stort högminne med hjälp av -DXmx alternativ eller ES_HEAP_SIZE.

Minimera kartuppdateringar

Prestanda för ett kluster påverkas något när du gör mappuppdateringsförfrågningar i ditt ES-kluster. Om du inte kan kontrollera detta och ändå vill göra uppdateringar till mappningar kan du använda en egenskap i ES YAML-konfigurationsfilen:

index.klunga.send_refresh_mapping: falskt

När modelluppdateringsbegäran står i väntande kö för masternoden och den skickar data med den gamla mappningen till noder, måste den också skicka en uppdateringsbegäran senare till alla noder. Detta kan göra saker långsamma. När vi ställer in egenskapen ovan till falsk, är det här meningsfullt att en uppdatering har gjorts av kartläggningen och att den inte skickar uppdateringsförfrågan till noderna. Observera att detta bara är användbart om du gör många ändringar i dina mappningar regelbundet.

Optimerad trådpool

ES-noder har många trådpooler för att förbättra hur trådar hanteras i en nod. Men det finns begränsningar för hur mycket data varje tråd kan ta hand om. För att hålla reda på detta värde kan vi använda en ES-egenskap:

trådpool.bulk.köstorlek: 2000

Detta informerar ES om antalet förfrågningar i en skärva som kan köas för körning i noden när det inte finns någon tråd tillgänglig för att behandla begäran. Om antalet uppgifter går högre än detta värde får du en RemoteTransportException. Ju högre detta värde, desto högre mängd heap-utrymme kommer att behövas på din nodmaskin och JVM-heapen kommer också att konsumeras. Du bör också hålla din kod klar om detta undantag kastas.

Slutsats

I den här lektionen tittade vi på hur vi kan förbättra Elasticsearch-prestanda genom att undvika vanliga och inte så vanliga misstag som människor gör. Läs mer Elasticsearch-artiklar på LinuxHint.

Hur man laddar ner och spelar Sid Meier's Civilization VI på Linux
Introduktion till spelet Civilization 6 är ett modernt intag av det klassiska konceptet som introducerades i serien Age of Empires-spel. Idén var gans...
Hur man installerar och spelar Doom på Linux
Introduktion till Doom Doom-serien har sitt ursprung på 90-talet efter att den ursprungliga Doom släpptes. Det blev en omedelbar hit och från den tide...
Vulkan för Linux-användare
Med varje ny generation grafikkort ser vi spelutvecklare driva gränserna för grafisk trohet och komma ett steg närmare fotorealism. Men trots all kred...