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 logile her değişikliğin ne zaman, ne olduğu görülür - Ücretsiz diff:
git diffile 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
| Alternatif | Avantaj | Dezavantaj | Neden seçilmedi |
|---|---|---|---|
| SQLite + Litestream | Yapısal sorgular, kompakt | Ekstra bağımlılık, geliştiricilere yabancı | Git ekosisteminin tüm avantajlarını kaybediyor |
| BoltDB/BadgerDB | Gömülü KV, hızlı | Özel versiyon katmanı yazmak gerekiyor | Karmaşıklık, diff/log yok |
| Dosya bazlı changelog | Basit implementasyon | Git ekosistemi avantajlarını kaybediyor | Diff, branch, merge yok |