ספרי מחזות לנדידה
1) סיווג הגירות
תרשימי DB: הוספת/שינוי עמודות, אינדקסים, שריטה, שינוי סוג מפתח.
נתונים: הילוך המוני/ניקוי, נורמליזציה, שימור/שמירת ארכיון.
שירותים ו-API: שינוי נקודות קצה, ורסינציה, חידוש חוזה.
תורים/אוטובוסים: נושאים נעים, מפתחות חבר שינוי, פורמט אירוע.
תשתית: לעבור cluster/K8s/cloud/region חדש, לשנות סודות/KMS.
אחסון ואנליטיקה: שינוי המנוע (OLTP/OLAP), פורמט/מחיצה של נתונים.
אבטחה/ציות: סיבוב מפתח, הצפנה בזבוב, גיאו-לוקליזציה של נתונים.
2) עקרונות של הגירה מוצלחת
1. הרחיבו את Accription # Migrate Action. ראשית, נרחיב את התוכנית/ההתנהגות (תואמת), ואז נעביר את הנתונים/התנועה, ואז נסלק את הישן.
2. Shadow & Dual. קריאת צללים/כתיבה וכניסה כפולה לאימות.
3. דגלי תכונה ו "הכפתור האדום. "כיבוי מהיר, הפעלה של שלב אחר שלב (אחוז/דיירים/אזורים).
4. אידמפוטנטיות ויכולת חזרה. ניתן להפעיל מחדש תסריטים ומשימות ללא תופעות לוואי.
5. יכולת תצפית לפני שינויים. לוחות מחוונים/התראות מראש, סמני נדידה ברישומים/מסלולים.
6. רולבק מתועד. תיבת ההפעלה מפורטת כמו התוכנית קדימה.
7. מיני-משחקים והשהיה. אנחנו נודדים במנות קטנות, בודקים סוכני SLI ועסקים.
3) ניתוח מלאי ותלות
מפת הצרכנים: שירותים, עבודות, דוחות, שותפים חיצוניים, BI/ETL, ספרי אינטרנט.
חוזים ותרשימים: גרסאות API/אירוע, תאימות לאחור/קדימה.
גישה/סודות: מי קורא/כותב היכן נמצאים המטמונים/הרמזים.
דומיין פולשים: ייחודיות, איזון, אידמפוטנטיות, יום דיווח.
כרכים/מהירויות: גודל נתונים, RPS, חלונות שיא, RPO/RTO.
4) תבנית חוברת מהלכים קנונית (שלד YAML)
yaml playbook: "migrate-orders-to-v2"
owner: "orders-team"
stakeholders: ["platform", "data", "security", "support"]
change_type: ["schema", "data", "api"]
risk_level: "high"
preconditions:
- "Dashboards ready: latency/error/lag"
- "Runbook rollback validated on stage"
- "Backups verified (restore tested)"
plan:
phase_1_prepare:
steps:
- "Add new nullable columns (expand)"
- "Deploy code with dual-write (flag off)"
- "Enable CDC stream to target"
phase_2_shadow:
steps:
- "Shadow-read v2, compare with v1 (1%)"
- "Fix discrepancies; iterate"
phase_3_dual_write:
steps:
- "Enable dual-write (10%→50%→100%)"
- "Start backfill in batches (size=10k, sleep=200ms)"
phase_4_cutover:
steps:
- "Switch reads to v2 by tenants (canary)"
- "Monitor SLI 30m; expand scope"
phase_5_contract:
steps:
- "Drop old indices/columns after T+14d"
- "Disable old topic/api; update docs/SDK"
guardrails:
abort_if:
- "error_rate > 0. 5% for 5m"
- "p95 > baseline1. 5 for 10m"
- "data_mismatch > 0. 01%"
rollback:
steps:
- "Flip flag: reads back to v1"
- "Stop backfill; continue dual-write to v1"
- "Replay missed events (DLQ→v1)"
validation:
checks:
- "Row counts match within epsilon"
- "Business invariants hold (balances, limits)"
comms:
- channel: "on-call-bridge"
- status_updates: "T-24h, T-1h, start, cutover, finish"
window: "low-traffic Sun 02:00–05:00 UTC"
5) דפוסי נדידה
5. 1 DB סכמות (RDBMS/NOSQL)
הוסף - אל תשתנה. טורים חדשים/אינדקסים = קוד קורא ישן וחדש.
בנייה מחדש באינטרנט. השתמש באינדקס מקוון/מקוון DDLs.
גרסאות סריאליזציה. גרסה של המטען בעמודות JSON/Proto/Avro.
נדידת מפתח. בעת שינוי טבלת זמן PK של התכתובות + הדק/CDC.
5. 2 נתונים (הילוך אחורי/ניקוי)
CDC + backfill. ראשית, הזרימה של שינויים (כדי לשמור על קצב), ואז המנה האחורית.
מסיבות ומועדים. חבורות קטנות עם בקרת פיגור, נקודות ביקורת והפעלה מחדש.
עדכונים מדויקים. עייף על ידי מפתחות/גרסאות טבעיות.
5. 3 אירועים ותורים
אירועי ורסינינג. 'event _ type @ vN', הצרכנים מתעלמים שדות לא מוכרים.
נושאים נעים. פוסט כפול, הצרכנים קוראים משניהם לפני הייצוב; ואז ”חיתוך” הישן.
מפתח מחיצה. נדידת מפתח - דרך ההוצאה מחדש עם מפה של התכתבויות ואידמפוטנטיות.
5. 4 שירותים ו ־ API
כחול/ירוק/קנרי. חימום בבריכה, תנועה חלקית, נסיעה מהירה.
דגלי פישה. על ידי דיירים/אזורים/אחוזים, נצפה הכללה.
חוזים. חוזי המרכז לבקרת מחלות ובדיקות תאימות לפני ההחלפה.
5. 5 אזורים/קליידס
הקלטה גאו-כפולה. הנתונים מוקלטים בשני אזורים; קריאות - על ידי קרבה.
העברה מדינית. Snapshot + שכפול; RPO ”קו אדום”, DNS/Anycast משלוח.
תחום שיפוט. הסכמה/לוקליזציה של נתונים, רשימות של ”אסור” להסרת ערכות.
6) שלבי הוצאה להורג (מפורט)
1. הכנה
לוחות מחוונים, התראות, גבולות, דגלים, גיבויים עם מבחן התאוששות, לרוץ על במה.
2. צל (בדיקת צללים)
בקשות מראה/כותב למערכת החדשה מבלי להשפיע על המשתמשים. השווה תגובות/מצבים.
3. כתיבה כפולה/קריאה כפולה
אנחנו כותבים בשני הכיוונים. קריאות - בהדרגה לעבור למערכת חדשה. יומני אי-התאמה מנותחים.
4. הילוך אחורי
אנחנו מעמיסים את המידע ההיסטורי בחבורות. אנחנו שולטים בפיגור של המרכז לבקרת מחלות, מפקחים על העומס של הסיפור והמטמון.
5. חיתוך (החלפה)
Canarim by section (דיירים/אזורים/אחוזים). אנחנו תומכים בחזרה מהירה.
6. חוזה (ניקיון)
מנותק נתיבים ישנים, למחוק שדות/אינדקסים/נושאים מיושנים לאחר ”תקופת הביטחון”.
7. אימות ורטרו
דיווח, מדדים, שיעורים, עדכון רשימות משחקים/צ 'קים.
7) יכולת תצפית ו ־ SLO בעת נדידה
SLIS טכני: p50/p95/p99, קצב שגיאה, treaty/timeout, שימוש, lag CDC, תור עומק.
Business SLI: הצלחה בעסקאות/המרות, אינווריאנטים (מאזנים, גבולות, שכפולים).
תוויות מיוחדות: "הגירה _ id'," שלב "," דייר "," דגל _ מדינה ".
שומרים התראה: סף לזנבות ושגיאות, ”עצירה אוטומטית” (ביטול) עבור SLO.
לוחות השוואה: V1 V2, דלתא על ידי מדדי מפתח.
8) גלגיליות ותרחישי חירום
גלגיליות הגיוניות: דגלים/ניתוב תנועה בחזרה, הקפאה לאחור.
נתונים: ”פיצוי” (סאגה), שידור חוזר של האירוע, מערכת המקור DLQ.
סודות/מפתחות: חזור למפתח/תעודה קודמת (דו-מפתח).
DNS/תנועה: ”סחיפה הפוכה” Anycast/ALB, TTL קצר בחלון הנדידה.
תקשורת: ערוץ ומצב מוסכם מראש.
9) ביטחון, פרטיות, ציות
מזעור נתונים. אנחנו מעבירים רק את השדות הדרושים; פרופילים אנונימיים על העותק.
קריפטוגרפיה. הצפנה ”על החוט” ו ”במנוחה”, סיבוב KMS; יומן מבצע מפתח.
גישה בזמן. תפקידים זמניים למשרות הגירה, בחירה של זכויות לאחר סיום.
טביעות רגליים. משטרת מסווה ביומנים/עקבות, מגבלות ייצוא.
10) שינוי ניהול ותקשורת
מי טוען מי מבצע, מי מעודכן.
תקופות הקפאה: איסור על שחרור לא רלוונטי בחלון הנדידה.
סטטוסים: T-24h, T-1h, התחלה, קנרית, חיתוך, סיום, פוסט-ים.
שותפים חיצוניים: חלונות תואמים, אותיות חוזה, ארגז חול בדיקה.
11) תבניות ריצה
11. 1 הילוך אחורי (פסאודו-קוד)
for batch in paginate(ids, size=10_000):
try:
rows = read_v1(batch)
upsert_v2 (rows) # idempotently mark_checkpoint (batch. end)
sleep(jitter_ms(100..300))
except Throttle:
sleep (5s) # backpressure respect except Fatal as e:
alert("backfill-failed", e, context=batch)
abort_if_needed()
11. 2 Proverka一致nosti (צילום/דגימה)
sample = random_ids(n=10_000, stratify=tenant,timestamp)
v1 = fetch_v1(sample); v2 = fetch_v2(sample)
assert schema_compatible(v2)
assert key_invariants_hold (v1, v2) # sum, statuses, versions mismatch_rate = diff (v1, v2). rate()
abort_if(mismatch_rate > 0. 0001)
11. 3 קריאות החלפה
flag. enable("read_from_v2", segment="tenants: cohort_A")
monitor(30m)
if SLO_ok(): expand_segment()
else: rollback_segment()
12) אנטי דפוסים
”מפץ גדול” במקום להרחיב-להגר חוזה.
הילוך אחורי ללא מרכז לבקרת מחלות.
אין אידמפוטנטיות * שכפול/מידע מלוכלך.
צעדים ידניים ללא תסריטים.
הגירה ללא לוחות מחוונים/שומרים = ”טיסה עיוורת”.
rollback rollback לא עובד בעת הצורך.
התעלמות מצרכנים (BI/partners) * דיווחים שבורים/אינטגרציות.
13) רשימת אדריכלים
1. מטרה, גבולות, סוג נדידה ותוצאות מוגדרות?
2. מפת צרכנים וחוזים, בדיקות תאימות ירוקות?
3. לוח מחוונים מוכן, התראות, תגיות 'הגירה _ id', SLO/מעקות בטיחות להגדיר?
4. מיושם צל ו/או דו-כתיבה, אידמפוטנט אחורי?
5. האם יש רולר-בוק מתורגל, לבדוק התאוששות מגיבוי?
6. חלון/קואורדינציה/תקשורת הסכימה, להקפיא?
7. תכנית צעד אחר צעד עם קנרית והרחבה/קריטריון עצירה מוכן?
8. אבטחה/ציות: מפתחות, גישה, תברואה מח "ש?
9. האם התיעוד/SDK/spec מעודכן באותו מחזור שחרור?
10. לאחר הים ועדכון ספר מהלכים לאחר סיום מתוכנן?
מסקנה
ספרי משחק נדירים הם פרקטיקה ארכיטקטונית של ניהול סיכונים: צעדים הפיכים קטנים, מדדים שקופים, rollback מוכן, ו-extreme-nigerate-contraction. בעקבות התבניות המתוארות, אתה נודד מזימות, נתונים, שירותים ואזורים ללא השבתה והפתעות, תוך שמירה על אינווריאנטים עסקיים ואמון המשתמש.