גמישות משופרת עם לחץ גב ובקרת כניסה עבור Amazon OpenSearch Service | שירותי האינטרנט של אמזון

גמישות משופרת עם לחץ גב ובקרת כניסה עבור Amazon OpenSearch Service | שירותי האינטרנט של אמזון

צומת המקור: 2723961

שירות חיפוש פתוח של אמזון הוא שירות מנוהל המקל על אבטחה, פריסה ותפעול של אשכולות OpenSearch בקנה מידה גדול בענן AWS. בשנה שעברה, הצגנו לחץ אחורי לאינדקס שברים ו בקרת קבלה, שעוקבת אחר משאבי אשכולות ותעבורה נכנסת כדי לדחות באופן סלקטיבי בקשות שאחרת היו מהוות סיכוני יציבות כמו חוסר בזיכרון ולהשפיע על ביצועי האשכול עקב מחלוקות זיכרון, רוויה של CPU ו-GC תקורה ועוד.

כעת אנו נרגשים להציג את Search Backpressure ובקרת כניסה מבוססת CPU עבור OpenSearch Service, אשר משפרת עוד יותר את הגמישות של אשכולות. שיפורים אלה זמינים עבור כל OpenSearch גרסאות 1.3 ומעלה.

חיפוש לחץ אחורי

לחץ גב מונע ממערכת להיות מוצף בעבודה. היא עושה זאת על ידי שליטה בקצב התעבורה או על ידי הוצאת עומס מופרז על מנת למנוע קריסות ואובדן נתונים, לשפר את הביצועים ולהימנע מכשל מוחלט של המערכת.

חיפוש אחורי הוא מנגנון לזהות ולבטל בקשות חיפוש עתירות משאבים בטיסה כאשר צומת נמצא תחת כפייה. זה יעיל נגד עומסי עבודה בחיפוש עם שימוש חריג במשאבים (כגון שאילתות מורכבות, שאילתות איטיות, התאמות רבות או צבירות כבדות), שאחרת עלולות לגרום לקריסות צמתים ולהשפיע על בריאות האשכול.

Search Backpressure בנוי על מסגרת מעקב משאבי המשימות, המספקת API קל לשימוש לניטור השימוש במשאבים של כל משימה. Search Backpressure משתמש בשרשור רקע שמודד מעת לעת את השימוש במשאבים של הצומת ומקצה ציון ביטול לכל משימת חיפוש בטיסה בהתבסס על גורמים כמו זמן CPU, הקצאות ערימה וזמן שחלף. ציון ביטול גבוה יותר מתאים לבקשת חיפוש עתירת משאבים יותר. בקשות החיפוש מבוטלות בסדר יורד של ציון הביטול שלהן כדי לשחזר צמתים במהירות, אך מספר הביטולים מוגבל בקצב כדי למנוע עבודה בזבזנית.

התרשים הבא ממחיש את זרימת העבודה של Search Backpressure.

בקשות חיפוש מחזירות קוד סטטוס HTTP 429 "Too Many Requests" עם ביטול. OpenSearch מחזיר תוצאות חלקיות אם רק חלק מהרססים נכשלים ותוצאות חלקיות מותרות. ראה את הקוד הבא:

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

ניטור לחץ אחורי בחיפוש

אתה יכול לעקוב אחר מצב לחץ הגב המפורט בחיפוש באמצעות ממשק ה-API של הצומת הנתונים:

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

אתה יכול גם להציג את סיכום האשכול רחב של ביטולים באמצעות אמזון CloudWatch. המדדים הבאים זמינים כעת ב- ES/OpenSearchService מרחב שמות:

  • SearchTask בוטלה – מספר ביטולי צומת הרכז
  • SearchShardTask בוטלה – מספר ביטולי צומת הנתונים

צילום המסך הבא מציג דוגמה למעקב אחר מדדים אלו בקונסולת CloudWatch.

בקרת כניסה מבוססת מעבד

בקרת כניסה היא מנגנון שמירת סף שמגביל באופן יזום את מספר הבקשות לצומת בהתבסס על הקיבולת הנוכחית שלו, הן עבור עליות אורגניות והן עליות בתנועה.

בנוסף ללחץ הזיכרון של JVM ולספי גודל הבקשות, הוא מנטר כעת גם את השימוש הממוצע של כל צומת במעבד כדי לדחות כניסות נכנסות _search ו _bulk בקשות. זה מונע מצמתים להיות מוצפים עם יותר מדי בקשות המובילות לנקודות חמות, בעיות ביצועים, פסקי זמן של בקשות וכשלים מדורגים אחרים. בקשות מוגזמות מחזירות קוד סטטוס HTTP 429 "יותר מדי בקשות" עם דחייה.

טיפול בשגיאות HTTP 429

תקבל שגיאות HTTP 429 אם תשלח תנועה מוגזמת לצומת. זה מצביע על משאבי אשכול לא מספיקים, בקשות חיפוש עתירות משאבים או על עלייה לא מכוונת בעומס העבודה.

Search Backpressure מספק את הסיבה לדחייה, שיכול לעזור לכוונן בקשות חיפוש עתירות משאבים. עבור עליות תעבורה, אנו ממליצים על נסיונות חוזרים בצד הלקוח עם גיבוי אקספוננציאלי וריצוד.

אתה יכול גם לעקוב אחר המדריכים הבאים לפתרון בעיות כדי לנפות באגים בדחיות מוגזמות:

סיכום

Search Backpressure הוא מנגנון תגובתי להורדת עומס מופרז, בעוד בקרת קבלה היא מנגנון יזום להגבלת מספר הבקשות לצומת מעבר לקיבולת שלו. שניהם פועלים במקביל לשיפור הגמישות הכוללת של אשכול OpenSearch.

חיפוש לחץ אחורי זמין ב Opensearch, ואנחנו תמיד מחפשים תרומות חיצוניות. אתה יכול להתייחס ל RFC כדי להתחיל בעבודה.


על המחברים

קטן ורמה הוא SDE בכיר שעובד על Amazon OpenSearch Service. הוא נלהב מבניית מערכות מבוזרות בקנה מידה גדול, שיפור ביצועים ופישוט רעיונות מורכבים באמצעות הפשטות פשוטות. מחוץ לעבודה, הוא אוהב לקרוא ולשפר את כישורי הבריסטה הביתיים שלו.

Suresh NS הוא SDE בכיר שעובד על Amazon OpenSearch Service. הוא נלהב לפתרון בעיות במערכות מבוזרות בקנה מידה גדול.

פריקומאר לדאני הוא SDE-2 שעובד על Amazon OpenSearch Service. הוא אוהב לתרום לפיתוח תוכנה בקוד פתוח, ונלהב ממערכות מבוזרות. הוא שחקן בדמינטון חובב ונהנה מטיולים.

בוכתוואר חאן הוא מהנדס ראשי שעובד בשירות ה-OpenSearch של Amazon. הוא מעוניין בבניית מערכות מבוזרות ואוטונומיות. הוא מתחזק ותורם פעיל ל-OpenSearch.

בול זמן:

עוד מ AWS Big Data