בדיקת עומס ולחץ
בדיקת מתח ולחץ
1) למה אתה צריך את זה
מטרות:- אישור קיבולת (כמה הפעלות RPS/תחרותיות המערכת תעמוד ב-SLO).
- מצא צווארי בקבוק (CPU/IO/DB/רשתות/מנעולים/בריכות).
- הגדרת תקציבי ביצועים ושערים ב CI/CD.
- הפחת את הסיכון של שחרור (רגרסיה p95/p99, צמיחת שגיאות שיא).
- קיבולת/עלות תוכנית (קנה מידה החוצה ועתודות).
2) סוגים של בדיקות perf
עומס: תנועה מציאותית קרובה לפסגות; אימות SLO.
מתח: גדילה ל/מעל גבול התנהגות השפלה.
ספייק: קפיצת עומס מהירה * גמישות/אוטוסקלה.
Soak/Endurance: שעות/יום דליפות, פיצול, סחף.
קיבולת/Scalability: כיצד תפוקה/latency משתנה עם scale-out; חוק אמדל/גוסטפסון.
”עשן” קצר רץ על כל שחרור (ביצועים מכובדים).
3) דגמי דור התנועה
Fixed VOS/concurrency: ”N” משתמשים, כל ביצוע בקשות לתור acw על הלקוח. סיכון של הסתרת עומס יתר.
קצב הגעה: זרימה של יישומים בעלי עוצמה תורשתית (req/s), כמו בחיים האמיתיים. נכון יותר עבור ממשקים ציבוריים.
חוק ליטל: ”L = העשרה × W”.
עבור בריכה/שירות, מינימום מקביליות institute 'oxW' (להוסיף 20-50% של מלאי).
איפה ש ”ערבות” היא תפוקה, ”W” הוא זמן השירות הממוצע.
4) טען פרופילים ותרחישים
תערובת מסע משתמש: מניות של תסריטים (התחברות, עיון, הפקדה, קופה...).
זמן-מחשבה: הפסקה של המשתמש (הפצות: אקספוננציאלי/לוגנורמלי).
פרופיל נתונים: גודל התגובות, המטען, השונות של הפרמטרים.
מתאם: שלבי קישור (עוגיות/אסימונים/זיהוי) כמו בזרימה אמיתית.
מטמון קר/חם/חם: ריצות בודדות.
קרא נגד כתב: איזון של קריאות/רישומים, אידמפוטנטיות למגשים מחדש.
רב-אזור: RTT, הפצה על ידי POP/ASN.
5) סביבת בדיקה
בידוד: הדוכן קרוב למכפלה בטופולוגיה/הגדרות (אך לא ”לנצח” את המוצר).
נתונים: מיסוך מח "ש, כרכים, מדדים כמו במכירות.
טען גנרטורים: אל תנוח מול הרשת/מעבד; רצים מבוזרים, סנכרון זמן.
יכולת תצפית: מדדים/שבילים/רישומים, סינתטיים בהיקף, יצוא פרופילי מעבד/היפ.
6) מדדים ו ־ SLI
דרך: RPS/Transactions/second
Latency: p50/p95/p99, TTFB, זמן שרת נגד רשת.
שגיאות: נתח של שגיאות 5xx/4xx/domain.
רוויה: CPU, load avg, GC, disk Iops/latency, network, pool wait.
Business SLI: 5S President President President Service
קח את הסף מ-SLO (לדוגמה, "99. 95% מים 300 ms"), לפקח שרפה קצב במהלך הריצה.
7) מציאת צווארי בקבוק (טכניקה)
1. מחממים את המערכת באופן עקבי ב-60-80% מעומס המטרה.
2. הגדלת השלבים (ramp) * תיקון שבו p95/p99 וקצב השגיאה גדלים.
- תורים בבריכות (DB/HTTP),
- צמיחה של WAIT/Locks (DB),
- GC-pauses/heap,
- רשת מתוצרת מחדש/אובדן מנות,
- דיסק/מטמון מפספס.
- 4. מיקום: חיפוש בינארי לפי נתיב שאילתה, פרופילים (CPU/alloc/lock-profile).
- 5. תקן את ה ”בקבוק”. כוונון כפול חוזר על הריצה.
8) התנהגות תחת לחץ
השפלה חיננית: גבולות, מפרי מעגל חשמלי, תורים לתרמילי גב, המקובלים לעיבוד.
מגשים מחדש: מקסימום 1, אידמפוטנט בלבד; ג 'יטר; תקציב המגש צבר 10% מ-RPS.
כשל פתוח/כשל סגור: עבור תלות שאינה קריטית, לאפשר אל-כשל פתוח (מטמון/מטמון).
כשל מדורג: בידוד בריכות/מכסות (מחיצה), פסקי זמן מהירים, ניתוק חלק של פונקציות (דגלים).
9) כלים (בחירה למשימה)
K6 (JavaScript, open/open-model, מהיר, נוח ב CI).
JMeter (עשיר במערכת אקולוגית, GUI/CLI, תוספים, אך כבדים יותר).
גאטלינג (סקאלה DSL, ביצועים גבוהים).
ארבה (פייתון, גמישות תסריט).
וג 'יטה/היי/ורוק (מיקרו-ספסלים ובדיקה מהירה).
חוק: כלי אחד ”ראשי” + קליל CLI לעט עשן ביחסי ציבור.
10) דוגמאות (קטעים)
10. 1 k6 (מודל פתוח עם קצב הגעה)
js import http from 'k6/http';
import { sleep } from 'k6';
export const options = {
scenarios: {
open_model: {
executor: 'ramping-arrival-rate',
startRate: 200, timeUnit: '1s',
preAllocatedVUs: 200, maxVUs: 2000,
stages: [
{ target: 500, duration: '5m' }, // до 500 rps
{target: 800, duration: '5m'} ,//stress
{ target: 0, duration: '1m' }
]
}
},
thresholds: {
http_req_duration: ['p(95)<300', 'p(99)<800'],
http_req_failed: ['rate<0. 005'],
},
};
export default function () {
const res = http. get(`${__ENV. BASE_URL}/api/catalog? limit=20`);
sleep(Math. random() 2); // think-time
}
10. 2 JMeter (רעיון פרופיל)
Truad Group + Steping Thread Surrency Thread (דמוי פתח).
מחדל בקשת HTTP, מנהל עוגיות, מערך נתונים CSV.
Backend Listener # InfluxDB/Grafana; טענות לפי זמן/קוד.
10. 3 ארבה (פייתון)
python from locust import HttpUser, task, between class WebUser(HttpUser):
wait_time = between(0. 2, 2. 0)
@task(5)
def browse(self): self. client. get("/api/catalog? limit=20")
@task(1)
def buy(self): self. client. post("/api/checkout", json={"sku":"A1","qty":1})
11) נתונים, מתאם, הכנה
נתוני זרעים: ספריות, משתמשים, מאזנים, אסימונים - כמו במכירות.
מסווה/אנונימיות PII; יצירת סינתטים על גבי הפצות אמיתיות.
קורלציה: לחלץ תעודות זהות/אסימונים מהתגובות (RegExp/JSONPath) ולהשתמש בצעדים הבאים.
12) יכולת תצפית במהלך הריצות
לוחות מחוונים אדומים (קצב, טעויות, משך) לאורך המסלולים.
מופת - מעבר ממטרים לעקבות (trace_id).
יומני שגיאה: דגימה + צבירה, שכפול/אידמפוטנציה.
מערכת: מעבד/GC/ערימה, דיסקים/רשת, המתנת בריכה.
שאילתות עליונות, מנעולים, סריקות אינדקס, בלוט.
13) אוטומציה ושערי ביצועים
מודיע: ריצות קצרות על מיזוג (למשל. k6 2-3 דקות) עם סף.
לילה/שבועי: ספוג/לחץ ארוך במדיום נפרד; דיווחים ומגמות.
קנרית משחררת: ניתוח של SLO (שיעור שגיאה, p95) בתור ”השער” של הקידום.
רגרסיות: קו בסיס נגד מבנה גוף נוכחי; התראה בהידרדרות> X%.
14) תכנון קיבולת ועלות
הפקת עקומות * latency: להגדיר נקודת ברך - לאחר שהוא p99 גדל בחדות.
קנה מידה: מדידת יעילות הדירוג (RPS delta/node delta).
עלות: ”RPS לדולר/שעה”, רזרבה לאירועי שיא + DR-reserve.
15) אנטי דפוסים
הכה לתוך הדרבן ללא שליטה או מבחן בסביבה ”ריקה”, לא כמו הדרבן.
דגם סגור עם חיילים משוחררים מסתתרים.
מחסור במחשבה/מידע * מטמון לא מציאותי פוגע, או להפך - סערה למקור.
תסריט ”/פינג ”אחד במקום זרימה מותאמת אישית.
חוסר יכולת הבחנה: ”אנחנו רואים רק RPS ועיכוב ממוצע”.
מגשים מחדש בלתי מבוקר * DDOS עצמי.
ערבוב הבדיקה והמיטיביות ללא תיקון השערות/שינויים.
16) רשימת בדיקות (0-30 ימים)
0-7 ימים
הגדרת SLI/SLO ופרופילי תנועה למטרה (מיקס, זמן-מחשבה, נתונים).
בחר את הכלי (k6/JMeter/Locust), העלה את לוחות המחוונים של RED.
הכינו את נתוני הדוכן והזרעים, בטלו את גבולות הצד השלישי/קפטצ 'ה.
8-20 ימים
לבנות תרחישים: מודל פתוח (קצב הגעה), מטמון קר/חם/חם.
הפעל עומס # לחץ _ ספייק; לתקן נקודת ברכיים וצווארי בקבוק.
יישום שערי ביצועים ב CI (מיקרו-run).
21-30 ימים
בדיקת השריה 4-24: דליפות ג 'י-סי/סחף, ייצוב.
מגבלות מסמך, תוכנית קיבולת, איורים של RPS * p95/oshibki.
הכינו את הספר ”כיצד להגדיל את הגבולות/הסולם” ו ”כיצד להשפיל”.
17) מדדי בגרות
ישנם פרופילים ריאליסטיים (מיקס, זמן-מחשבה, נתונים) שמכסים 80% מהתנועה.
לוחות מחוונים אדומים + איתור מחוברים לכל הבדיקות.
בלוק שערי ביצועים משחרר בעת נסיגת p95/שגיאות.
קיבולת ונקודת ברך מתועדים על ידי שירותי מפתח.
ריצות ספוג/לחץ חודשיות ודוחות התקדמות.
ההתנגדות ל ”ספייק” מאושרת על ידי אוטוסקלה והיעדר מפל-נכשל.
18) מסקנה
בדיקת עומס היא תרגול הנדסי רגיל, לא מדידה חד פעמית. "משתמשים אמיתיים במודל (מודל פתוח), מודדים את מה שמשקף את חוויית הלקוח (SLI/SLO), שומרים על יכולת תצפית ושערים ב CI/CD, מנהלים ריצות לחץ/ספייק/ספייק ולתקן את נקודת הברך. ואז אירועי שיא וברבורים שחורים הופכים לתרחישים הניתנים לניהול, וביצועים הופכים לפרמטר צפוי ומודד של הפלטפורמה שלך.