
# MLOps Boru Hatlarında Formize ile Sürekli Veri Yönetişimi

Büyük ölçekli makine öğrenimi modelleri üreten işletmeler bir paradoksla karşı karşıyadır: ne kadar hızlı yineleme yaparlarsa, eğitim, doğrulama ve çıkarımda kullanılan verilerin iç politikalar ve dış düzenlemelerle uyumlu olduğunu garanti etmek o kadar zorlaşır. Geleneksel veri yönetişimi yaklaşımları—manuel denetimler, periyodik raporlar ve statik soy ağacı haritaları—modern MLOps iş akışlarının hızına ayak uyduramaz.

Formize, düşük kodlu bir veri soy ağacı ve uyumluluk motoru, tam da bu zorluk için geliştirilmiştir. Formize'i CI/CD boru hattına entegre ederek, organizasyonlar **soy ağacını gerçek zamanlı yakalayabilir**, **politikayı kod olarak zorlayabilir** ve **geliştiricilerin ve denetçilerin anında sorgulayabileceği kalite panoları** sunabilir.

Bu makalede şunları yapacağız:

1. Sürekli veri yönetişiminin temel kavramlarını özetleyeceğiz.  
2. Formize'in popüler MLOps araçlarıyla (GitHub Actions, Jenkins, Kubeflow, MLflow) entegrasyonunu göstereceğiz.  
3. Kaynak kontrol kancalarından otomatik uyumluluk kontrollerine kadar tam uç bir uygulamayı adım adım anlatacağız.  
4. Veri akışını görselleştiren bir Mermaid diyagramı sağlayacağız.  
5. Ölçeklendirme, güvenlik ve geleceğe uyum konularını tartışacağız.

> **Ana çıkarım:** Formize CI/CD boru hattınızda yerel bir adım haline geldiğinde, veri soy ağacı, politika uygulaması ve kalite izleme *periyodik* değil *sürekli* hale gelir.

---

## 1. Sürekli Yönetişimin Neden Önemli Olduğu

| Geleneksel Yaklaşım | Sürekli Yaklaşım |
|----------------------|----------------------|
| Denetimler üç ayda bir veya bir ihlal sonrası çalıştırılır | Denetimler her commit, build ve dağıtımda çalıştırılır |
| Manuel soy ağacı diyagramları güncelliğini yitirir | Otomatik soy ağacı grafikleri canlı durumu yansıtır |
| Politika ihlalleri geç keşfedilir, düzeltmesi maliyetli | Politika ihlalleri pipeline'ı anında engeller |
| Teknik olmayan paydaşlar için sınırlı görünürlük | Gerçek zamanlı panolar veri sorumlularını ve denetçileri güçlendirir |

**Periyodik**ten **sürekli**ye geçiş, Waterfall’dan DevOps’a evrimi yansıtır. Otomatik testlerin kod hatalarını erken yakaladığı gibi, otomatik yönetişim de veri hatalarını erken yakalar.

---

## 2. Temel Bina Blokları

1. **Formize Motoru** – Soy ağacı yakalama, politika tanımı ve denetim izi depolama için bir API sağlar.  
2. **MLOps Orkestratörü** – Jenkins, GitHub Actions, Azure Pipelines veya Kubeflow pipeline’ları model eğitimi ve dağıtımını yönetir.  
3. **Artefakt Deposu** – S3, Azure Blob veya GCS, veri setleri, model ikili dosyaları ve özellik mağazalarını barındırır.  
4. **Policy‑as‑Code** – GDPR, HIPAA veya iç veri‑kullanım politikalarını kod olarak tanımlayan YAML/JSON kuralları.  
5. **Gözlemlenebilirlik Katmanı** – Grafana/Prometheus panoları, Formize metriklerini gösterir.

Tüm bileşenler **RESTful uç noktaları** veya **olay akışları** (Kafka, Pub/Sub) üzerinden iletişim kurar. Aşağıdaki Mermaid diyagramı veri akışını gösterir.

