GH GambleHub

Ç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).
Uyarılar:
  • 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.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.