Geçiş oyun kitapları
1) Göçlerin sınıflandırılması
DB şemaları: sütun ekleme/değiştirme, indeksler, parçalama, anahtar türünü değiştirme.
Veri: toplu dolgu/temizleme, normalleştirme, saklama/arşivleme.
Hizmetler ve API'ler: uç noktaları değiştirme, sürüm oluşturma, sözleşme yeniden düzenleme.
Kuyruklar/otobüsler: konuların taşınması, üyelik anahtarlarının değiştirilmesi, etkinlik formatı.
Altyapı: Yeni bir cluster/K8s/cloud/region geçmek, sırları/KMS'yi değiştirmek.
Depolama ve analitik: motorun değiştirilmesi (OLTP/OLAP), veri kümelerinin biçimlendirilmesi/bölümlendirilmesi.
Güvenlik/uyumluluk: anahtar rotasyonu, anında şifreleme, verilerin coğrafi lokalizasyonu.
2) Başarılı göç ilkeleri
1. Genişlet - Göç Et - Sözleşme. İlk olarak, şemayı/davranışı (uyumlu) genişletiyoruz, ardından verileri/trafiği aktarıyoruz, ardından eskisini kaldırıyoruz.
2. Gölge ve Çift. Doğrulama için gölge okuma/yazma ve çift giriş.
3. Özellik bayrakları ve "kırmızı düğme. "Hızlı kapatma, adım adım etkinleştirme (yüzdelik/kiracılar/bölgeler).
4. Idempotency ve tekrarlanabilirlik. Komut dosyaları ve görevler yan etkiler olmadan yeniden başlatılabilir.
5. Değişikliklerden önce gözlemlenebilirlik. Önceden panolar/uyarılar, günlüklerde/izlerde geçiş işaretleyicileri.
6. Geri dönüş belgelendi. Rollback runbook, ileriye dönük plan kadar ayrıntılıdır.
7. Mini oyunlar ve duraklamalar. SLI ve iş değişmezlerini kontrol ederek küçük porsiyonlarda göç ediyoruz.
3) Envanter ve bağımlılık analizi
Tüketici haritası: hizmetler, işler, raporlar, dış ortaklar, BI/ETL, web kitapları.
Sözleşmeler ve şemalar: API/olay sürümleri, geriye/ileriye uyumluluk.
Erişimler/sırlar: Önbelleklerin/ipuçlarının nerede olduğunu okuyan/yazan.
Alan değişmezleri: benzersizlik, denge, idempotency, raporlama günü.
Hacimler/hızlar: veri boyutu, RPS, tepe pencereleri, RPO/RTO.
4) Kanonik oyun kitabı şablonu (YAML iskeleti)
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) Göç kalıpları
5. 1 DB Şemaları (RDBMS/NoSQL)
Ekle - değiştirme. Yeni nullable sütunlar/indeksler - kod eski ve yeni okur.
Online yeniden yapılanma. Çevrimiçi dizinleri/eşzamanlı DDL'leri kullanın.
Serileştirme versiyonları. Yükü JSON/Proto/Avro sütunlarına yükleyin.
Anahtar geçiş. PK değiştirirken - yazışmaların zaman tablosu + tetik/CDC.
5. 2 Veri (dolgu/temizleme)
CDC + dolgu. İlk olarak, değişikliklerin akışı (ayak uydurmak için), sonra toplu dolgu.
Partiler ve son tarihler. Gecikme kontrolü, kontrol noktaları ve yeniden başlatma ile küçük partiler.
Idempotent güncellemeleri. Doğal anahtarlar/sürümler tarafından Upsert.
5. 3 Olaylar ve kuyruklar
Sürüm oluşturma olayları. 'event _ type @ vN', tüketiciler bilinmeyen alanları görmezden gelir.
Hareketli konular. Çift yazı, tüketiciler stabilize etmeden önce her ikisinden de okur; Sonra eskisini "kesmek".
Bölme anahtarı. Anahtar göç - yazışmalar ve idempotency bir harita ile yeniden aracılığıyla.
5. 4 Hizmetler ve API'ler
Mavi/Yeşil/Kanarya. Havuz ısınması, kısmi trafik, hızlı geri dönüş.
Ficha bayrakları. Kiracılar/bölgeler/yüzdeler tarafından, gözlemlenen dahil etme.
Sözleşmeler. CDC sözleşmeleri ve uyumluluk testleri - değiştirmeden önce.
5. 5 Bölge/Klad
Geo-double kayıt. Veriler iki bölgede kaydedilir; okumalar - yakınlığa göre.
Devlet transferi. Anlık görüntü + çoğaltma; RPO "kırmızı çizgi", DNS/Anycast aktarması.
Yetki alanları. Verilerin rızası/lokalizasyonu, kitlerin çıkarılması için "yasak" listeleri.
6) Yürütme aşamaları (ayrıntılı)
1. Hazırlık
Panolar, uyarılar, sınırlar, özellik bayrakları, kurtarma testi olan yedeklemeler, bir sahnede çalışır.
2. Gölge (gölge denetimi)
Kullanıcıları etkilemeden yeni sisteme istekleri/yazıları yansıtın. Yanıtları/durumları karşılaştırın.
3. Çift yazma/Çift okuma
Her iki yönde de yazıyoruz. Okumalar - yavaş yavaş yeni bir sisteme aktarılır. Uyumsuzluk kayıtları analiz edilir.
4. Geri dolgu
Tarihsel verileri gruplar halinde yüklüyoruz. CDC gecikmesini kontrol ediyoruz, hikaye/önbellekteki yükü izliyoruz.
5. Kesme (anahtarlama)
Segmentlere göre Canarim (kiracılar/bölgeler/yüzdeler). Hızlı bir geri dönüşü destekliyoruz.
6. Sözleşme (temizlik)
Eski yolları kesin, "güvenlik dönemi'nden sonra eski alanları/dizinleri/konuları silin.
7. Doğrulama ve retro
Rapor, metrikler, dersler, güncelleme oyun kitabı/kontrol listeleri.
7) Göç sırasında gözlenebilirlik ve SLO
Teknik SLI'ler: p50/p95/p99, hata oranı, yeniden deneme/zaman aşımı, kullanım, gecikme CDC, kuyruk derinliği.
İş SLI: işlemlerin/dönüşümlerin başarısı, değişmezler (bakiyeler, limitler, kopyalar).
Özel etiketler: 'migration _ id', 'phase', 'tenant', 'flag _ state'.
Uyarı korumaları: kuyruklar ve hatalar için eşikler, SLO için "otomatik durdurma" (iptal).
Karşılaştırma panelleri: v1 vs v2, anahtar metriklere göre delta.
8) Geri alma ve acil durum senaryoları
Mantıksal geri alma: bayraklar/trafik geri yönlendirme, geri doldurma dondurma.
Veri: "compensation" (Saga), event replay, DLQ - source system.
Sırlar/anahtarlar: Önceki anahtara/sertifikaya geri dön (çift anahtar).
DNS/trafik: "ters sürüklenme" Anycast/ALB, geçiş penceresinde TTL kısa.
İletişim: Önceden kararlaştırılmış kanal ve durum biçimi.
9) Güvenlik, gizlilik, uyumluluk
Veri minimizasyonu. Sadece gerekli alanları transfer ediyoruz; kopyadaki anonimleştirme profilleri.
Kriptografi. Şifreleme "telde've" dinlenirken ", KMS rotasyonu; Anahtar işlem günlüğü.
Zaman erişiyor. Göç işleri için geçici roller, tamamlandıktan sonra hakların seçimi.
Ayak izleri. PD günlüklerde/izlerde maskeleme, ihracat kısıtlamaları.
10) Değişim Yönetimi ve İletişim
RACI: Kimin performans gösterdiğini iddia eden, kimin bilgilendirildiği.
Dönemleri dondurma: geçiş penceresinde alakasız sürümleri yasaklar.
Statüler: T-24h, T-1h, başlangıç, kanarya, kesme, bitiş, deniz sonrası.
Harici ortaklar: uyumluluk pencereleri, sözleşme mektupları, test sanal alanı.
11) Runbook şablonları
11. 1 Geri doldurma (pseudocode)
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 (anlık görüntü/örnek)
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 Anahtarlama okumaları
flag. enable("read_from_v2", segment="tenants: cohort_A")
monitor(30m)
if SLO_ok(): expand_segment()
else: rollback_segment()
12) Anti-desenler
Genişlet-göç et-kontratı yerine "büyük patlama".
CDC olmadan Backfill - sonsuz yakalama ve sürüklenme.
Idempotency yok - kopyalar/kirli veriler.
Komut dosyası olmayan manuel adımlar - insan hataları.
Gösterge panoları/korumaları olmadan geçiş - "kör uçuş".
Onaylanmamış geri alma - gerektiğinde geri alma çalışmaz.
Tüketiciler göz ardı ediliyor (BI/ortaklar) - kırık raporlar/entegrasyonlar.
13) Mimar kontrol listesi
1. Hedef, sınırlar, göç türü ve sonuç değişmezleri tanımlandı mı?
2. Tüketici ve sözleşme haritası hazırlandı, uyumluluk testleri yeşil mi?
3. Hazırlanan panolar, uyarılar, etiketler 'migration _ id', SLO/korkuluklar ayarlandı mı?
4. Uygulanan gölge ve/veya çift yazma, geri doldurma idempotent?
5. Pratik bir geri dönüş runbook'u var mı, yedeklemeden kurtarmayı kontrol edin?
6. Pencere/koordinasyon/iletişim kararlaştırıldı, donun?
7. Kanarya ve genişleme/durdurma kriterleri ile adım adım plan hazır mı?
8. Güvenlik/uyumluluk: anahtarlar, erişimler, PII sanitasyonu?
9. Dokümantasyon/SDK/spec aynı sürüm döngüsünde güncelleniyor mu?
10. Deniz sonrası ve tamamlandıktan sonra bir oyun kitabı güncellemesi planlandı mı?
Sonuç
Göç oyun kitapları, risk yönetiminin mimari bir uygulamasıdır: küçük geri dönüşümlü adımlar, şeffaf metrikler, hazır geri alma ve "genişletme-taşıma-sözleşme" disiplini. Açıklanan şablonları izleyerek, şemaları, verileri, hizmetleri ve bölgeleri kesinti ve sürpriz olmadan geçirirken, iş değişmezlerini ve kullanıcı güvenini korursunuz.