Ana içeriğe geç

ADR-002: KV Geçmişi için Git

Durum

Kabul edildi (2026-04-04)

Bağlam

Consul KV'de yerleşik versiyon geçmişi yok. HashiCorp bu özelliği açıkça reddetti (60+ upvote'a rağmen). Her KV değişikliğini zaman içinde takip etmek, denetim izi (audit trail) oluşturmak ve belirli bir zamana geri yükleme yapabilmek için bir versiyon saklama mekanizmasına ihtiyacımız vardı.

Karar

Git versiyon deposu olarak kullanılacak. Her KV değişikliği dosya sistemine serialize edilip Git repository'sine commit edilecek.

Sonuçlar

Olumlu

  • Ücretsiz versiyon geçmişi: git log ile her değişikliğin ne zaman, ne olduğu görülür
  • Ücretsiz diff: git diff ile iki versiyon arasındaki fark anında görüntülenebilir
  • Ücretsiz denetim izi: Kim, ne zaman, neyi değiştirdi -- hepsi commit'te
  • Geliştiriciler Git'i zaten biliyor: Ekstra araç veya öğrenme eğrisi yok
  • Kolay point-in-time restore: git checkout <revision> ile istenen ana dönme
  • GitOps uyumu: Mevcut GitOps workflow'larıyla doğal entegrasyon
  • Yedekleme dahil: Uzak repo'ya push = otomatik offsite backup

Olumsuz

  • Repo boyutu zamanla büyür: Sık değişiklikler repo'yu şişirir. Çözüm: periyodik squash, shallow clone
  • Binary değerler diff'te iyi görüntülenmez: Çözüm: Base64 decode edilmiş, metin olarak saklama
  • Git işlemleri sync döngüsüne gecikme ekler: Commit + push süresi
  • Git binary veya kütüphane gerektirir: go-git sayesinde binary bağımlılığı yok

Değerlendirilen Alternatifler

AlternatifAvantajDezavantajNeden seçilmedi
SQLite + LitestreamYapısal sorgular, kompaktEkstra bağımlılık, geliştiricilere yabancıGit ekosisteminin tüm avantajlarını kaybediyor
BoltDB/BadgerDBGömülü KV, hızlıÖzel versiyon katmanı yazmak gerekiyorKarmaşıklık, diff/log yok
Dosya bazlı changelogBasit implementasyonGit ekosistemi avantajlarını kaybediyorDiff, branch, merge yok