Migratsiya pleybuklari
1) Migratsiyalar tasnifi
DB sxemalari: ustunlarni qo’shish/o’zgartirish, indekslar, shardlash, kalitlar turini o’zgartirish.
Maʼlumotlar: ommaviy backfill/cleanup, normallashtirish, retenshn/arxivlash.
Servislar va API: endpointlarni o’zgartirish, versiyalash, kontraktlarni refaktoring qilish.
Navbatlar/shinalar: topiklarni koʻchirish, partiyalashtirish kalitlarini oʻzgartirish, voqealar formati.
Infratuzilma: yangi/K8s/bulutga/mintaqaga oʻtish ,/KMS sirlarini oʻzgartirish.
Omborlar va tahlillar: dvigatelni o’zgartirish (OLTP/OLAP), datasetlarni formatlash/partiyalashtirish.
Xavfsizlik/komplayens: kalitlarni rotatsiya qilish, «uchish» shifrlash, ma’lumotlarni geo-lokalizatsiya qilish.
2) Muvaffaqiyatli migratsiya tamoyillari
1. Expand → Migrate → Contract. Avval sxema/xatti-harakatlarni kengaytiramiz (mos keladi), so’ngra ma’lumotlar/trafikni ko’chiramiz, keyin eskisini olib tashlaymiz.
2. Shadow & Dual. Soya tekshiruvi (shadow read/write) va validatsiya uchun ikki marta yozish.
3. Ficha bayroqlari va «qizil tugma». Tez oʻchirish, bosqichma-bosqich yoqish (persentil/tenantlar/mintaqalar).
4. Idempotentlik va takrorlanuvchanlik. Skriptlar va vazifalarni nojo’ya ta’sirlarsiz qayta ishga tushirish mumkin.
5. O’zgarishlardan oldin kuzatilishi. Dashbordlar/alertlar oldindan, loglar/treyslarda migratsiya markerlari.
6. Orqaga qaytish hujjatlashtirilgan. Qaytarish Runbook ham oldinga reja kabi batafsil.
7. Mini-partiyalar va pauzalar. SLI va biznes invariantlarini tekshirib, kichik qismlarda ko’chib o’tamiz.
3) Inventarizatsiya va qaramlikni tahlil qilish
Iste’molchilar xaritasi: servislar, joblar, hisobotlar, tashqi sheriklar, BI/ETL, vebxuklar.
Kontraktlar va sxemalar: API/voqealar versiyasi, backward/forward mosligi.
Foydalanuvchilar/sirlar: kim o’qiydi/yozadi, qayerda keshi/nusxalar.
Domen invariantlari: o’ziga xoslik, balans, idempotentlik, hisobot sutkalari.
Hajmi/tezligi: maʼlumotlar oʻlchami, RPS, eng yuqori oynalar, RPO/RTO.
4) Pleybukning kanonik shabloni (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) Migratsiya patternlari
5. 1 DB sxemalari (RDBMS/NoSQL)
Qoʻshing - oʻzgartirmang. Yangi nullable ustunlar/indekslar → kod eski va yangi oʻqiydi.
Onlayn qayta qurish. Onlayn indekslar/parallel DDLdan foydalaning.
Seriallashtirish versiyalari. JSON/Proto/Euro ustunlarida payload versiyasi.
Kalitlar koʻchishi. PK almashtirilganda - vaqtinchalik muvofiqlik jadvali + trigger/CDC.
5. 2 Maʼlumotlar (backfill/cleanup)
CDC + backfill. Avval oʻzgarishlar oqimi (orqada qolmaslik uchun), keyin paketli backfill.
Partiyalar va muddatlar. Laglarni nazorat qiluvchi kichik batchlar, chekpoyntlar va qayta ishga tushirish.
Idempotent yangilanishlar. Tabiiy kalitlar/versiyalar boʻyicha Upsert.
5. 3 Voqealar va navbatlar
Hodisalar versiyasi.’event _ type @vN’, konsumerlar notanish maydonlarga eʼtibor bermaydi.
Topiklarni ko’chirish. Ikki marta e’lon qilish, iste’molchilar ikkalasidan barqarorlashgunga qadar o’qiydilar; keyin eskisini «kesish».
Partition key. Kalit migratsiyasi - muvofiqlik va idempotentlik xaritasi bilan qayta nashr etish orqali.
5. 4 Servislar va API
Blue/Green/Canary. Hovuzni isitish, qisman trafik, tez qaytish.
Ficha bayroqlari. Tenant/mintaqa/foiz bo’yicha, kuzatilayotgan qo’shilish.
Kontraktlar. CDC shartnomalari va muvofiqlik testlari - almashtirilgunga qadar.
5. 5 Mintaqalar/klaudlar
Geo-qoʻshaloq yozuv. Ma’lumotlar ikki mintaqaga yoziladi; oʻqish - yaqinlik.
State transfer. Rasm + replikatsiya; «qizil chiziq» RPO, DNS/Anycast yuklash.
Yurisdiksiyalar. Ma’lumotlarning roziligi/mahalliylashtirilishi, to’plamlarni olib chiqish uchun «taqiqlangan» ro’yxatlar.
6) Ijro fazalari (batafsil)
1. Tayyorlash
Dashbordlar, alertlar, limitlar, ficha-bayroqlar, tiklanish testiga ega bekaplar, steyjada haydash.
2. Shadow (soyali tekshirish)
Foydalanuvchilarga ta’sir qilmasdan yangi tizimga so’rovlar/yozuvlar ko’zgu. Javoblarni/holatlarni taqqoslaymiz.
3. Dual-write / Dual-read
Ikki tomonga ham yozamiz. O’qish asta-sekin yangi tizimga o’tkaziladi. Nomuvofiqlik holatlari tahlil qilinadi.
4. Backfill
Tarixiy maʼlumotlarni partiyalarga toʻldiramiz. CDCni nazorat qilish, storij/kesh yukini kuzatish.
5. Cutover (almashtirish)
Segmentlar bo’yicha kanarim (tenantlar/hududlar/foizlar). Tez qaytishni qoʻllab-quvvatlaymiz.
6. Contract (tozalash)
Eski yo’llarni kesib tashlaymiz, eskirgan maydonlarni/indekslarni/topiklarni «xavfsizlik davri» dan keyin olib tashlaymiz.
7. Verifikatsiya va retro
Hisobot, metrika, darslar, pleybuk/chek varaqlarini yangilash.
7) Migratsiya vaqtida kuzatish va SLO
Texnik SLI: p50/p95/p99, error rate, retry/timeout, utilization, lag CDC, navbatlar chuqurligi.
Biznes-SLI: tranzaksiya/konversiya muvaffaqiyati, invariantlar (balanslar, limitlar, dublikatlar).
Maxsus belgilar:’migration _ id’,’phase’,’tenant’,’flag _ state’.
Alertlar-qo’riqchilar: dumlar ostonalari va xatolar, SLO bo’yicha «avto-stop» (abort).
Qiyosiy panellar: v1 vs v2, kalit metriklar bo’yicha «delta».
8) Orqaga qaytish va avariya stsenariylari
Mantiqiy orqaga qaytish: bayroqlar/orqaga harakatlanish, backfill muzlatish.
Ma’lumotlar: «kompensatsiyalar» (Saga), voqealar nusxasi, DLQ → boshlang’ich tizim.
Sirlar/kalitlar: oldingi kalit/sertifikatga qaytarish (dual-key).
DNS/trafik: «teskari drift» Anycast/ALB, TTL migratsiya oynasiga qisqa.
Kommunikatsiyalar: oldindan kelishilgan kanal va maqom formati.
9) Xavfsizlik, maxfiylik, komplayens
Maʼlumotlarni minimallashtirish. Faqat kerakli maydonlarni ko’chirish; nusxadagi anonimlashtirish profillari.
Kriptografiya. Simda va tinch holatda shifrlash, KMS rotatsiyasi; kalitlar bilan operatsiyalar jurnali.
Vaqt boʻyicha kirish. Migratsiya joblari uchun vaqtinchalik rollar, tugatilgandan keyin huquqlarni tanlash.
Izlar. Loglarda/treyslarda PDni yashirish, eksportni cheklash.
10) O’zgarishlar va kommunikatsiyalarni boshqarish
RACI: kim tasdiqlaydi, kim bajaradi, kim xabardor qilinadi.
Freeze-davrlar: migratsiya oynasida ahamiyatsiz relizlarni taqiqlash.
Maqomlari: T-24h, T-1h, start, kanaring, cutover, marra, post-dengiz.
Tashqi hamkorlar: muvofiqlik oynalari, shartnoma xatlari, sinov qum qutisi.
11) Runbook namunalari
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 Tekshirilganlik (snepshot/tanlov)
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 Oʻqishni oʻzgartirish
flag. enable("read_from_v2", segment="tenants: cohort_A")
monitor(30m)
if SLO_ok(): expand_segment()
else: rollback_segment()
12) Anti-patternlar
expand-migrate-contract o’rniga «katta portlash».
CDC’siz Backfill → abadiy ushlash va drift.
Idempotentlik yo’qligi → dubli/iflos ma’lumotlar.
Skriptsiz qoʻl qadamlari → inson xatolari.
Dashbordsiz/qo’riqchilarsiz migratsiya → «ko’r-ko’rona parvoz».
Tasdiqlanmagan qaytish → qaytish kerak boʻlganda ishlamaydi.
Iste’molchilarni e’tiborsiz qoldirish (BI/sheriklar) → «buzilgan» hisobotlar/integratsiyalar.
13) Arxitektorning chek-varaqasi
1. Maqsad, chegaralar, migratsiya turi va natija invariantlari aniqlanganmi?
2. Iste’molchilar va kontraktlar xaritasi tuzildi, mos keladigan testlar yashil bo’ladimi?
3. Dashbordlar, alertlar,’migration _ id’, SLO/guardrails belgilari tayyorlandi?
4. Amalga oshirilgan shadow va/yoki dual-write, backfill idempotenten?
5. Bajariladigan rollback runbook bormi?
6. Oyna/muvofiqlashtirish/kommunikatsiyalar kelishilgan, freeze yoqilganmi?
7. Kanaring va kengaytirish/to’xtash mezonlari bilan bosqichma-bosqich reja tayyormi?
8. Xavfsizlik/komplayens: kalitlar, kirish, PII-sanitariya?
9. Hujjatlar/SDK/spekulalar xuddi shu reliz davrida yangilanadimi?
10. Tugallangandan keyin post-dengiz va pleybukni yangilash rejalashtirilganmi?
Xulosa
Migratsiya pleybuklari - bu xavfni boshqarishning arxitektura amaliyoti: kichik qaytariladigan qadamlar, shaffof metriklar, tayyor orqaga qaytish va «expand-migrate-contract» intizomi. Ta’riflangan shablonlarga amal qilib, siz sxemalar, ma’lumotlar, xizmatlar va hududlarni ishlamay va kutilmagan hodisalarsiz ko’chib o’tib, biznes invariantlari va foydalanuvchilarning ishonchini saqlab qolasiz.