Elasticsearch paraugprakse
Mēs sāksim strādāt ar paraugpraksi, kas jāievēro, izmantojot Elasticsearch, un kādas problēmas tas var radīt, izvairoties no šiem punktiem. Sāksim.
Vienmēr definējiet ES kartējumus
Viena lieta, ko ES noteikti var darīt, ir strādāt bez kartēšanas. Tātad, kad jūs sākat barot JSON datus savā ES indeksā, tas atkārtosies datu laukos un izveidos piemērotu kartēšanu. Tas šķiet tieši un viegli, jo ES pati izvēlas datu tipu. Pamatojoties uz jūsu datiem, jums var būt nepieciešams lauks, kas ir noteikta veida.
Piemēram, pieņemsim, ka indeksējat šo dokumentu:
"id": 1,
"title": "Instalējiet ElasticSearch Ubuntu",
"link": "https: // linuxhint.com / install-elasticsearch-ubuntu / ",
"datums": "2018-03-25"
Tādā veidā Elasticsearch atzīmēs lauku “datums” kā “datuma” veidu. Bet, indeksējot šo dokumentu:
"id": 1,
"title": "ES paraugprakse un veiktspēja",
"date": "Gaida"
Šoreiz datuma lauka tips ir mainīts, un ES radīs kļūdu un neļaus indeksēt jūsu dokumentu. Lai viss būtu vieglāk, varat indeksēt dažus dokumentus, uzzināt, kādus laukus indeksē ES, un paņemt kartēšanu no šī URL:
GET / index_name / doc_type / _mappingTādā veidā jums nebūs jākonstruē arī pilnīga kartēšana.
Ražošanas karogi
Tiek izsaukts noklusējuma klastera nosaukums, kuru sāk ES elasticsearch. Ja klasterī ir daudz mezglu, ieteicams saglabāt pēc iespējas konsekventākus nosaukšanas karodziņus, piemēram:
kopa.nosaukums: app_es_productionmezgls.nosaukums: app_es_node_001
Bez tam, arī mezglu atkopšanas iestatījumiem ir liela nozīme. Pieņemsim, ka daži klastera mezgli tiek restartēti kļūmes dēļ, un daži mezgli tiek restartēti nedaudz pēc citiem mezgliem. Lai saglabātu datu konsekvenci starp visiem šiem mezgliem, mums būs jāpalaiž konsekvences programma, kas visus klasterus uzturēs konsekventā stāvoklī.
vārti.atgūt_pēc_mezglus: 10Noderīgi ir arī tas, ja klasterim iepriekš pasakāt, cik mezglu būs klasterī un cik daudz atkopšanas laika būs nepieciešams:
vārti.paredzamie_mezgli: 20vārti.atkopšanas_pēc_laiks: 7m
Izmantojot pareizu konfigurāciju, atkopšana, kas prasītu stundas, var aizņemt tikai minūti un var ietaupīt daudz naudas jebkuram uzņēmumam.
Jaudas nodrošināšana
Ir svarīgi zināt, cik daudz vietas aizņems jūsu dati, un ātrumu, kādā tie ieplūst Elasticsearch, jo tas izlems, cik daudz RAM jums būs nepieciešams katrā klastera mezglā un galvenajā mezglā.
Protams, nav īpašu vadlīniju nepieciešamo skaitļu sasniegšanai, taču mēs varam veikt dažus soļus, kas mums sniedz labu ideju. Viens no soļiem būs simulēt lietošanas gadījums. Izveidojiet ES kopu un ievadiet to ar gandrīz tādu pašu datu ātrumu, kā jūs varētu sagaidīt, veicot ražošanas iestatījumus. Jēdziens sākt lielu un samazināt var arī palīdzēt jums konsekventi noteikt, cik daudz vietas ir nepieciešams.
Lielas veidnes
Definējot indeksētas lielas veidnes, vienmēr saskaras ar problēmām, kas saistītas ar veidnes sinhronizēšanu dažādos klastera mezglos. Vienmēr ņemiet vērā, ka veidne būs jāpārdefinē ikreiz, kad notiek datu modeļa maiņa. Tā ir daudz labāka ideja saglabājiet veidnes kā dinamiskas. Dinamiskās veidnes automātiski atjaunina lauku kartējumus, pamatojoties uz iepriekš definētajiem kartējumiem un jaunajiem laukiem. Ņemiet vērā, ka nevar aizstāt veidnes pēc iespējas mazākas.
2Milockall izmantošana Ubuntu serveros
Ja Linux prasa atmiņu jaunām lapām, Linux izmanto maiņas procesu. Mainīšana padara lietas lēnākas, jo diski ir lēnāki nekā atmiņa. The mlockall rekvizīts ES konfigurācijā liek ES nemainīt savas lapas no atmiņas, pat ja tās pašlaik nav vajadzīgas. Šo rekvizītu var iestatīt YAML failā:
bootstrap.mlockall: taisnībaES v5.x + versijas, šis rekvizīts ir mainīts uz:
bootstrap.memory_lock: taisnībaJa izmantojat šo īpašumu, vienkārši pārliecinieties, vai esat nodrošinājis ES pietiekami lielu kaudzes atmiņu, izmantojot -DXmx opcija vai ES_HEAP_SIZE.
Samaziniet kartēšanas atjauninājumus
Klastera veiktspēja tiek nedaudz ietekmēta ikreiz, kad savā ES klasterī veicat kartēšanas atjaunināšanas pieprasījumus. Ja jūs to nevarat kontrolēt un tomēr vēlaties atjaunināt kartējumus, varat izmantot rekvizītu ES YAML konfigurācijas failā:
indeksi.kopa.send_refresh_mapping: falseKad modeļa atjaunināšanas pieprasījums ir galvenā mezgla gaidīšanas rindā un tas nosūta mezgliem datus ar veco kartējumu, vēlāk visiem mezgliem ir jānosūta atjaunināšanas pieprasījums. Tas var palēnināt lietas. Kad mēs iestatām iepriekš minēto rekvizītu uz false, tas nozīmē, ka kartēšana ir atjaunināta, un tas nesūtīs atjaunināšanas pieprasījumu mezgliem. Ņemiet vērā, ka tas ir noderīgi tikai tad, ja regulāri veicat daudz izmaiņu kartējumos.
Optimizēts Thread-pool
ES mezgliem ir daudz pavedienu kopu, lai uzlabotu pavedienu pārvaldību mezglā. Bet ir ierobežojumi attiecībā uz to, cik daudz datu var rūpēties katrs pavediens. Lai izsekotu šai vērtībai, mēs varam izmantot ES rekvizītu:
threadpool.beztaras.queue_size: 2000Tas informē ES par to gabalu pieprasījumu skaitu, kurus var rindā izpildīt mezglā, ja nav pieejams pavediens pieprasījuma apstrādei. Ja uzdevumu skaits pārsniedz šo vērtību, jūs saņemsit RemoteTransportException. Jo augstāka šī vērtība, jo lielāks kaudzes vietas daudzums būs nepieciešams jūsu mezglu mašīnā, un tiks iztērēta arī JVM kaudze. Jums vajadzētu arī saglabāt savu kodu gatavu, ja tiek izmests šis izņēmums.
Secinājums
Šajā nodarbībā mēs apskatījām, kā mēs varam uzlabot Elasticsearch veiktspēju, izvairoties no parastām un ne tik bieži pieļautām kļūdām. Lasiet vairāk rakstu Elasticsearch par LinuxHint.