```mermaid
graph LR
    subgraph CI_CD["CI/CD Pipeline"]
        A["Git Commit"] --> B["Build Stage"]
        B --> C["Test Stage"]
        C --> D["Training Stage"]
        D --> E["Model Registry"]
    end

    subgraph Governance["Formize Governance"]
        F["Lineage Capture"] --> G["Policy Engine"]
        G --> H["Compliance Report"]
        H --> I["Dashboard"]
    end

    D -->|Dataset Access| F
    E -->|Model Artifact| F
    G -->|Violation Event| CI_CD
    CI_CD -->|Fail Build| B
    I -->|Alert| Developers
```

*All node labels are wrapped in double quotes as required for Mermaid.*

---

## 3. Adım‑Adım Entegrasyon

### 3.1. Policy‑as‑Code Tanımlama

Depo köküne `policies.yaml` dosyasını ekleyin:

```yaml
policies:
  - id: "PII-001"
    description: "Açık rıza olmadan eğitimde PII alanları kullanılmamalıdır"
    condition: "dataset.contains('ssn') or dataset.contains('email')"
    action: "block"
    severity: "high"

  - id: "DATA-RETENTION-01"
    description: "5 yıldan daha eski eğitim verileri arşivlenmelidir"
    condition: "dataset.age > 5y"
    action: "warn"
    severity: "medium"
```

Formize, **Soy Ağacı Yakalama** adımında bu dosyayı okur ve gelen veri seti meta verilerine karşı her kuralı değerlendirir.

### 3.2. Pipeline’a Formize Kancası Eklemek

Aşağıdaki GitHub Actions snippet’i, eğitim işi tamamlandıktan sonra çalışır:

```yaml
name: MLOps CI/CD

on:
  push:
    branches: [ main ]

jobs:
  train-and-govern:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.11'

      - name: Install dependencies
        run: pip install -r requirements.txt

      - name: Run training script
        id: train
        run: |
          python train.py --data s3://bucket/raw-data/2024-08-01.csv --output model.pkl

      - name: Capture lineage & enforce policy
        env:
          FORMIZE_API_KEY: ${{ secrets.FORMIZE_API_KEY }}
        run: |
          curl -X POST https://api.formize.io/v1/lineage \
            -H "Authorization: Bearer $FORMIZE_API_KEY" \
            -H "Content-Type: application/json" \
            -d @- <<EOF
          {
            "pipeline_id": "github-actions-mlops",
            "run_id": "${{ github.run_id }}",
            "artifact": "model.pkl",
            "dataset": "s3://bucket/raw-data/2024-08-01.csv",
            "metadata": {
              "commit_sha": "${{ github.sha }}",
              "author": "${{ github.actor }}",
              "timestamp": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
            },
            "policy_file": "policies.yaml"
          }
          EOF
```

Herhangi bir politika `block` döndürürse adım sıfır‑olmayan bir durumla çıkar, bu da tüm işi başarısız kılar. Bu **fail‑fast** davranışı, uyumsuz verinin üretime ulaşmasını engeller.

### 3.3. Soy Ağacını Merkezi Bir Grafikte Saklamak

Formize, yönettiği yönlendirilmiş asiklik grafiği (DAG) otomatik olarak iç Neo4j deposuna yazar. Cypher ile sorgulayabilirsiniz:

```cypher
MATCH (d:Dataset)-[:USED_IN]->(t:TrainingRun)-[:PRODUCED]->(m:Model)
WHERE d.name CONTAINS 'raw-data'
RETURN d.name, t.run_id, m.version
ORDER BY t.timestamp DESC
LIMIT 10;
```

Sonuç, Formize UI’da görselleştirilebilir veya Grafana’ya özel panolar için aktarılabilir.

### 3.4. Gerçek‑Zaman Dashboard’u

Formize metriklerini toplayan bir Prometheus exporter oluşturun:

