Dağıtık sistemlerde tutarlılık ve kullanılabilirlik arasındaki gerilimi en temiz biçimde aşan yaklaşım, CRDT conflict-free replicated data types tasarımıdır. Bu veri tipleri, ağ bölünmesi veya eş zamanlı güncellemeler durumunda bile otomatik birleştirme garantisi sunar; insan müdahalesi veya özel çatışma çözme mantığı gerektirmez. CRDT'nin matematiksel temeli yarı kafes (semilattice) ve monoid yapısına dayanır. Bir monoid, birleştirme operasyonu ⊕ tanımlı bir küme M'dir; şu koşulları sağlamalıdır: 1. **Kapalılık:** a, b ∈ M ⟹ a ⊕ b ∈ M 2. **Birlik elemanı:** Bir e ∈ M var ki a ⊕ e = e ⊕ a = a 3. **Birleşme (Associativity):** (a ⊕ b) ⊕ c = a ⊕ (b ⊕ c) Buna ek olarak CRDT conflict-free replicated data types için **idempotans** gereklidir: a ⊕ a = a. Bu özellik, aynı güncellemenin birden fazla kez uygulanmasını güvenli kılar. İki ana CRDT kategorisi: **State-based CRDT (CvRDT):** Tüm durum karşı düğüme gönderilir; merge fonksiyonu join (üst sınır, LUB) operasyonunu uygular. Bant genişliği maliyetlidir ama basittir. **Operation-based CRDT (CmRDT):** Yalnızca operasyonlar iletilir; alıcı tarafın bunları doğru sırayla uygulaması gerekmez, bu operations commutative (değişmeli) tasarlandığı için mümkündür. Yaygın CRDT conflict-free replicated data types örnekleri: **G-Counter (Grow-Only Counter):** Her replica kendi ID'siyle indexlenmiş bir sayaç tutar. Merge: her index için maksimum değer alınır. Toplam değer: tüm indexlerin toplamı. **LWW-Register (Last-Write-Wins):** Her yazma zaman damgasıyla işaretlenir; merge'de en yüksek timestamp kazanır. Zaman senkronizasyonu kritik kriter. **OR-Set (Observed-Remove Set):** Klasik 2P-Set'in sınırlamalarını aşmak için tasarlanmıştır. Her eleman ekleme operasyonu benzersiz bir tag alır; silme yalnızca görülen tag'leri kaldırır. Bu sayede add-concurrent-remove senaryosunda add kazanır. **RGA (Replicated Growable Array):** Metin düzenleme için tasarlanmıştır. Google Docs ve Notion gibi platformların altında yatan temel mekanizmadır. CRDT'nin sınırlamaları da vardır: karmaşık iş mantığı gereksinimleri (örneğin banka hesabı negatife düşmemeli) doğrudan modellenemez; tombstone birikimi GC sorunu doğurur; strong consistency gerektiren senaryolarda CRDT yeterli değildir. Pratik kullanım: Redis Enterprise, Riak, AntidoteDB bu yapıları yerleşik olarak destekler. Rust'ın `crdts` crate'i ve Haskell'in `crdts` paketi referans implementasyonlardır.