Zero-Downtime dbt Deploy: Slim CI ile Kesintisiz Üretim
Büyük ölçekli kurumsal veri ambarlarında dbt modellerini dakikalar içinde test edip sıfır kesintiyle canlıya almanın yöntemi: State deferral, AST graph diffing ve geçici ephemeral PR şeması mimarisi.
1. Kurumsal Veri Ambarlarında CI/CD Tıkanıklığı ve Maliyet Krizi
Kurumsal ölçekli modern veri ambarlarında (Snowflake, Google BigQuery, Databricks, Redshift) 500'den fazla dbt modeli bulunması sıradan bir durumdur. Veri mühendisleri veya analistler yeni bir özellik eklediğinde ya da tek bir SQL modelinde filtreleme mantığını güncellediğinde, tüm projeyi sıfırdan derleyip çalıştırmak şu kritik krizlere yol açar:
- Aşırı Uzun Pipeline Süreleri: 500+ modelin full rebuild edilmesi 45 ila 90 dakika sürebilir.
- Yüksek Bulut İşlem Maliyetleri: Her PR için tüm tarihsel tabloların baştan taranması binlerce dolarlık gereksiz warehouse kredisi harcar.
- Deploy Kuyrukları: Uzun süren CI kuyrukları geliştirme hızını yavaşlatır.
2. Slim CI ve State Deferral'ın Çalışma Mantığı
Slim CI, dbt'nin state:modified+ seçicisi ve --defer bayrağıyla çalışan akıllı bir grafik farkı (DAG diff) optimizasyonudur.
- 1Üretim Durumunun İndirilmesi: CI pipeline'ı başladığında, ana daldaki (main) son başarılı derleme sonucu oluşan
manifest.jsondosyası S3 veya GCS deposundan indirilir. - 2Değişen Düğümlerin Tespiti: dbt derleyicisi, mevcut PR dalındaki kod ile üretim manifestini karşılaştırarak yalnızca değiştirilen modelleri ve direct downstream bağımlılıkları işaretler.
- 3Upstream Modellerin Ertelenmesi: Değişmeyen upstream tablolar için yeni bir derleme yapılmaz; dbt
--defersayesinde bu modelleri doğrudan canlı üretim tablolarına bağlar.
| Özellik | Geleneksel Full CI | dbt Slim CI |
|---|---|---|
| Ortalama Çalışma Süresi | 45 - 90 Dakika | 2 - 5 Dakika |
| İşlenen Model Sayısı | Tüm Proje (500+) | Yalnızca Değişenler (1 - 10) |
| Bulut Hesaplama Maliyeti | %100 (Yüksek) | %10 - %15 (Düşük) |
| Geliştirici Geri Bildirimi | Yavaş | Anlık (< 5 dk) |
3. GitHub Actions ile Üretim Düzeyinde Slim CI Pipeline'ı
name: dbt Slim CI Pipeline
on:
pull_request:
branches: [main]
paths:
- 'models/**'
- 'macros/**'
- 'dbt_project.yml'
jobs:
slim_ci:
name: Run Slim CI & Tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install dbt
run: pip install dbt-snowflake==1.8.4
- name: Download Production State
run: aws s3 cp s3://company-dbt-artifacts/prod/manifest.json ./state/manifest.json
- name: Execute dbt Slim Build
run: dbt build --select state:modified+ --defer --state ./state --target pr_ci4. Ephemeral (Geçici) PR Şemaları ve Otomatik Teardown
Her PR için ci_pr_${PR_NUMBER} adında izole bir şema oluşturulur. PR birleştirildiğinde (merged) veya kapatıldığında bir GitHub Actions hook'u tetiklenerek bu geçici şema tamamen temizlenir (DROP SCHEMA IF EXISTS ci_pr_142 CASCADE).
Restore Tatbikatı & Kurtarma Deneyiminizi Paylaşın
Altyapınızdaki gerçek tatbikat sonuçlarını, RTO/RPO hedeflerinizi ve karşılaştığınız operasyonel engelleri anonim veya isimli olarak paylaşın. Sektör benchmark'ına katkıda bulunun.
Bu mimariyi üretimde test etmek ister misiniz?
DataOpsphere CI/CD şablonlarını ve Docker Compose ortamlarını kopyalayıp hemen çalıştırabilirsiniz.