Miqrasiya pleybukları
1) Miqrasiya təsnifatı
DB sxemləri: sütunların əlavə edilməsi/dəyişdirilməsi, indekslər, şardlaşdırma, açar tipinin dəyişdirilməsi.
Məlumatlar: kütləvi backfill/cleanup, normallaşma, retenshn/arxivləşdirmə.
Xidmətlər və API: end-point dəyişikliyi, versiyalaşdırma, müqavilələrin refaktorinqi.
Növbələr/şinlər: topiklərin hərəkəti, partizan açarlarının dəyişdirilməsi, hadisələrin formatı.
Infrastruktur: Yeni/K8s/bulud/region klasterinə keçid ,/KMS sirlərinin dəyişdirilməsi.
Depolama və analitika: mühərrikin dəyişdirilməsi (OLTP/OLAP), datasetlərin formatı/partizanlaşdırılması.
Təhlükəsizlik/komplayens: açarların rotasiyası, şifrələmə, məlumatların geo-lokallaşdırılması.
2) Uğurlu miqrasiya prinsipləri
1. Expand → Migrate → Contract. Əvvəlcə sxemi/davranışı genişləndiririk (uyğun), sonra məlumatları/trafiki köçürürük, sonra köhnəsini silirik.
2. Shadow & Dual. Kölgə yoxlama (shadow read/write) və validasiya üçün ikiqat giriş.
3. Ficha bayraqları və «qırmızı düymə». Sürətli bağlantı, addım-addım qoşulma (persentil/tenant/regionlar).
4. İdempotentlik və təkrarlanabilirlik. Skriptlər və tapşırıqlar yan təsirləri olmadan yenidən başlaya bilər.
5. Dəyişmədən əvvəl müşahidə. Daşbordlar/alertlər əvvəlcədən, log/treys miqrasiyası işarələri.
6. Geri çəkilmə sənədləşdirilmişdir. Runbook geri plan kimi ətraflı.
7. Mini partiyalar və fasilələr. SLI və biznes invariantlarını yoxlayaraq kiçik hissələrdə miqrasiya edirik.
3) Asılılığın inventarlaşdırılması və təhlili
İstehlakçı xəritəsi: xidmətlər, joblar, hesabatlar, xarici tərəfdaşlar, BI/ETL, vebhuklar.
Müqavilələr və sxemlər: API/hadisə versiyaları, backward/forward uyğunluğu.
Access/Secrets: Kim oxuyur/yazır, harada keşi/replikalar.
Domen invariantları: unikallıq, balans, idempotentlik, hesabat günü.
Həcm/sürət: məlumat ölçüsü, RPS, pik pəncərələr, RPO/RTO.
4) Kanonik pleybuk şablonu (YAML-skelet)
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) Miqrasiya nümunələri
5. 1 DB sxemləri (RDBMS/NoSQL)
Əlavə edin - dəyişməyin. Yeni nullable sütunlar/indekslər → kod köhnə və yeni oxuyur.
Onlayn yenidənqurma. Online indekslər/paralel DDL istifadə edin.
Seriallaşdırma versiyaları. JSON/Proto/Euro sütunlarında payload versiyası.
Açarların miqrasiyası. PK dəyişdikdə - müvəqqəti uyğunluq cədvəli + trigger/CDC.
5. 2 Məlumat (backfill/cleanup)
CDC + backfill. Əvvəlcə dəyişiklik axını (geri qalmamaq üçün), sonra paket backfill.
Partiyalar və müddətlər. Lag nəzarət ilə kiçik batches, check-point və yenidən başlamaq.
İdempotent yeniləmələri. Təbii açarları/versiyaları Upsert.
5. 3 Hadisələr və növbələr
Hadisələrin versiyası. 'event _ type @vN', konsumerlər naməlum sahələrə məhəl qoymur.
Topiklərin hərəkəti. İkiqat nəşr, istehlakçılar sabitləşməyə qədər hər ikisini oxuyur; sonra köhnə «kəsmə».
Partition key. Açarın miqrasiyası - uyğunluq və idempotentlik kartı ilə yenidən nəşr vasitəsilə.
5. 4 Xidmətlər və API
Blue/Green/Canary. Isınma hovuzu, qismən trafik, sürətli geri dönüş.
Fiç bayraqları. Tenant/regionlar/faizlər üzrə, müşahidə olunan daxil olma.
Müqavilələr. CDC müqavilələri və uyğunluq testləri - keçid əvvəl.
5. 5 Regionlar/klass
Geo-ikiqat qeyd. Məlumatlar iki bölgəyə yazılır; oxu - yaxın.
State transfer. Şəkil + replikasiya; «qırmızı xətt» RPO, DNS/Anycast daşıma.
Yurisdiksiyalar. Razılıq/məlumatların lokalizasiyası, setlərin çıxarılması üçün «qadağan edilmiş» siyahılar.
6) Icra mərhələləri (ətraflı)
1. Hazırlıq
Daşbordlar, alertlər, limitlər, fiça bayraqları, bərpa testi ilə arxalar, steyjada qaçış.
2. Shadow (kölgə yoxlama)
Istifadəçilərə təsir etmədən yeni sistemə sorğular/qeydlər güzgü. Cavabları/vəziyyətləri müqayisə edirik.
3. Dual-write / Dual-read
Hər iki tərəfə yazırıq. Oxu - tədricən yeni sistemə tərcümə. Uyğunsuzluq qeydləri təhlil olunur.
4. Backfill
Tarixi məlumatları partiyalarla yükləyirik. CDC laqına nəzarət edirik, hekayə/cache yükünü izləyirik.
5. Cutover (keçid)
Seqmentlər üzrə kanarim (tenantlar/regionlar/faizlər). Sürətli geri dönüş dəstəkləyir.
6. Contract (təmizləmə)
Köhnə yolları kəsirik, köhnəlmiş sahələri/indeksləri/topikləri «təhlükəsizlik dövründən» sonra silirik.
7. Verifikasiya və retro
Hesabat, metriklər, dərslər, playbook/çek vərəqlərinin yenilənməsi.
7) Miqrasiya zamanı müşahidə və SLO
Texniki SLI: p50/p95/p99, error rate, retry/timeout, utilization, lag CDC, növbə dərinliyi.
Biznes-SLI: əməliyyatların/konvertasiyaların müvəffəqiyyəti, invariantlar (balanslar, limitlər, dublikatlar).
Xüsusi etiketlər: 'migration _ id', 'phase', 'tenant', 'flag _ state'.
Alertlər-mühafizəçilər: quyruqlara və səhvlərə qapılar, SLO-da «avto-stop» (abort).
Müqayisə panelləri: v1 vs v2, əsas metrlərə görə «delta».
8) Geri çəkilmə və qəza ssenariləri
məntiqi geri: bayraqlar/geri trafik marşrutu, backfill dondurma.
Data: «kompensasiya» (Saga), hadisə replay, DLQ → mənbə sistemi.
Secrets/Keys: əvvəlki açar/sertifikat (dual-key) geri.
DNS/trafik: «əks drift» Anycast/ALB, TTL qısa keçid pəncərə.
Rabitə: əvvəlcədən razılaşdırılmış kanal və status formatı.
9) Təhlükəsizlik, gizlilik, uyğunluq
Məlumatların minimuma endirilməsi. Yalnız lazımi sahələri daşıyırıq; anonimləşdirmə profilləri.
Kriptoqrafiya. Simli və dinc şifrləmə, KMS rotasiyası; açar əməliyyatları jurnalı.
Time Access. Miqrasiya jobları üçün müvəqqəti rollar, tamamlandıqdan sonra hüquqların seçilməsi.
İzlər. Log/Tracks PD maskalama, ixrac məhdudiyyətləri.
10) Dəyişikliklər və kommunikasiyanın idarə edilməsi
RACI: kim iddia edir, kim yerinə yetirir, kim məlumatlandırılır.
Freeze-periodlar: miqrasiya pəncərəsinə əhəmiyyətsiz relizlərin qadağan edilməsi.
Statuslar: T-24h, T-1h, başlanğıc, canaring, cutover, finiş, post-dəniz.
Xarici tərəfdaşlar: uyğunluq pəncərələri, müqavilə məktubları, test qum qutusu.
11) Runbook şablonları
11. 1 Backfill (psevdokod)
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 Check-up (snapshot/nümunə)
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 Oxu keçid
flag. enable("read_from_v2", segment="tenants: cohort_A")
monitor(30m)
if SLO_ok(): expand_segment()
else: rollback_segment()
12) Anti-nümunələr
expand-migrate-contract əvəzinə «Böyük partlayış».
CDC olmadan Backfill → əbədi tutma və sürüklənmə.
İdempotentliyin olmaması → duple/çirkli məlumatlar.
Skriptsiz əl addımları → insan səhvləri.
Daşbordsuz miqrasiya → «kor uçuş».
Təsdiqlənməmiş geri dönüş → geri dönüş lazım olduqda işləmir.
İstehlakçılara məhəl qoymamaq (BI/Partners) → «sınıq» hesabatlar/inteqrasiya.
13) Memarın yoxlama siyahısı
1. Məqsəd, sərhədlər, miqrasiya növü və nəticənin invariantları müəyyən edilib?
2. İstehlakçıların və müqavilələrin xəritəsi tərtib edilib, uyğunluq testləri yaşıldır?
3. Daşbordlar, alertlər, 'migration _ id', SLO/guardrails işarələri hazırlanıb?
4. Həyata shadow və/və ya dual-write, backfill idempotent?
5. Bir Practice Rollback Runbook var, Backup Recovery Check?
6. Pəncərə/koordinasiya/rabitə razılaşdırılmış, freeze daxil?
7. Kanarinq və genişləndirmə/dayandırma meyarları ilə addım-addım plan hazırdır?
8. Təhlükəsizlik/uyğunluq: açarlar, girişlər, PII-sanitariya?
9. Sənədləşmə/SDK/Species eyni buraxılış dövrü yenilənir?
10. Post-dəniz və tamamlandıqdan sonra playbook yeniləmə planlaşdırılır?
Nəticə
Miqrasiya pleybukları risklərin idarə edilməsinin memarlıq təcrübəsidir: kiçik geri dönən addımlar, şəffaf metriklər, hazır geri dönüş və «expand-migrate-contract» intizamı. Təsvir olunan şablonları izləyərək, iş və istifadəçi inamını qoruyaraq, boş və sürprizsiz sxemləri, məlumatları, xidmətləri və bölgələri köçürürsünüz.