רמה 1 · גרסה פגומה
גרסה חדשה עולה ב-09:10. החודש כבר היה קשה: נשארו רק 20 % מתקציב השגיאות. דקות אחרי הפריסה מופעלת ההתראה על קצב השריפה. הגנו על התקציב.
- תקציב שגיאות שנותר בסוף ≥ 18.5 %
- שיעור שגיאות ממוצע ≤ 0.65 % אחרי הפריסה
- עלות הצי ≤ $9.50
אתם בכוננות לשירות אינטרנט: מאזן עומסים לפני צי מופעים, מטמון לפני מסד נתונים, ויעד זמינות של 99.9 %. בכל דקה המודל מחשב השהיית תור, פסקי זמן, פגיעות מטמון ועומס מסד נתונים מנוסחאות ספר לימוד — ומה ההחלטות שלכם עולות.
רצפה לצי. העלאתה משיקה מופעים מיד — הם עדיין צריכים את השהיית האתחול לפני שמשרתים.
מעקב יעד על ניצולת; אין הרחבה חדשה כל עוד מופעים עדיין עולים. כבוי = בדיוק המינימום.
נמוך = יותר מרווח ויותר עלות. ניצולת נמדדת לא יכולה לעלות על 100 %, ולכן צי רווי גדל רק צעד אחר צעד.
TTL ארוך יותר = יותר פגיעות, אבל התשובות יכולות להיות ישנות יותר (גיל ממוצע ≈ TTL/2).
טוענת מפתחות חמים במשך 6 דקות (+12 % מהמטמון לדקה) במחיר 600 שאילתות מסד נתונים נוספות לשנייה.
החלק מתוך ה-30 % בעדיפות נמוכה (טעינה מראש, אצווה, זחלנים) שנדחה במאזן העומסים עם "נסו שוב מאוחר יותר".
התכונה הכבדה מוסיפה 20 ms של CPU ושאילתת מסד נתונים אחת לבקשה. כבוי = הידרדרות חיננית.
פורס מחדש את הבנייה התקינה האחרונה על צי חדש (5 דקות, מחויב פעמיים), ואז מעביר את התעבורה. לחיצה חוזרת מתחילה את ההכנה מחדש; כשאין בנייה פגומה חיה זה רק עולה כסף.
| קצב שריפה (שעה) | 0.0 × |
|---|---|
| בקשות | 1125 req/s |
| מופעים משרתים | 10 |
| מופעים בעלייה | 0 |
| שיעור פגיעות במטמון | 77 % |
| ניצולת מסד הנתונים | 19 % |
| תעבורה שהופלה | 0 % |
| עלות הצי | 4.00 $/h |
| עלות עד כה | 0.00 $ |
| גיל ממוצע של תשובות במטמון | 30 s |
| תעבורה על הגרסה הפגומה | 0 % |
| המלצות זמינות | 100 % |
גרסה חדשה עולה ב-09:10. החודש כבר היה קשה: נשארו רק 20 % מתקציב השגיאות. דקות אחרי הפריסה מופעלת ההתראה על קצב השריפה. הגנו על התקציב.
קישור לשירות מתפשט במהירות וצפוי גל תעבורה מתישהו הבוקר — אף אחד לא יודע מתי, או כמה גדול. מופעים חדשים צריכים היום 8 דקות כדי לעלות. כשהוא יגיע, שמרו על שגיאות והשהיה נמוכות בלי לשרוף כסף על קיבולת שאינה בשימוש.
בשיא הצהריים סקריפט תחזוקה מרוקן את כל המטמון. כל בקשה עכשיו הולכת למסד הנתונים, שגודל לשיעור פגיעות רגיל של 85 %. החזירו את השירות בלי להעמיס יתר על מסד הנתונים.
כל יחס שהסימולטור משתמש בו, עם המקור שלו. קבועים המסומנים כהנחות הם כיולים להמחשה.
λ(t) = base × (1 + 0.25·sin(2π(t + clock − 6 h)/24 h)) × surge(t), clock = time of day at the start (peak at 12:00); count/min ≈ N(60λ, √(60λ)) × (1 + N(0, 0.02))[6]הנחה: מספרי workers, זמני שירות, קיבולת מסד הנתונים, גודל המטמון, מהירות המילוי, מחירים ושיעור השגיאות של הגרסה הפגומה הם ערכים להמחשה לשירות אינטרנט בינוני.N = instances × 16 workers, a = λ·S; C(a, N) = B / (1 − (a/N)(1 − B)), B = Erlang B[3][6]P(W > t) = C·e^(−(N/S − λ)·t); timeouts = P(W > 2 s); a ≥ N ⇒ failed share = 1 − N/a[3]p99 ≈ S·ln 100 + ln(C/0.01)/(N/S − λ) (service + waiting quantile, an approximation)[3][6]קירוב: חיבור של כמותני השירות וההמתנה אינו ה-p99 המדויק של סכומם (הוא יכול להיות מעט גבוה או נמוך); התור נחשב יציב בתוך כל דקה כי בקשות נמשכות אלפיות שנייה.busy workers L = λ·S ⇒ utilization = λ·S / N[4]hit = warm × rT/(1 + rT), r = λ / 20,000 objects; mean age of a cached answer ≈ T/2[5]DB load = λ·q·(1 − hit); query time = 5 ms/(1 − ρ_db) (≤ 250 ms); S = S_app + (1 − hit)·q·query time[6]הנחה: מספרי workers, זמני שירות, קיבולת מסד הנתונים, גודל המטמון, מהירות המילוי, מחירים ושיעור השגיאות של הגרסה הפגומה הם ערכים להמחשה לשירות אינטרנט בינוני.budget = 1 − SLO = 0.1 %; burn = error rate / 0.1 %; Δbudget per min = burn / 43,200; burn (1 h) = mean error rate over the last 60 min / 0.1 % (window pre-filled with the opening minute)[1][2]desired = ⌈serving × utilization / target⌉ (utilization saturates at 100 %); new instances serve after the boot delay[6]הנחה: מספרי workers, זמני שירות, קיבולת מסד הנתונים, גודל המטמון, מהירות המילוי, מחירים ושיעור השגיאות של הגרסה הפגומה הם ערכים להמחשה לשירות אינטרנט בינוני.16 workers/instance · app time 50 ms (+20 ms and +1 query with the feature on) · 2 queries/request · DB 4,000 queries/s · 20,000 hot objects · cache refill τ = 30 min (slower while the DB is saturated) · warm-up job +12 %/min for 6 min, +600 queries/s · timeout 2 s · 30 % low-priority traffic · bad build +5 % errors, ×1.25 CPU · rollback 5 min · $0.40 per instance-hour · scale-in by ≤ 20 % of the fleet after 10 quiet minutes · up to 40 instancesהנחה: מספרי workers, זמני שירות, קיבולת מסד הנתונים, גודל המטמון, מהירות המילוי, מחירים ושיעור השגיאות של הגרסה הפגומה הם ערכים להמחשה לשירות אינטרנט בינוני.אקראיות: מחולל mulberry32 עם זרע; ההתפלגויות שבשימוש — אחידה, מעריכית (CDF הפוך), נורמלית (Box–Muller), פואסון (Knuth). הזרע מוצג וניתן לשיתוף.
מודל חינוכי — לא לקבלת החלטות תפעוליות. אתרים אמיתיים מכיילים כל קבוע לציוד ולנתונים שלהם.