Çoğaltma ve nihai tutarlılık
Çoğaltma ve nihai tutarlılık
1) Neden nihai tutarlılık
Sistem bölgelere/bölgelere göre dağıtıldığında, her yerde senkronize kayıt, ağ arızaları durumunda yüksek gecikme süresi ve düşük kullanılabilirlik sağlar. Nihai tutarlılık (EC), kopyaların aşağıdaki nedenlerle geçici olarak yanlış hizalanmasına izin verir:- Düşük kayıt gecikmesi (yerel alım),
- Ağ bölümleri sırasında daha iyi kullanılabilirlik,
- yatay ölçekleme.
Anahtar görev gevşek tutarlılığı kontrol eder: kullanıcı "oldukça taze" verileri görür, alan değişmezleri korunur, çakışmalar tespit edilir ve tahmin edilebilir şekilde çözülür.
2) Tutarlılık modelleri - müşteriye vaat ettiğimiz şey
Güçlü: Okuma hemen son girişi görür.
Bounded stale/read-not-older-than (RNOT): işaretten daha eski değil (LSN/version/time).
Nedensel: "Nedensel'bir ilişki (A'dan B'ye) korunur.
Read-Your-Writes: Bir müşteri son kayıtlarını görür.
Monotonik Okumalar: Sonraki her okuma "geri alınmaz".
Oturum: Bir oturumda bir dizi garanti.
Nihai: yeni giriş yoksa, tüm kopyalar birleşir.
Uygulama: Kritik yollarda Oturum + RNOT'u ve Sonunda vitrinler/önbellekler üzerinde birleştirin.
3) Çoğaltma: mekanik ve anti-entropi
Senkron (quorum/RAFT): Kayıt, N düğümleri tarafından onaylandıktan sonra başarılı kabul edilir; Minimum RPO, p99'un üzerinde.
Asenkron: lider yerel olarak taahhüt eder, günlüğü daha sonra dağıtır; Düşük gecikme süresi, RPO> 0.
Fiziksel (WAL/binlog): hızlı, homojen.
Mantıksal/CDC: satır/olay seviyesi değişim akışı, esnek yönlendirme, filtreler.
Anti-entropi: periyodik uzlaştırma ve onarım (Merkle ağaçları, hash karşılaştırması, arka plan yeniden senkronizasyonu).
4) Sürüm tanımlayıcıları ve nedensellik sıralamaları
Monoton sürümler: artım/LSN/dönem; Basit, ama paralellik kodlamayın.
Lamport zaman damgası: mantıksal saate göre kısmi düzen.
Vektör saati: Paralel dalları düzeltir ve çakışan güncelleştirmeleri (eşzamanlı) tespit etmenizi sağlar.
Hibrit/TrueTime/Clock-SI: Küresel düzen için "T'den önce değil" mantığı.
Öneri: CRDT/çakışan güncellemeler için - vektör saati; "Yaşlı değil" için - LSN/GTID.
5) Çatışmalar: Keşif ve Çözüm
Tipik durumlar: iki bölgeden aynı nesneye kayıt.
Stratejiler:1. Saat/mantıksal damga ile Son Yazma-Kazanır (LWW) - basit, ancak güncellemeleri "kaybedebilir".
2. Fonksiyonları etki alanı mantığıyla birleştir:- Sayaç alanları eklenir (G-Counter/PN-Counter),
- Setler "add-wins/remove-wins'ile birleştirilir,
- tutarlar/bakiyeler - sadece işlem dergileri aracılığıyla, basit bir LWW aracılığıyla değil.
- 3. CRDT (yakınsak türler): Listeler için G-Counter, OR-Set, LWW-Register, RGA.
- 4. Operasyonel dönüşümler (nadiren veritabanları için, daha çok editörler için).
- 5. Manuel çözünürlük: "gelen kutusunda" çakışma, kullanıcı doğru sürümü seçer.
Kural: Alan değişmezleri stratejiyi belirler. Para/bakiyeler için - LWW'den kaçının; Telafi edilen işlemleri/olayları kullanın.
6) Kayıt garantileri ve idempotency
Komutlardaki Idempotent tuşları (ödeme, para çekme, oluşturma) - yeniden deneme güvenlidir.
Idempotence anahtarı/seri numarası ile gelen kutusu ve giden kutusu veri tekilleştirme.
Tam olarak-bir kez güçlü öncüller olmadan ulaşılamaz; Pratik-en az-bir kez + idempotency.
Giden kutusu/Gelen kutusu deseni: Veritabanına yazma ve olayı yayınlama atomiktir (yerel işlem), alıcı idempotency-key ile işler.
7) Eski X Okumaları Yok (RNOT)
Teknisyenler:- LSN/GTID kapısı: istemci minimum sürümü iletir (yazma yanıtından), yönlendirici/proxy LSN ≥ X ile yakalanan replikaya gönderir, aksi takdirde - lidere.
- Zamana bağlı: "2 saniyeden eski değil" - sürümleri olmayan basit bir SLA.
- Oturum sabitleme: N saniye kaydettikten sonra, yalnızca lideri okuruz (Yazdıklarını Oku).
8) Değişim akışları ve önbellek pazarlığı
CDC - etkinlik otobüsü (Kafka/Pulsar) - tüketiciler (önbellekler, indeksler, vitrinler).
Önbellek sakatlığı: konular 'geçersiz: {ns}: {id}'; Idotent işleme.
Rebuild/Backfill: Senkronize edilmezse, olay günlüğündeki projeksiyonları yeniden birleştirin.
9) Destanlar ve tazminatlar (servisler arası işlemler)
AK dünyasında, uzun ömürlü operasyonlar telafi edici eylemlerle adımlara ayrılır:- Orkestrasyon: Koordinatör adımları ve bunların telafilerini çağırır.
- Koreografi: adımlar olaylara tepki verir ve aşağıdakileri kendileri yayınlar.
Değişmezler (örnek): "Denge ≥ 0" - adım sınırlarında kontrol + sapma için tazminat.
10) Çok bölgeli ve ağ bölümleri
Local-write, async-replicate: Yerel bölgeye yaz + diğer (EC) teslim et.
Geo-eskrim: veriler bölgeye "yapıştırılır" (düşük gecikme, daha az çatışma).
CP verileri için Quorum veritabanları (Raft); Önbellekler/vitrinler - AP/EC.
Bölünmüş beyin planı: Eğer iletişim kaybolursa, bölgeler alan sınırları içinde çalışmaya devam eder (eskrim yazma, kotalar), sonra uzlaştırır.
11) Gözlemlenebilirlik ve SLO
Metrikler:- Çoğaltma gecikmesi: zaman/LSN-mesafe/ofset (p50/p95/p99).
- Staleness: Eşiğin üzerindeki yanıtların yüzdesi (örneğin,> 2s veya LSN
- Çatışma oranı: çatışmaların oranı ve başarılı birleştirme.
- Yakınsama zamanı: zirveden sonra kopyaların yakınsama zamanı.
- Mutabakat birikimi: geciken partilerin hacmi/zamanı.
- Veri kategorisine göre RPO/RTO (CP/AP).
- Lag> target, çatışmalarda artış, "uzun" ölçülemezlik pencereleri.
12) EC Veri Şeması Tasarımı
Her girişte açık sürüm/vektör (sütunlar 'sürüm', 'vc').
Kritik değişmezler için yalnızca ekleme günlükleri (bakiyeler, tahakkuklar).
Sipariş ve veri tekilleştirme için olay tanımlayıcıları (snowflake/ULID).
Değişmeli alanlar (sayaçlar, kümeler) - CRDT adayları.
API tasarımı: If-match/etag ile PUT, ön koşullu PATCH.
13) Depolama ve okuma kalıpları
Modeli/CQRS'yi okuyun: "kaynağa" yazma, projeksiyonlardan okuma (geride kalabilir - ekran "güncellenir"...).
Stale-OK routes (katalog/teyp) vs Strict (cüzdan/limitler).
İstekte Sticky/Bounded-stale bayrakları ('x-read-consistency' başlığı).
14) Uygulama kontrol listesi (0-45 gün)
0-10 gün
Verileri kategorize edin: CP-kritik (para, siparişler) vs EU/steel-OK (kataloglar, arama dizinleri).
Steele SLO'larını tanımlayın (örn. "2'den büyük değil"), hedef gecikir.
API'de nesne sürümlerini ve idempotency-anahtarlarını etkinleştir.
11-25 gün
CDC ve giden kutusu/gelen kutusu, önbellek engellilik yollarını uygulayın.
Yazma açısından kritik yollara RNOT (LSN kapısı) ve oturum sabitleme ekleyin.
En az bir birleştirme stratejisi (LWW/CRDT/domain) ve çakışma günlüğü uygulayın.
26-45 gün
Anti-entropi (uzlaşma/onarım) ve şekillendirme raporlarını otomatikleştirin.
Oyun gününü geçirin: ağ ayrımı, çatışmalarda artış, iyileşme.
Panolarda görselleştirin: gecikme, sapma, çakışma oranı, yakınsama.
15) Anti-desenler
Kritik değişmezler için kör LWW (para/puan kaybı).
Idempotency eksikliği - yeniden eğitim sırasında işlemlerin kopyaları.
Genel olarak "güçlü" model - aşırı p99 kuyrukları ve başarısızlık durumunda kırılganlık.
RNOT/Session garantisi yok - UX "yanıp sönüyor", kullanıcılar değişikliklerini "görmüyor".
Gizli önbellek ve kaynak yanlış hizalama (CDC/sakatlık yok).
Uzlaştırıcı/anti-entropi aracının eksikliği - "yüzyıllar boyunca" veriler farklıdır.
16) Olgunluk metrikleri
Replica lag p95 ≤ hedefi (örneğin, bir bölgede ≤ 500 ms ≤ 2 s bölgeler arası).
Staleness SLO, "katı" rotalardaki taleplerin %99'u ≥ gerçekleştirilir.
Çatışma çözme başarısı ≥ 99. %9, ortalama çözünürlük süresi ≤ 1 dakika.
Zirvelerden sonra yakınsama süresi - dakikalar, saatler değil.
"Para" işlemlerinin %100'ü idempotency anahtarları ve giden kutusu/gelen kutusu tarafından karşılanmaktadır.
17) Tarifler (snippet'ler)
Eşleşirse/ETag (HTTP)
PUT /profile/42
If-Match: "v17"
Body: { "email": "new@example.com" }
Sürüm değiştiyse - '412 Önkoşul Başarısız' - istemci çakışmayı çözer.
Sorgu "LSN'den daha eski değil" (sözde)
x-min-lsn: 16/B373F8D8
Yönlendirici 'replay _ lsn ≥ x-min-lsn'ile bir kopya seçer, aksi takdirde liderdir.
CRDT G-Sayacı (fikir)
Her bölge kendi sayacını tutar; Toplam - tüm bileşenlerin toplamı Çoğaltma - İşlem değiştiricidir.
18) Sonuç
Nihai tutarlılık, kaliteden ödün vermek değil, bilinçli bir sözleşmedir: Bir yerde hız ve kullanılabilirlik uğruna tazelik öderiz, ancak kritik değişmezleri alan stratejileri ve araçlarıyla koruruz. Sürümleri, idempotency, RNOT/Session garantilerini, CDC ve anti-entropiyi girin, lag/staleness/çakışmaları ölçün - ve dağıtılmış sisteminiz aksaklıklar ve tepe yükleri altında bile hızlı, kararlı ve öngörülebilir şekilde yakınsar.