טעינה ובדיקת לחץ
1) מונחים ומטרות
מבחן טעינה - מבחן בטווח העבודה (יעד RPS/תחרות) מול SLO (לדוגמה, p95 <200 ms, שיעור שגיאה <0. 5%).
מבחן מאמץ - מעבר (לפני/מעל רוויה של מעבד/DB/רשת), התבוננות בהשפלה ומכניקת התאוששות.
מבחן ספייק - התפרצויות חדות של עומס (× N במשך דקות).
Soak/Endurance - טווח ארוך (שעות/יום) למציאת דליפות, סחף GC, פיצול, צמיחת תור.
מבחן קיבולת - חישוב של רמת הפריקה (נקודת רוויה) ועתודות.
מטרות: לאשר SLO, לתקן מישורי, להבין צווארי בקבוק, כיול אוטומטי בקנה מידה ומגבלות.
2) מודל תנועה: פתוח נגד סגור
מודל סגור (concurrency-hunded): מספר קבוע של משתמשים וירטואליים (VUs), כל אחד אחרי התשובה גורם לזמן לחשוב.
מודל פתוח (קצב הגעה): שיעור קבוע של בקשות (RPS), ללא קשר לתגובות.
חוק ליטל: "L = ענייני W&fost
'L' הוא המספר הממוצע של בקשות בו זמנית שירות,
'- עוצמת (RPS),
זה זמן התגובה הממוצע.
מכאן ההערכה של התחרותיות ההכרחית של הגנרטור: "target_RPS p95_latency' מקורית.
3) מדדים: מה שאנו מודדים
עיכוב SLI: p50/p90/p95/p99 וזנב p99. 9; בנפרד לשבילים ”חמים” ו ”קרים”.
שגיאות: '5xx', '4xx' (תקף/לא תקף), פסק זמן, בוטל.
תפריט: RPS מתמשך, זרמי הפקה/בייטים.
משאבים: CPU, RAM/Heap, GC pauses, דיסק IOPS/LAT, רוחב פס רשת, מספר חיבורים/FD.
תורים ותיקונים: עומק, זמן המתנה, מספר הבקשות המוגבלות.
יעילות מטמון: פגע/מתגעגע, סופות חימום.
DB/caches/תורים: p95 בקשות, מנעולים, קונפליקטים, ניצול בריכה.
4) עמידה ונתונים
הגדרות מקבילות: גרסאות תוכנה, גבולות (uLime, contrack), הגדרות JVM/GC, בריכות.
טופולוגיה: LBs, CDN, WAF, TLS, אותה רשת ”קופצת”.
נתונים: התפלגויות ריאליסטיות (גדלים של אובייקטים, מפתחות ”חמים ”/” קרים ”, regionality).
התחלה חמה/קרה: ריצות אישיות; אל תשכח לבדוק מטמונים ”קרים”.
בידוד רקע: בטל עבודות לא רלוונטיות/קרונומים או דין וחשבון על השפעתן.
5) תרחישים (פרופילי טעינה)
1. האצת צעד למטרה RPS, להחזיק 10-30 דקות.
2. Ramp & Hold: צמיחה חלקה ל-X% מעל היעד, אבחון הזנב.
3. ספייק: mind × 2 - × 5 splash עבור 1-5 דקות, ואז לחזור.
4. מתח לכישלון: צעדים לכישלונות; לתקן את נקודת הכישלון הראשונה של ה-SLO ונקודת ה ”שבירה”.
5. 6-24 שעות עם שינויי תנועה (יום/לילה), לצפות פרצופים/סחף.
6. תערובת של נקודות קצה על ידי התפלגות ממשית (Zipf/pareto), משקולות שונות.
6) תהליך שלב אחר שלב
הגדר SLO ומקד פרופילי תנועה.
בחר את מודל הטעינה (פתוח/סגור), קבע קצב הגעה או חיילים משוחררים.
הכן נתונים ומצבי ”חם ”/” קר ”.
הגדרת טלמטריה (שבילים/מדטים/יומנים), מתאם עם הרצת המבחן.
חימום והפעלה, איסוף חפצים (פרופילי CPU/Heap, גרפי להבות, הסבר/יומנים איטיים DB).
ניתוח צוואר בקבוק, היווצרות של פריטי פעולה.
Reprogon אחרי תיקונים, עדכון בסיס וספר משחקים קיבולת.
7) צווארי בקבוק ותיקונים טיפוסיים
CPU-Bounded Service: profiling elimination of hot functions, הקצאות, סניפים; וקטוריזציה, מבנה ידידותי למטמון.
רשת/TLS: לשמור-בחיים, HTTP/2/3, איסוף חיבור, פסקי זמן נכונים, פטפוטים מופחתים.
אינדקסים, חבטות, שאילתות מוכנות, מאגר חיבורים, הפרדת R/W,
מטמונים: גודל, טי-טי-אל, בקשה להתמזגות, הגנה מפני סערה, חימום, כדורים אזוריים.
תורים/ברוקרים: גבולות קבלה/מקביליות, גודל חבורות, צרכנים אידמפוטנטים, תקרות DLQ.
אשפה/הפסקה: כוונון GC, השכרת חוצץ, איגום אובייקטים בגבולות סבירים.
i/O/דיסק: asynchronous I/O, דחיסה, דחיסה של תגובות עם רמה סבירה.
8) גבולות והגנה
פסקי זמן: מלמעלה למטה כדי למנוע מפלים.
הגבלת קצב/דליים אסימונים: השפלה צפויה במקום ”מוות ארוך”.
מפסק חשמלי והצללה רוויה בעדיפות נמוכה.
תרמיל גב: אותות ומגבילים מקביל עמוק לתוך השרשרת.
מחיצות: בידוד בריכות לנקודות קצה קריטיות.
אידמפוטנטיות: מפתחות לחזרות בטוחות תחת חזרה.
9) כלים ומתי לבחור אותם
k6 - לקוני JS, תמיכה מצוינת לקצב הגעה, אינטגרציה וגרפים.
גאטלינג - סקאלה DSL, גנרטור ביצועים גבוהים.
JMeter - מערכת אקולוגית עשירה וגמישה; נוח לפרוטוקולים/תוספים.
תסריטי ארבה ־ פייתון נוחים ללוגיקת זרימת משתמש מורכבת.
צמחייה/היי/שעועית - מיקרובנצ 'יז ונקודה פועלת על HTTP.
tc/netem, toxiproxy - הזרקת דלדול רשת.
פלמגרף/פרופיילר - חפש נקודות חמות במעבד.
10) דוגמאות (סקיצות)
k6 (מודל פתוח, מיקס נקודות קצה)
javascript import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
scenarios: {
open_model: {
executor: 'constant-arrival-rate',
rate: 800, timeUnit: '1s', duration: '20m',
preAllocatedVUs: 500, maxVUs: 2000
}
},
thresholds: {
'http_req_duration{kind:hot}': ['p(95)<200'],
'http_req_failed': ['rate<0. 005']
}
};
export default function () {
const r = Math. random();
let res;
if (r < 0. 6) {
res = http. get('https://svc/api/hot', { tags: { kind: 'hot' }});
} else if (r < 0. 9) {
res = http. get('https://svc/api/warm', { tags: { kind: 'warm' }});
} else {
res = http. post('https://svc/api/heavy', JSON. stringify({ n: 1000 }), { headers: { 'Content-Type': 'application/json' }});
}
check(res, { 'status is 2xx': (r) => r. status >= 200 && r. status < 300 });
sleep(0. 2);
}
גאטלינג (צעדים וספייק)
scala setUp(
scn. inject(
rampUsersPerSec(50) to 500 during (10 minutes),
constantUsersPerSec(500) during (20 minutes),
spikeUsers(2000). during(30. seconds)
)
). protocols(http. baseUrl("https://svc"))
תוכנית טעינה (שלד YAML)
yaml profile: "mix-traffic"
targets:
- endpoint: GET /api/hot weight: 0. 6
- endpoint: GET /api/warm weight: 0. 3
- endpoint: POST /api/heavy weight: 0. 1 schedule:
- step: { rps: 300, hold: 10m }
- step: { rps: 600, hold: 10m }
- step: { rps: 900, hold: 10m }
guardrails:
slo:
p95_ms: 200 error_rate: 0. 5%
abort_if:
- metric: error_rate op: ">"
value: 2%
window: 2m
11) אוטומציה ואופן חיים
Perf-עשן בכל יחסי ציבור (טווח קצר של נקודות קצה מפתח).
”קיבולת” לילית פועלת על הבמה עם דיווחים וחפצי פרופיל.
שערים ב CI/CD: לבנות קובץ כאשר נסוג p95/p99> X% של התחלה או צמיחה בקצב שגיאה.
ויסות של קווי בסיס ואחסון של פרופילים/פלמגראפים כחפצים.
תגיות רלוונטיות: איזה שירות/נקודת סוף מכוסה, איזה פרופיל תנועה משמש.
12) אנטי דפוסים
הגנרטור ושירות הניסויים באותה מכונה.
רק מודל סגור (VUs) עבור APIbacks # התחדשות ושיפוט שגוי.
פועל על בסיס נתונים/מטמון ריק ללא התחלה קרה.
אין התפלגויות מציאותיות (כל השאילתות זהות).
אין טלמטריה (RPS/latency רק בצד הגנרטור).
השוואה ללא קווי בסיס יציבים ובקרת סביבה.
”אופטימיזציה” בזמן מוגבר במקום לתקן את הסיבה.
13) רשימת אדריכלים
1. עומס SLO טיפוסי/שיא מוגדר?
2. האם המודל הנכון (פתוח/סגור) נבחר ופרופיל התנועה מתואר?
3. הדוכן שווה בתצורה ובטופולוגיה, האם יש מצב קר/חם?
4. טלמטריה ופרופילים אפשרו, פצע מבחן מתויג?
5. ריצות: קו בסיס/רמפה/ספייק/לחץ/ספוג מכוסה?
6. האם נקודות רוויה קבועות ושולי בטיחות מתוכננים?
7. גבולות מוגדרים, פורעים, תרמילאים, אידמפוטנטיות, מדיניות הצללה?
8. האם ישנם שערי CI עבור p95/p99 רגרסיה ושיעור שגיאה, האם קווי הבסיס מבוססים?
9. לאחר תיקון - ריפורגון ועדכון כוח ספר מהלכים?
10. זום אוטומטי ותוכנית חירום מתועדים?
מסקנה
עומס ובדיקות לחץ הם לא חד פעמי ”גזעים”, אבל בפועל הנדסי רציף. מודל תנועה ריאליסטי, יציבים נכונים, טלמטריה ואוטומציה ב CI/CD להפוך ביצועים מ ”קסם סודי” ליכולת מונעת מטרי: אתה יודע איפה התקרה שלך היא, כמה בטוח המניה היא ומה שינויים באמת לשפר את חוויית המשתמש.