```go
package main

import (
    "net/http"
    "github.com/prometheus/client_golang/prometheus"
    "github.com/prometheus/client_golang/prometheus/promhttp"
)

var (
    policyViolations = prometheus.NewCounterVec(
        prometheus.CounterOpts{
            Name: "formize_policy_violations_total",
            Help: "Toplam politika ihlali sayısı",
        },
        []string{"policy_id", "severity"},
    )
)

func main() {
    // Formize'den webhook olayları aldığımızı varsayalım
    http.HandleFunc("/webhook", func(w http.ResponseWriter, r *http.Request) {
        // JSON ayrıştır, sayaçları artır...
    })
    prometheus.MustRegister(policyViolations)
    http.Handle("/metrics", promhttp.Handler())
    http.ListenAndServe(":9090", nil)
}
```

Grafana artık `formize_policy_violations_total` metriğini pipeline başına çizebilir ve veri sorumlularına anlık görünürlük sağlar.

---

## 4. Yönetişim Katmanını Ölçeklendirmek

| Zorluk | Önerilen Çözüm |
|-----------|----------------------|
| **Yüksek frekanslı pipeline’lar** (günde yüzlerce çalıştırma) | Formize’i **kümeleme** modunda, bir yük dengeleyicinin arkasına dağıtın; **toplu veri alımı** özelliğini etkinleştirin. |
| **Çok‑bulut veri kaynakları** | Formize’in **bulut‑agnostik bağlayıcılarını** (S3, Azure Blob, GCS) kullanın ve tek bir **kaynak tanımlayıcı şeması** tanımlayın. |
| **Ekipler arası politika sahipliği** | Formize’in **rol‑bazlı erişim kontrolü (RBAC)** sayesinde her domain ekibi kendi politika dosyalarını yönetirken, merkezi bir ekip motoru denetler. |
| **Denetim izi değişmezliği** | Formize’i bir **blockchain ankrajı** (Ethereum veya Hyperledger gibi) ile eşleştirerek her soy ağacı işlemini kriptografik olarak mühürleyin. |

---

## 5. Güvenlik ve Uyumluluk Hususları

1. **API Anahtarı Yönetimi** – `FORMIZE_API_KEY` değerini gizli yöneticilerde (GitHub Secrets, Azure Key Vault) saklayın. Anahtarları üç ayda bir döndürün.  
2. **Veri Minimizasyonu** – Formize’e yalnızca **meta verileri** (hash, şema, zaman damgası) gönderin; asla ham PII gönderilmeyin.  
3. **İletişimde Şifreleme** – Tüm Formize uç noktaları TLS 1.3 zorunluluğu taşır.  
4. **Saklama Politikaları** – Formize’i, organizasyonun saklama penceresiyle uyumlu olacak şekilde, eski soy ağaçlarını silmek üzere yapılandırın; bu, [GDPR](https://gdpr.eu/) “unutulma hakkı” ile örtüşür.

---

## 6. Yönetişim Yığınına Gelecek‑Hazırlığı

- **AI‑destekli politika üretimi**: LLM’leri, gözlemlenen veri‑kayma desenlerine dayanarak yeni politika kuralları önermesi için kullanın.  
- **Olay‑tabanlı mimari**: HTTP çağrıları yerine Kafka konularını (`lineage.events`, `policy.violations`) kullanarak ultra düşük gecikme elde edin.  
- **Kendin‑kullan portalı**: Veri bilimcilerin, otomatik onay akışlarıyla geçici politika istisnaları talep edebileceği bir Formize‑güçlü UI sağlayın.

---

## 7. Özet

Formize’i MLOps CI/CD pipeline’larına yerleştirmek, veri yönetişimini **reaktif bir kontrol noktasından** **sürekli, otomatik bir korumaya** dönüştürür. Soy ağacını her aşamada yakalayarak, policy‑as‑Code’u değerlendirerek ve gerçek‑zaman metriklerini ortaya koyarak, organizasyonlar:

- Uyumluluk riskini ve denetim çabasını azaltır.  
- Veri kalitesinden ödün vermeden model teslimini hızlandırır.  
- Regülatörler ve iç denetçiler için şeffaf, denetlenebilir izler sağlar.

Tek bir pipeline ile başlayın, politika tanımlarını yineleyin ve yatay olarak ölçekleyin. Sonuç, modern geliştirme hızına ayak uyduran, güvenilir bir AI teslim platformudur.