הנדסת כאוס
1) עקרונות בסיסיים
מצב יציב כהשערה המקורית. הגדר בבירור את הנורמה (לדוגמה: p95 <200 ms, שיעור שגיאה <0. 3%, הצלחת זרימה קריטית> 99. 5%).
משתנים מבודדים. שינוי כמה שיותר גורם אחד בכל פעם לקשר סיבתי אפקט ושיפור.
תואר. אנחנו מתחילים עם אמפליטדות קטנות בסביבה בטוחה.
מעקות בטיחות. תנאי עצירה מפורשים בתקציב SLO/התראה/שגיאה.
יכולת חזרה. הניסוי חייב להתרבות באופן דטרמיניסטי (סקריפטים/מניפסטים/IC).
אתיקה ובטיחות. אין נתונים אישיים אמיתיים ועסקאות פיננסיות בניסויים מסוכנים.
2) מהו ”מצב יציב”
מצב יציב (Steady State) הוא קבוצה של מדדים ברי-תצפית המתארים ערך משתמש ואינווריאנטים עסקיים:- p50/p95/p99 איחורים של נקודות קצה מפתח.
- אחוזי הצלחה והמרת נתיב קריטית.
- שיעור שגיאות, פסקי זמן, אחוז בקשות ”לשפוך” (מקושט ברוויה).
- קצב ריפוי עצמי (MTTR), התנגדות לנסיגה (ללא סערות).
- Domain invariants: חוסר ”חסרונות באיזון”, פעם מבוצע תשלומים, עקביות של ימי דיווח, וכו '.
3) קטלוג הזרקה (מה שאנו שוברים)
רשת: Latency, jitter, אובדן/כפילויות, מגבלת רוחב פס, הפסקות TLS, DNS מתנופף.
חישובים: עומס יתר על המעבד, לחץ זיכרון/GC, תשישות תיאור, רפיון שעון.
אחסון: p95 גבוה I/O, ENOSPC, אי ספיקת מנהיג/העתק, שבריר מוח,
תלויות: 5xx/429, ”הצלחה איטית”, השפלה של API חיצוני, מגבלת קצב.
נתונים: שכפול/החטאה של הודעות, מחוץ לסדר, רשומות מלוכלכות, קונפליקט גרסה.
פעולות: שחרור/הגדרה כושלת, דגל תכונה עם באג, תעודת פג תוקף, סיבוב מפתח.
אנשים ותהליכים: חוסר זמינות של האחראים, עיכוב עדכון ידני, פנקס מנחים שגוי.
4) עיצוב ניסוי (תבנית)
1. השערה: ”ב ־ 300 ms + לשירות המטבע p99 של ה ־ API הראשי <450 ms, מפסק נפתח, התקבלה תגובה מעופשת לפני 15 דקות”.
2. הזרקה: פרופיל כשל (סוג/משרעת/משך) וקונטור יעד.
3. מדדים/רישומים: מסמנים צ 'או. experiment_id', שלב = הזרקה מחדש.
4. מעקות בטיחות: בטל 'error _ rate> 2%' או p99> SLA × 2 ליותר מדקה 1.
5. תוצאות/פלט: רשימת תצפיות, באגים, שיפורים, תוכנית עבודה והפעלה מחדש.
5) יכולת תצפית: מה חובה
התחקות: נתיב בקשה דרך תלויות; קטעים עם השפלה מסומנים.
מדדי משאבים: CPU, Heap/GC, FD, דיסק IOPS/LAT, רוחב פס רשת, עומק תור.
מדדים עסקיים: המרה/הצלחה של פעולות, נתח של עסקאות פיצוי.
יומני אירוע: פתיחה/סגירת מפסקים, מגשים מחדש והתקציב שלהם, החלפת מוביל מסד הנתונים.
לוח ניסוי: לוח מחוונים חי עם סף מעקה בטיחות והפלה ”כפתור אדום”.
6) מעקות בטיחות וביטחון
טכני: גבולות עליונים של שיעור שגיאה/latency, ירידה בנתח של פעולות מוצלחות, גידול DLQ.
ארגון: חלון זמן, כוננות מעורבת, העיקרון של ”אזור אחד - ניסוי אחד”.
נתונים/ציות: סינתטיים בלבד או ערכות לא אישיות; מניעת בדיקות שמובילות להפרות רגולטוריות.
Rollback: מוכן rollback/bettle הליך של תנועת ניקוז הדגל/רך.
7) דפוסי עמידות שצריכים להופיע
תקציבי זמן ויריעות נסיגה (ללא סערה).
מפסק מעגל עם חצי פתוח והתאוששות מעריכית.
מחיצות: בידוד בריכות קריטיות (תשלומים נגד אנליסט).
רפיסת גב והגבלת קצב: ניתוק צפוי בעדיפות נמוכה.
מטמון עם התאגדות, הגנה מפני ”סופות חימום”.
אימפוטנטיות של תופעות לוואי וסאגות עם פעולות פיצוי.
מניין, פילובר, ואנטי-אנטרופיה לשיקום נתונים.
8) תרחישים לדוגמה (סקיצות)
8. 1 תלות איטית (YAML)
yaml experiment: slow-downstream target: svc:api inject:
dependency:
name: currency mode: add_latency p95_ms: 300 duration: 10m guardrails:
error_rate: "< 1. 5%"
p99_latency: "< 450ms"
expectations:
breaker_open: true stale_data_served: "<= 15m"
8. 2 אובדן מנהיג DB
המנהיג הפסיק את הבחירות מחדש.
המתנה: מעכב כתיבה זמני, קריאת מניין, כספת WAL/Outbox, שכפול אוטומטי, ללא כתיבה כפולה.
8. 3 ENOSPC על דיסק יומן
הזרקה: מלא את הדיסק ל-95-100%.
המתנה: סיבוב חירום של יומנים, בטיחות של יומנים קריטיים, ביטול מאפיינים שאינם קריטיים, התראה ושיקום אוטומטי.
8. 4 פרץ תנועה + הצללה
הזרקה: x3 RPS למשך 5 דקות בנקודת סוף חמה.
ממתין: ירידה בעדיפות נמוכה, p95 יציב ”ליבה”, אין מגש מחדש.
9) אוטומציה ב ־ CI/CD
כאוס-עשן בשלב עבור כל שחרור (זריקות קצרות אמפליטודות בטוחות).
לילה פועל על פי קטלוג הניסויים (matrix services × סוגים של כשלים).
שערים: השחרור חסום אם ”התמדה היא מתחת לסף” (לדוגמה, אחוז הנזילות המוצלחת הוא <95%).
חפצים: דיווח, שבילים, מעבד בשר/ערימה, תמונות של מדדים ותצורות.
10) ימי משחק (ימי משחק)
תרגילי צוות רגילים עם תרחישים ”חיים”:- תפקידים: מוביל ניסוי, צופה מדדים, מפעיל רולבק, נציג עסקי.
- תרחישים: הידלדלות מטמון, כשל חלקי AZ/אזור-feilover, ”שחרור רע”, לא זמין של ספק חיצוני.
- תוצאות: נמצאו פערים בספר הרישומים, שיפורים בהתראות, התאמות לתקציבי SLOS ומגש מחדש.
11) כאוס לנתונים, אירועים ו ML
זרמי נתונים: בדיקות לשכפולים, פערים, מחוץ לסדר, עיכובים; אימות של צרכנים אידמפוטנטים ואסטרטגיות DLQ.
ריפוזיטוריות: ירידה באינדקס, מחיצה חמה, עימות נעילה, שכפול תחת פיגור.
ML: עיכוב תכונה, שיגור חזרה למודל הבסיס, הידרדרות איכות נתוני הקלט (סחיפה) - המערכת צריכה להיות ”בוטה באופן רך” ולא ליפול.
12) אנטי דפוסים
כאוס ללא יכולת תצפית: אתה ”עיוור”, המסקנות הן ספקולטיביות.
זריקות באופן מיידי בדרבן ללא מעקות במה ושמירה.
”ניסוי אחד גדול” על הכל בבת אחת - לא ברור מה בדיוק עבד.
פעולת כאוס ללא השערות ומפגרים לאחר תיקונים.
התמקדות רק בתשתיות - מפעילים עסקיים נשכחים.
התעלמות מאנשים/תהליכים: התראות, כוננות, הימלטות - חלק מהמערכת.
13) בגרות תרגול (מודל)
1. זריקות בודדות באופן מקומי.
2. בלגן במה: קטלוג של תרחישים, ריצות חוזרות, לוחות מחוונים.
3. לשחרר כאוס: עשן כאוס בכל שחרור, שערים, דיווחים.
4. כאוס מזון עם הגבלות: תנועה נמוכה, מעקות בטיחות קפדניים, רולבק מוכן.
5. יציבות רציפה: ניסויים אוטומטיים, ניהול SLO, שיפורים כזרימת עבודה.
14) שילוב עם פרקטיקות אדריכליות
ניסויים בתוהו ובוהו משלימים זריקות פגמים ותרחישי השפלה.
בדיקות עומס: ניסויי עומס משולבים + כשל חושפים מפלים וסערה של חזרות.
מדיניות בשם Code/RBAC/ABAC: מעקות בטיחות, צעדי rollback ומגבלות מעוצבות כמדיניות.
הסכמה/ניהול פרטיות: אל תאפשר ניסויים המפרים את מצב עיבוד הנתונים.
גיאו-ארכיטקטורה: בדיקת כאוס של כשלים של האזורים ונתונים המחייבים לתחום השיפוט.
15) מתכונים קטנים (פסאודו-קוד)
מפסק + השפלה
if breaker. open():
return serve_stale(cache. max_age=15m)
try:
res = call(dep, timeout=250ms)
return res except Timeout:
breaker. trip()
return serve_stale()
מגבלת + הצללה
if cpu. load() > 0. 85 or queue. depth() > HIGH:
if req. priority < HIGH: return 503_SHED limiter. acquire()
תופעת לוואי אידמפוטנטית
key = "payout:"+external_id if kv. exists(key): return kv. get(key)
res = side_effect()
kv. put(key, res, ttl=30d)
return res
16) רשימת אדריכלים
1. מדינה יציבה מוגדרת ומעקות בטיחות?
2. האם יש ספריית תסריט (רשת/מעבד/אחסון/תלויות/נתונים/פעולות)?
3. האם כושר הראייה מכסה משאבים, זנבות, עסקנים?
4. פסקי זמן/נסיגה/מפסקים/מגבלות/מחיצות מופעלים וניתנים להפעלה?
5. הכין את הספר ו ”כפתור אדום”?
6. האם יש כאוס-עשן בבמה וניסויים ליליים?
7. האם יש חלונות ”בטוחים” ותפקידים לימי משחק?
8. ניסויים הם בעלי יכולת רבייה (ICC/scripts), תוצאות מבוססות?
9. שיפורים קבועים על ידי משימות, מבחן חוזר נעשה?
10. צינורות נתונים ו-ML מכוסים, לא רק HTTP?
מסקנה
הנדסת כאוס הופכת ”תקריות בלתי צפויות” לתרחישים צפויים. השערת ההתנגדות, זריקות מבוקרות, מעקות בטיחות קשיחות, יכולת תצפית עשירה ומשמעת בחינה חוזרת הם כלים שמקטינים את הסיכון של שחרור והגברת האמון בפלטפורמה. כתוצאה מכך, הצוות מבין את גבולות המערכת, מסוגל להשפיל באופן אלגנטי ולמהר להחזיר את השירות למשתמש, אפילו בתנאי כשל.