Reziliență îmbunătățită cu contrapresiune și control de admitere pentru Amazon OpenSearch Service | Amazon Web Services

Reziliență îmbunătățită cu contrapresiune și control de admitere pentru Amazon OpenSearch Service | Amazon Web Services

Nodul sursă: 2723961

Serviciul Amazon OpenSearch este un serviciu gestionat care simplifică securizarea, implementarea și operarea clusterelor OpenSearch la scară în AWS Cloud. Anul trecut ne-am prezentat Contrapresiune de indexare a cioburilor și controlul admiterii, care monitorizează resursele clusterului și traficul de intrare pentru a respinge selectiv solicitările care altfel ar prezenta riscuri de stabilitate, cum ar fi lipsa memoriei și ar afecta performanța clusterului din cauza conflictelor de memorie, a saturației CPU și a supraîncărcării GC și multe altele.

Acum suntem încântați să introducem Search Backpressure și controlul admiterii bazat pe CPU pentru OpenSearch Service, care îmbunătățește și mai mult reziliența clusterelor. Aceste îmbunătățiri sunt disponibile pentru toate versiunile OpenSearch 1.3 sau mai recente.

Căutare contrapresiune

Contrapresiunea împiedică un sistem să fie copleșit de muncă. Face acest lucru prin controlul ratei de trafic sau prin eliminarea sarcinii excesive pentru a preveni blocările și pierderea de date, îmbunătățirea performanței și evitarea defecțiunii totale a sistemului.

Search Backpressure este un mecanism de identificare și anulare a cererilor de căutare în timpul zborului care necesită resurse intensive atunci când un nod este sub presiune. Este eficient împotriva sarcinilor de lucru de căutare cu utilizare anormal de mare a resurselor (cum ar fi interogări complexe, interogări lente, multe accesări sau agregări grele), care altfel ar putea cauza blocări ale nodurilor și ar putea afecta sănătatea clusterului.

Search Backpressure este construit pe baza cadrului de urmărire a resurselor sarcinilor, care oferă un API ușor de utilizat pentru a monitoriza utilizarea resurselor fiecărei sarcini. Search Backpressure folosește un thread de fundal care măsoară periodic utilizarea resurselor de către nod și atribuie un scor de anulare fiecărei sarcini de căutare în timpul zborului, pe baza unor factori precum timpul CPU, alocările heap și timpul scurs. Un scor de anulare mai mare corespunde unei cereri de căutare care necesită mai multă resurse. Solicitările de căutare sunt anulate în ordinea descrescătoare a scorului de anulare pentru a recupera rapid nodurile, dar numărul de anulări este limitat pentru a evita munca irosită.

Următoarea diagramă ilustrează fluxul de lucru Search Backpressure.

Solicitările de căutare returnează un cod de stare HTTP 429 „Prea multe solicitări” la anulare. OpenSearch returnează rezultate parțiale dacă doar unele fragmente eșuează și sunt permise rezultate parțiale. Vezi următorul cod:

{ "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
}

Monitorizarea contrapresiunii de căutare

Puteți monitoriza starea detaliată a contrapresiunii de căutare folosind API-ul pentru statistici de nod:

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

De asemenea, puteți vizualiza rezumatul la nivelul întregului cluster al anulărilor folosind Amazon CloudWatch. Următoarele valori sunt acum disponibile în ES/OpenSearchService spatiu de nume:

  • SearchTaskCancelled – Numărul de anulări de nod coordonator
  • SearchShardTaskAnulat – Numărul de anulări ale nodurilor de date

Următoarea captură de ecran arată un exemplu de urmărire a acestor valori pe consola CloudWatch.

Control de admitere bazat pe CPU

Controlul admiterii este un mecanism de gatekeeping care limitează în mod proactiv numărul de solicitări la un nod pe baza capacității sale actuale, atât pentru creșteri organice, cât și pentru vârfuri de trafic.

În plus față de presiunea memoriei JVM și pragurile de dimensiunea cererii, acum monitorizează și utilizarea CPU medie a fiecărui nod pentru a respinge _search și _bulk cereri. Împiedică nodurile să fie copleșite cu prea multe solicitări care duc la puncte fierbinți, probleme de performanță, expirări ale solicitărilor și alte erori în cascadă. Solicitările excesive returnează un cod de stare HTTP 429 „Prea multe solicitări” la respingere.

Gestionarea erorilor HTTP 429

Veți primi erori HTTP 429 dacă trimiteți trafic excesiv către un nod. Indică fie resurse insuficiente ale clusterului, solicitări de căutare intensive în resurse, fie o creștere neintenționată a volumului de lucru.

Search Backpressure oferă motivul respingerii, ceea ce poate ajuta la ajustarea fină a cererilor de căutare care necesită multe resurse. Pentru creșteri de trafic, vă recomandăm reîncercări la nivel de client cu backoff exponențial și jitter.

De asemenea, puteți urma aceste ghiduri de depanare pentru a depana respingerile excesive:

Concluzie

Search Backpressure este un mecanism reactiv pentru a elimina încărcătura excesivă, în timp ce controlul admiterii este un mecanism proactiv pentru a limita numărul de solicitări la un nod peste capacitatea sa. Ambele lucrează în tandem pentru a îmbunătăți rezistența generală a unui cluster OpenSearch.

Search Backpressure este disponibilă în OpenSearch, și căutăm mereu contributii externe. Vă puteți referi la RFC pentru a începe.


Despre autori

Ketan Verma este un SDE senior care lucrează pe Amazon OpenSearch Service. Este pasionat de construirea de sisteme distribuite la scară largă, de îmbunătățirea performanței și de simplificarea ideilor complexe cu abstracții simple. În afara serviciului, îi place să citească și să-și îmbunătățească abilitățile de barista de acasă.

Suresh NS este un SDE senior care lucrează pe Amazon OpenSearch Service. Este pasionat de rezolvarea problemelor în sistemele distribuite la scară largă.

Pritkumar Ladani este un SDE-2 care lucrează pe Amazon OpenSearch Service. Îi place să contribuie la dezvoltarea de software open source și este pasionat de sistemele distribuite. Este un jucător amator de badminton și îi place drumețiile.

Bukhtawar Khan este inginer principal care lucrează pe Amazon OpenSearch Service. Este interesat de construirea de sisteme distribuite și autonome. El este întreținător și un colaborator activ la OpenSearch.

Timestamp-ul:

Mai mult de la AWS Big Data