Strong Consistency: lazım olduqda
Strong Consistency - bütün əməliyyatların real vaxtla razılaşdırılmış vahid qlobal qaydada dərhal və ardıcıl olaraq həyata keçirildiyi model. İstifadəçi son təsdiqlənmiş dəyəri oxuyacaq və iki paralel müştəri bir-birini məntiqlə «ötməyəcək».
Ciddi uyğunluq sadə bir zehni model verir və sərt invariantları qoruyur, lakin koordinasiya tələb edir (kvorum/lider), bu da gecikməni və şəbəkə bölünmələrinə həssaslığı artırır.
1) Strong - məcburi olduqda
Maliyyə və hesablaşmalar
Balans və silinmə: «ikiqat itki» qəbuledilməzdir.
Köçürmələr və qarşılıqlı hesablaşmalar: eyni məbləğ iki dəfə həyata keçirilə bilməz.
Inventar və limitlər
Malların qalıqları/otel yerləri/biletlər: mənfi qiymətlərə getmək olmaz.
Zaman vahidi üzrə əməliyyatların limitləri (kredit limitləri, API-kreditlər).
Unikallıq və bütövlük
Unikal girişlər/identifikatorlar/duplikasiya qaydaları.
Domen səviyyəsində invariantlar: «şöbədə ≥ 1 həkim növbətçi olmalıdır», «növbədə ola bilməz> N aktiv tapşırıqlar».
Audit və dəyişməz jurnallar
Həqiqətin hüquqi mənbəyi olan hadisələr: nizam-intizam və tamlıq kritikdir.
Əgər invariant pozuntusu qəbuledilməz biznes riski daşıyırsa (pul itkisi, sanksiyalar, etimad itkisi) - Strong Consistency seçin.
2) Dəqiq «sərt» nədir
Linearizability (əməliyyat səviyyəsi): oxu son uğurlu yazı görür; zaman hörmətli.
Serializable (tranzaksiya səviyyəsi): nəticə ardıcıl olaraq əməliyyatların yerinə yetirilməsinə bərabərdir (strong ola bilər, lakin bəzən sərt real-time sifariş olmadan həyata keçirilir).
Əhəmiyyətli fərq: Serializable əməliyyat səviyyəsinin anomaliyalarından (phantom/write-skew), Linearizable isə tək əməliyyatların ani olması və qaydası haqqında qoruyur. Tez-tez hər iki xüsusiyyətə ehtiyac duyulur (məsələn, pul DB + hadisə jurnalı).
3) Sərtlik qiyməti: PACELC və CAP
PACELC: Şəbəkəni (P) ayırarkən C (sərtlik) və ya A (mövcudluq) seçmək lazımdır. Strong → CP: invariant pozmaq daha imtina və ya bloklamaq daha yaxşıdır. Ayrılma olmadıqda (EL), L - koordinasiya/kvorum p95/p99 artır ödəyirik.
Təcrübə: «invariantların nüvəsi» üçün strong, ətrafında - UX əziyyət çəkməmək üçün eventual ilə sürətli proyeksiyalar/caches.
4) Strong Consistency çatmaq necə
Liderlik və kvorumlar
Yeganə lider qeydləri qəbul edir; oxu - lider və ya kvorum replikaları.
'W' yazmaq üçün kvorum və 'R' ilə oxumaq üçün 'R + W> N' son oxumaq şansını artırır.
Koordinasiya alqoritmləri
Raft/Paxos: log replikasiyalar, çoxluq təsdiqləri, termin/indekslər.
Sinxron replikasiya: qeyd yalnız kvorumda persistentlikdən sonra təsdiqlənir.
Saat və sifariş
TrueTime/Hybrid Logical Clocks (HLC): təhlükəsiz qlobal serializasiya üçün saat rasinkron məhdudlaşdırılması.
Fence Tokens/Version: «səhər» liderləri və split Breen qarşı müdafiə.
Əməliyyatların izolyasiyası
Serializable (SI + konfliktlərin yoxlanılması/predikatlar üzrə loki): phantom/write-skew-dən qorunma.
Strict-serializable: serial + real vaxt lineer.
5) Multi-region: variantlar və kompromislər
Qlobal Lider (CP)
Qeydlər bir lider bölgədən keçir; oxu - yerli caches/proyeksiyalar və ya lider vasitəsilə.
Üstünlüklər: sadə model. Mənfi cəhətləri: P ilə liderə p95/RTT - qeydlərin bloklanması.
Regional liderlər + sinxron kvorum
Bir neçə regiondan geo-genişlənmiş kvorum; hər yazı təsdiq gözləyir> 50%.
Üstünlüklər: tək «ensiz boyun» olmadan, yüksək sabitlik. Mənfi cəhətləri: qitələrarası gizli.
Geo-partitioning
Bölgə üçün «ev» məlumatları (tenant/yurisdiksiya); qlobal əməliyyatlar - dastanlar/aqreqatlar vasitəsilə.
Üstünlüklər: yerli qeydlər üçün aşağı gecikmələr. Mənfi cəhətləri: məlumat sərhədlərinin planlaşdırılması.
6) R/W və oxu konfiqurasiya
Qeydlər: 'W = majority' - strong üçün standart.
Oxu:- «Ən təzə» - 'R = majority' və ya lider oxumaq.
- L azaltmaq üçün - ikinci dərəcəli ekranlar üçün replikalardan «stale-ok» oxunması (UX-də aydın işarələnmə ilə).
- Read-repair/lease read: liderin qısa arenalarda sərtlik itkisi olmadan optimallaşdırma.
7) Performans və UX
Gizlilik: Müştəri və lider/kvorum (regionlararası yüzlərlə ms) arasında RTT-yə diqqət yetirin.
«write-strong, read-fast» nümunəsi: yazıda strong + oxunuşlarda cache/proyeksiyalar, müəllif üçün RYW ilə.
Batch/paketlər: qeydləri qruplaşdırın, lakin quyruq gecikməsini izləyin.
Deqradasiya konturları: hadisə zamanı - read-only, dürüst statuslar, təhlükəli mutasiyaların qadağan edilməsi.
8) Strict yolu müşahidə
Metrika
p50/p95/p99 latency: write-kvorum, read-kvorum, liderlik oxunuşları.
Kvorumların, təkrarların/geri çəkilmələrin, lider dəyişikliyinin uğuru.
Replikasiya gecikməsi (gözlənilən kiçik, lakin izləmək lazımdır).
«Steel» oxu payı (daxil olduqda).
Treysinq
Span: «lider qəbul», «replikasiya», «kommit kvorum».
Теги: `term`, `leader_id`, `quorum_size`, `region`.
Alertlər
p95/p99 artım, liderin tez-tez yenidən seçilməsi, kvorum-timeouts, split-brain göstəriciləri.
9) Testlər və xaos
Jepsen kimi: şəbəkə bölünmələri, gecikmələr, damcılar, clock-skew.
Safety invariant: ikiqat xərcləmə/mənfi qalıqlar/ikiqat rezervasiya imkanı.
Liderlik: liderin uğursuzluğu, yük altında yenidən seçilmə, fence-tokenlər.
Oxu uyğunluğu: Yazıdan dərhal sonra oxumaq «yeni» (RYW/linearizable read) görməlidir.
10) Hadisə pleybukları
Kvorum itkisi: read-only-a keçin, müştərilərə məlumat verin, geo-partitioning olduqda «ev» bölgəsinə giriş göndərin.
Latentliyin regionlararası artımı: ciddi qeydlərin həcmini müvəqqəti azaltmaq (növbə/proyeksiya axınlarının bir hissəsinin miqrasiyası), trafiki lokallaşdırmaq.
Liderin flapı: seçkilərin vaxtını artırın, şəbəkələri/saat sürüklənmələrini/GC fasilələrini yoxlayın.
Split-brain: fence-tokenləri/lease-yoxlamaları işə salın, köhnə liderləri operator səviyyəsində dayandırın.
11) Tipik səhvlər
Strong «hər yerdə» tələb edin: invariantlara diqqət yetirmək əvəzinə gecikmə və dəyər partlayışı.
Real bölünmələrdə CA olmağa çalışın: P anında sistem hələ də seçim edir, çox vaxt qeyri-adi olur.
Dual-write saq/koordinator olmadan müxtəlif bölgələrə: fantomlar və invariant itkisi.
RYW-nin olmaması: istifadəçi yeni yazılmış mahiyyətini görmür - etimadın azalması.
Saatlara məhəl qoymayın: HLC/TrueTime sərhədləri olmadan «tullanan» vaxt və yarış əldə etmək asandır.
Deqradasiya planı yoxdur: P ilə xaotik qismən nasazlıqlar başlayır.
12) Sürətli həllər (reseptlər)
Ödənişlər/balanslar: lider + majority-kvorum; strict-serializable əməliyyatlar; qısa zaman kəsiyində, P. zamanı sərt uğursuzluq.
Rezervasiya (yerlər/yuvalar): lider vasitəsilə write-strong, RYW ilə cache oxu; TTL-ehtiyatları + TCC.
Global SaaS: geo-partition by 'tenant/region'; ev bölgəsində ciddi əməliyyatlar, hesabatlar/axtarış - proyeksiyalar vasitəsilə.
Audit/jurnal: append-only CP jurnalı; oxu keşfedilə bilər, lakin nəzarət nöqtələri ilə təsdiqlənə bilər.
13) Satış öncəsi yoxlama siyahısı
- Strong tələb edən invariantlar yazılır; qalanları - AR/proyeksiyada.
- Seçilmiş rejim: vahid lider/regionlararası kvorum/geo-partition.
- Kritik yollar üçün 'W = majority', 'R = leader' majority 'konfiqurasiya edilmişdir.
- UX üçün RYW/monotonic təmin; açıq-aydın «stale-ok» oxu qeyd.
- Kvorum, lag, latentlik metrikləri daxildir; p95/p99 və yenidən seçilmə.
- Degrade planı var: read-only, təhlükəli mutasiyaların bağlanması, «fırtınadan sonra» növbələr.
- Xaos testləri: bölünmələr, clock-skew, liderin uğursuzluğu; safety invariant yoxlanılır.
- Müqavilələrin sənədləşdirilməsi: ciddi, «gecikə bilər», məhsul/dəstək üçün ünsiyyət.
Nəticə
Strong Consistency - səhvlərin qəbuledilməz olduğu yerlərdə həqiqəti qorumaq üçün bir vasitədir. Fırtınalarda latentlik və əlçatanlığın əlaqələndirilməsi üçün qəsdən pul ödəyərək sərt invariantlar ətrafında nöqtəli şəkildə tətbiq edin. Birləşdirin: Kritik, AP oxu və sürət üçün proyeksiyalar üçün CP nüvəsi. Düzgün telemetriya, deqradasiya və testlərlə həm düzgün, həm də istifadəçi təcrübəsini qoruyacaqsınız.