Förbättrad motståndskraft med mottryck och tillträdeskontroll för Amazon OpenSearch Service | Amazon webbtjänster

Förbättrad motståndskraft med mottryck och tillträdeskontroll för Amazon OpenSearch Service | Amazon webbtjänster

Källnod: 2723961

Amazon OpenSearch Service är en hanterad tjänst som gör det enkelt att säkra, distribuera och driva OpenSearch-kluster i stor skala i AWS-molnet. Förra året introducerade vi Shard Indexing Mottryck och tillträdeskontroll, som övervakar klusterresurser och inkommande trafik för att selektivt avvisa förfrågningar som annars skulle medföra stabilitetsrisker som minnesbrist och påverka klusterprestanda på grund av minneskonflikter, CPU-mättnad och GC-overhead med mera.

Vi är nu glada över att introducera Search Backpressure och CPU-baserad tillträdeskontroll för OpenSearch Service, vilket ytterligare förbättrar klustrens motståndskraft. Dessa förbättringar är tillgängliga för alla OpenSearch versioner 1.3 eller senare.

Sök mottryck

Mottryck förhindrar att ett system överbelastas av arbete. Det gör det genom att kontrollera trafikhastigheten eller genom att avskaffa överdriven belastning för att förhindra krascher och dataförlust, förbättra prestandan och undvika totala fel i systemet.

Sökmottryck är en mekanism för att identifiera och avbryta resurskrävande sökförfrågningar under flygning när en nod är under tvång. Det är effektivt mot sökarbetsbelastningar med onormalt hög resursanvändning (som komplexa frågor, långsamma frågor, många träffar eller tunga sammanställningar), som annars kan orsaka nodkrascher och påverka klustrets hälsa.

Search Backpressure är byggt ovanpå ramverket för uppgiftsresursspårning, som tillhandahåller ett lättanvänt API för att övervaka varje uppgifts resursanvändning. Search Backpressure använder en bakgrundstråd som regelbundet mäter nodens resursanvändning och tilldelar en avbrytningspoäng till varje sökuppgift under flygning baserat på faktorer som CPU-tid, heap-tilldelningar och förfluten tid. En högre avbokningspoäng motsvarar en mer resurskrävande sökförfrågan. Sökförfrågningar avbryts i fallande ordning efter avbokningspoäng för att snabbt återställa noder, men antalet avbokningar är hastighetsbegränsat för att undvika slösaktigt arbete.

Följande diagram illustrerar arbetsflödet Sök mottryck.

Sökförfrågningar returnerar en HTTP 429 "Too Many Requests"-statuskod vid avbokning. OpenSearch returnerar partiella resultat om bara vissa skärvor misslyckas och partiella resultat tillåts. Se följande kod:

{ "error": { "root_cause": [ { "type": "task_cancelled_exception", "reason": "cancelled task with reason: heap usage exceeded [403mb >= 77.6mb], elapsed time exceeded [1.7m >= 45s]" } ], "type": "search_phase_execution_exception", "reason": "SearchTask was cancelled", "phase": "fetch", "grouped": true, "failed_shards": [ { "shard": 0, "index": "nyc_taxis", "node": "9gB3PDp6Speu61KvOheDXA", "reason": { "type": "task_cancelled_exception", "reason": "cancelled task with reason: heap usage exceeded [403mb >= 77.6mb], elapsed time exceeded [1.7m >= 45s]" } } ], "caused_by": { "type": "task_cancelled_exception", "reason": "cancelled task with reason: heap usage exceeded [403mb >= 77.6mb], elapsed time exceeded [1.7m >= 45s]" } }, "status": 429
}

Övervakning av sökmottryck

Du kan övervaka det detaljerade sökmottryckstillståndet med hjälp av nodstatistik-API:

curl -X GET "https://{endpoint}/_nodes/stats/search_backpressure"

Du kan också se den klusteromfattande sammanfattningen av avbokningar med amazoncloudwatch. Följande mätvärden är nu tillgängliga i ES/OpenSearchService namnområde:

  • Search TaskCancelled – Antalet avbokningar av koordinatornod
  • SearchShardTaskCancelled – Antalet avbokningar av datanod

Följande skärmdump visar ett exempel på att spåra dessa mätvärden på CloudWatch-konsolen.

CPU-baserad tillträdeskontroll

Admission control är en gatekeeping-mekanism som proaktivt begränsar antalet förfrågningar till en nod baserat på dess nuvarande kapacitet, både för organiska ökningar och toppar i trafiken.

Förutom JVM-minnestrycket och tröskelvärdena för begäransstorlek, övervakar den nu också varje nods rullande genomsnittliga CPU-användning för att avvisa inkommande _search och _bulk förfrågningar. Det förhindrar att noder överväldigas med för många förfrågningar som leder till hot spots, prestandaproblem, förfrågningar timeouts och andra kaskadfel. Överdrivna förfrågningar returnerar en HTTP 429 "Too Many Requests"-statuskod vid avslag.

Hanterar HTTP 429-fel

Du kommer att få HTTP 429-fel om du skickar överdriven trafik till en nod. Det indikerar antingen otillräckliga klusterresurser, resurskrävande sökförfrågningar eller en oavsiktlig ökning av arbetsbelastningen.

Sökmottryck ger anledningen till avslag, vilket kan hjälpa till att finjustera resurskrävande sökförfrågningar. För trafiktoppar rekommenderar vi omförsök på klientsidan med exponentiell backoff och jitter.

Du kan också följa dessa felsökningsguider för att felsöka överdrivna avslag:

Slutsats

Sökmottryck är en reaktiv mekanism för att avskaffa överbelastning, medan tillträdeskontroll är en proaktiv mekanism för att begränsa antalet förfrågningar till en nod utöver dess kapacitet. Båda arbetar tillsammans för att förbättra den övergripande motståndskraften hos ett OpenSearch-kluster.

Sök mottryck är tillgängligt i Opensearch, och vi letar alltid efter externa bidrag. Du kan hänvisa till RFC att komma igång.


Om författarna

Ketan Verma är en senior SDE som arbetar med Amazon OpenSearch Service. Han brinner för att bygga storskaliga distribuerade system, förbättra prestanda och förenkla komplexa idéer med enkla abstraktioner. Utanför jobbet gillar han att läsa och förbättra sina färdigheter som hemmabarista.

Suresh NS är en senior SDE som arbetar med Amazon OpenSearch Service. Han brinner för att lösa problem i storskaliga distribuerade system.

Pritkumar Ladani är en SDE-2 som fungerar på Amazon OpenSearch Service. Han gillar att bidra till mjukvaruutveckling med öppen källkod och brinner för distribuerade system. Han är en amatörbadmintonspelare och tycker om att vandra.

Bukhtawar Khan är en huvudingenjör som arbetar på Amazon OpenSearch Service. Han är intresserad av att bygga distribuerade och autonoma system. Han är en underhållare och en aktiv bidragsgivare till OpenSearch.

Tidsstämpel:

Mer från AWS Big Data