Güçlü tutarlılık: Gerektiğinde
Güçlü Tutarlılık, tüm işlemlerin gerçek zamanlı olarak tutarlı bir şekilde tek bir küresel düzende anında ve tutarlı bir şekilde gerçekleştirildiği bir modeldir. Kullanıcı onaylanan son değeri okuyacak ve iki paralel istemci mantıksal olarak birbirini geçmeyecektir.
Sıkı tutarlılık basit bir zihinsel model verir ve sabit değişmezleri korur, ancak ağ bölümlerine gecikme ve duyarlılığı artıran koordinasyon (quorum/leader) gerektirir.
1) Güçlü zorunlu olduğunda
Finans ve Yerleşimler
Dengeler ve yazılar: "Çift harcama'kabul edilemez.
Transferler ve yerleşimler: Aynı miktar iki kez gönderilemez.
Envanter ve Limitler
Kalan mallar/otel alanı/biletler: negatif değerlere giremezsiniz.
Birim zaman başına işlem limitleri (kredi limitleri, API kredileri).
Benzersizlik ve bütünlük
Benzersiz veri tekilleştirme girişleri/kimlikleri/kuralları.
Etki alanı düzeyinde değişmezler: "≥1 doktor bölümde görevli olmalıdır", "kuyrukta> N aktif görev olamaz".
Denetim ve değişmeyen günlükler
Gerçeğin yasal kaynağı olarak hizmet eden olaylar: düzen ve bütünlük kritiktir.
Değişmezin ihlali kabul edilemez bir iş riski taşıyorsa (para kaybı, yaptırımlar, güven kaybı) - Güçlü Tutarlılık'ı seçin.
2) "Katı" tam olarak nedir
Doğrusallaştırılabilirlik (operasyonel seviye): okuma en son başarılı yazmayı görür; zamanlara saygı duyulur.
Serileştirilebilir (işlem seviyesi): Sonuç, işlemlerin sırayla yürütülmesine eşdeğerdir (güçlü olabilir, ancak bazen gerçek zamanlı bir emir olmadan uygulanabilir).
Önemli bir fark: Serializable işlem seviyesi anomalilerine (phantom/write-skew) karşı korur ve Linearizable tek anlık ve tek işlemlerin sırasına karşı korur. Genellikle her iki özelliğe de ihtiyacınız vardır (örneğin, veritabanındaki para + olay günlüğü).
3) Fiyat titizliği: PACELC ve CAP
PACELC: Bir ağı (P) bölerken, C (rigor) veya A (availability) seçmeniz gerekir. Güçlü CP: Değişmezi ihlal etmektense reddetmek veya engellemek daha iyidir. Ayırma (EL) olmadığında, L - p95/p99 ile ödeme yaparız koordinasyon/kuorumlarda büyür.
Uygulama: "değişmezlerin çekirdeği" için güçlü, etrafında - UX'in acı çekmemesi için sonlu hızlı projeksiyonlar/önbellekler.
4) Güçlü Tutarlılık Nasıl Sağlanır
Liderlik ve quorum
Tek lider kayıtları kabul eder; Okuma - lider veya kopyaları quorum tarafından.
'R + W> N'ile yazmak için' W've okumak için 'R', 'son' okuma şansını arttırır.
Eşleştirme algoritmaları
Raft/Paxos: çoğaltma günlüğü, çoğunluk onayları, terim/indeksler.
Senkron çoğaltma - Kayıt yalnızca nisapta kalıcılıktan sonra doğrulanır.
Saatler ve sipariş
TrueTime/Hybrid Logical Clocks (HLC): Güvenli global serileştirme için saat yanlış hizalamasını sınırlayın.
Çit belirteçleri/sürüm oluşturma:'sabah "liderlerine ve bölünmüş beyne karşı koruma.
İşlem izolasyonu
Serileştirilebilir (SI + yüklem çakışması denetimi/kilidi): fantom/yazma-çarpıklığına karşı koruma.
Strict-serializable: Serileştirilebilirlik + gerçek zamana göre doğrusallaştırılabilirlik.
5) Çok bölgeli: seçenekler ve takaslar
Küresel Lider (CP)
Kayıtlar bir lider bölgeden geçer; Okur - yerel önbellekler/projeksiyonlar veya bir lider aracılığıyla.
Artılar: Basit model. Eksileri: P - kayıt kilitleri ile lidere p95/RTT.
Bölgesel liderler + senkron çoğunluk
Çeşitli bölgelerden coğrafi olarak genişletilmiş nisap; Her kayıt onay bekliyor> %50.
Artıları: tek bir'dar boyun "olmadan, yüksek stabilite. Eksileri: Kıtalararası gecikme.
Coğrafi bölümleme
Bölge için ev verileri (kiracı/yargı alanı); Küresel operasyonlar - sagalar/agregalar aracılığıyla.
Artıları: Yerel kayıtlar için düşük gecikme süresi. Eksileri: Veri sınırlarını planlama.
6) R/W ayarlayın ve okuyun
Girişler: 'W = çoğunluk' güçlü için standarttır.
Okumalar:- "En taze" - 'R = çoğunluk' veya lidere okuma.
- L'yi azaltmak için - ikincil ekranlar için replikalardan "bayat-ok" okunur (UX'te açıkça işaretlenir).
- Okuma-onarım/kiralama okuma: Liderin kısa kiralamaları için ciddiyet kaybı olmadan optimizasyon.
7) Performans ve UX
Gecikme: Müşteri ve lider/çekirdek arasındaki RTT'ye odaklanın (bölgeler arası yüzlerce ms).
"yazma-güçlü, okuma-hızlı" desen: yazma + önbellek üzerinde güçlü/okur üzerinde projeksiyon, yazar için RYW ile.
Toplu/paketler: Kayıtları gruplandırın, ancak kuyruk gecikmesini izleyin.
Bozulma konturları: bir olayda - salt okunur, dürüst durumlar, tehlikeli mutasyonların yasaklanması.
8) Sıkı yolun gözlemlenebilirliği
Metrikler
P50/p95/p99 gecikme: nisap yaz, nisap oku, liderlik okumaları.
Çekirdek başarısı, tekrarlar/geri dönüşler, lider değişiklikleri.
Çoğaltma gecikmesi (beklenen küçük, ancak izleme zorunludur).
"Steil" okuma payı (dahil ise).
İzleme
Spans: "lider kabulü", "replikasyon", "quorum commit".
Теги: 'terim', 'leader _ id', 'quorum _ size', 'bölge'.
Uyarılar
Büyüme p95/p99, sık sık yeniden seçim lideri, çoğunluk süreleri, bölünmüş beyin göstergeleri.
9) Testler ve kaos
Jepsen benzeri: ağ bölümleri, gecikmeler, düşmeler, saat eğriliği.
Güvenlik değişmezleri: Çift harcama/negatif bakiye/çift rezervasyon imkansızlığı.
Liderlik: lider reddi, yük altında yeniden seçim, çit belirteçleri.
Tutarlılığı okuyun: Yazdıktan hemen sonra okuma'yeni "(RYW/doğrusallaştırılabilir okuma) görmelidir.
10) Olay oyun kitapları
Çekirdek kaybı: salt okunur'a geçin, müşterileri bilgilendirin, coğrafi bölümleme varsa'ev "bölgesine bir giriş gönderin.
Gecikmenin büyümesi bölgelerarası: katı kayıtların hacmini geçici olarak azaltın (kuyruk/projeksiyonlardaki bazı akışların geçişi), trafiği yerelleştirin.
Leader Flap: Seçim sürelerini artırın, ağları/saat süren sürüklenmeleri/GC duraklamalarını kontrol edin.
Split-brain: Çit belirteçlerini/kira kontrollerini etkinleştirin, eski liderleri operatör düzeyinde durdurun.
11) Tipik hatalar
Güçlü'her yerde "talep: Değişmezlere odaklanmak yerine gecikme ve maliyet patlaması.
Gerçek bölünmeler altında CA olmaya çalışmak: P noktasında, sistem hala genellikle dolaylı olarak bir seçim yapar.
Saga/koordinatör olmadan farklı bölgelere çift yazma: fantomlar ve değişmezlerin kaybı.
RYW'nin yokluğu: Kullanıcı yeni kaydedilen varlığını görmüyor - güvende bir düşüş.
Saati göz ardı etme: HLC/TrueTime sınırları olmadan, "atlama" zamanı ve yarışı elde etmek kolaydır.
Bozulma planı yoktur: P'de kaotik kısmi başarısızlıklar başlar.
12) Hızlı düzeltmeler (tarifler)
Ödemeler/bakiyeler: lider + çoğunluk-çoğunluk; Sıkı-serileştirilebilir işlemler kısa zaman aşımları, P'de sert başarısızlık
Rezervasyon (koltuklar/yuvalar): Lider aracılığıyla yazma-güçlü, okur - RYW ile önbellek; TTL-rezerv + TTK.
Global SaaS: 'kiracı/bölge'ile coğrafi bölünme; Ev bölgesinde sıkı operasyonlar, raporlar/arama - projeksiyonlar aracılığıyla.
Denetim/günlük: sadece CP-log ekle; Okumalar önbelleğe alınabilir, ancak kontrol noktaları ile doğrulanabilir.
13) Satış öncesi kontrol listesi
- Güçlü gerektiren değişmezler yazıldı; Gerisi AP/projeksiyonda.
- Single leader/quorum interregional/geo-partition selected.
- Yapılandırılmış 'W = çoğunluk', 'R = kritik yollar için lider' çoğunluk '.
- RYW/monotonik UX için sağlanan; Açıkça işaretlenmiş "bayat-ok" okur.
- Quorum, gecikmeler, gecikmeler metrikleri dahil; p95/p99 ve yeniden seçim uyarıları.
- Bozulmuş bir plan var: salt okunur, tehlikeli mutasyonları devre dışı bırakır, "fırtınadan sonra" için kuyruklar.
- Kaos testleri: bölünmeler, saat çarpıklığı, lider başarısızlığı; Güvenlik değişmezleri kontrol edildi.
- Sözleşme dokümantasyonu: katı olan, "geride kalan", ürün/destek için iletişim.
Sonuç
Güçlü Tutarlılık, hatanın kabul edilemez olduğu durumlarda gerçeği korumak için bir araçtır. Sabit değişmezlerin etrafında noktasal olarak uygulayın, fırtınalarda gecikme ve kullanılabilirlik ile koordinasyon için bilinçli olarak ödeme yapın. Combine: Kritik, AP okuma ve hız için projeksiyon için CP çekirdeği. Doğru telemetri, bozulma ve testlerle hem doğruluğu hem de kullanıcı deneyimini koruyacaksınız.