GH GambleHub

Replikasiya və eventual consistency

Replikasiya və eventual consistency

1) Niyə eventual consistency

Sistem zonalar/bölgələr üzrə paylandıqda, sinxron qeyd hər yerdə şəbəkə nasazlıqları zamanı yüksək gecikmə və aşağı mövcudluq verir. Eventual consistency (EC) üçün replikaların müvəqqəti sinxronizasiyasına imkan verir:
  • aşağı qeyd gecikməsi (yerli qəbul),
  • şəbəkə bölünmələrində daha yaxşı əlçatanlıq,
  • üfüqi miqyaslı.

Əsas vəzifə nəzarət olunan qeyri-sabit uyğunluqdur: istifadəçi «kifayət qədər təzə» məlumatları görür, domen invariantları saxlanılır, münaqişələr müəyyən edilir və əvvəlcədən həll edilir.


2) Uyğunluq modelləri - müştəriyə nə vəd edirik

Strong: oxu dərhal son yazını görür.
Bounded stale/read-not-older-than (RNOT): oxumaq (LSN/versiya/vaxt) yaşlı deyil.
Causal: «səbəb-nəticə» münasibətləri saxlanılır (A-dan B-yə qədər).
Read-Your-Writes: Müştəri son qeydlərini görür.
Monotonic Reads: Hər bir sonrakı oxu geri «yuvarlanmır».
Session: bir sessiya çərçivəsində zəmanət dəsti.
Eventual: yeni qeydlər olmadıqda, bütün replikalar birləşir.

Təcrübə: Kritik yollarda Session + RNOT-u və vitrinlərdə/keşlərdə Eventual-ı birləşdirin.


3) Replikasiya: mexanika və anti-entropy

Sinxron (kvorum/RAFT): qeyd N düyünlər təsdiq sonra uğurlu hesab olunur; minimum RPO, p99-dan yuxarı.
Asinxron: yerli lider kommitit, daha sonra jurnal paylayır; aşağı gecikmə, RPO> 0.
Fiziki (WAL/binlog): sürətli, homogen.
Məntiq/CDC: sətir/hadisə səviyyəsində dəyişiklik axını, çevik marşrut, filtrlər.
Anti-entropy: periodik yoxlama və təmir (Merkle ağacları, hash müqayisə, fon re-sync).


4) Versiya identifikatorları və səbəbli sifarişlər

Monoton versiyalar: increment/LSN/epoch; sadə, lakin paralelliyi kodlamır.
Lamport timestamp: məntiqi saatlara görə qismən sifariş.
Vector clock: paralel filialları düzəldir və münaqişə yenilənmələrini (concurrent) aşkar etməyə imkan verir.
Hybrid/TrueTime/Clock-SI: qlobal sifariş üçün «T əvvəl deyil» məntiqi.

Tövsiyə: CRDT/münaqişə yeniləmələri üçün - vector clock; «yaşlı deyil» üçün - LSN/GTID.


5) Münaqişələr: aşkarlama və həll

Tipik vəziyyətlər: eyni obyektə iki bölgədən giriş.

Strategiyalar:

1. Saat/məntiq möhürü ilə Last-Write-Wins (LWW) - sadə, lakin yeniləmələri «itirə» bilər.

2. Domen məntiqi Merge funksiyaları:
  • sayğac sahələri qatlanır (G-Counter/PN-Counter),
  • çoxluqları ilə birləşir «add-wins/remove-wins»,
  • məbləğ/balans - yalnız LWW vasitəsilə deyil, əməliyyat jurnalları vasitəsilə.
  • 3. CRDT (konvergent növləri): G-Counter, OR-Set, LWW-Register, RGA siyahıları üçün.
  • 4. Əməliyyat transformasiyaları (nadir hallarda DB üçün, daha çox redaktorlar üçün).
  • 5. Manual resolution: «inbox» konflikt, istifadəçi düzgün versiyası seçir.

Qayda: Domen invariantları strategiyanı diktə edir. Pul/qalıqlar üçün - LWW-dən çəkinin; kompensasiya ilə əməliyyatlar/hadisələr istifadə edin.


6) Qeydlərin təminatı və idempotentlik

Komandalarda idempotent açarları (payment, withdraw, create) → təkrar təhlükəsizdir.
İdempotentlik açarı/seriya nömrəsi ilə «giriş» (inbox) və «çıxış» (outbox) üzərində duplikasiya.
Exactly-once güclü şərtlər olmadan əlçatmazdır; at-least-once + idempotentlik təcrübə.
Outbox/Inbox-pattern: DB-də qeydiyyat və hadisənin atom (yerli əməliyyat) dərc edilməsi, alıcı idempotency-key ilə emal edir.


7) Oxu «yaşlı deyil X» (RNOT)

Texnikalar:
  • LSN/GTID-qapısı: müştəri minimum versiyanı (yazının cavabından) verir, router/proxy LSN ≥ X-i tutmuş replikaya, əks halda liderə göndərir.
  • Time-bound: «2 saniyədən yaşlı deyil» - versiyasız sadə SLA.
  • Session pinning: N saniyə yazdıqdan sonra yalnız lideri oxuyun (Read-Your-Writes).

8) Dəyişiklik axını və cache uyğunlaşdırılması

CDC → şin hadisələri (Kafka/Pulsar) → istehlakçılar (caches, indekslər, vitrinlər).
Cache əlilliyi: topiki 'invalidate: {ns}: {id}'; idempotent emal.
Rebuild/Backfill: Rasinkron zamanı hadisə jurnalından proyeksiyaları yenidən tərtib edin.


9) Dastanlar və kompensasiyalar (xidmətlərarası əməliyyatlar)

EC-dünyada uzun ömürlü əməliyyatlar kompensasiya hərəkətləri ilə addımlara bölünür:
  • Orkestr: koordinator addımlar və kompensasiya çağırır.
  • Xoreoqrafiya: addımlar hadisələrə reaksiya verir və aşağıdakıları dərc edir.

İnvariantlar (nümunə): «balans ≥ 0» - addım sərhədlərində yoxlama + kənara çıxdıqda kompensasiya.


10) Multi-region və şəbəkə bölmələri

Local-write, async-replicate: yerli bölgədə qeyd + başqalarına çatdırılma (EC).
Geo-fencing: məlumatlar bölgəyə «yapışdırılır» (aşağı gecikmə, daha az münaqişə).
CP məlumatları üçün kvorum DB (Raft); caches/vitrinlər - AP/EC.
Split-brain planı: əlaqəni itirdikdə, regionlar domen limitləri (write fencing, kvotalar) çərçivəsində işləməyə davam edir, sonra - reconcile.


11) Müşahidə və SLO

Metriklər:
  • Replica lag: vaxt/LSN-məsafə/offset (p50/p95/p99).
  • Staleness: cavabların nisbəti həddindən yüksəkdir (məsələn,> 2s və ya LSN
  • Conflict rate: münaqişə tezliyi və uğurlu merge.
  • Convergence time: zirvədən sonra replikaların yaxınlaşma vaxtı.
  • Reconcile backlog: həcmi/geri partiyalar vaxt.
  • RPO/RTO verilənlər kateqoriyasına görə (CP/AP).
Alertlər:
  • Lag> hədəf, artan münaqişələr, «uzun» uyğunsuzluq pəncərələri.

12) EC altında məlumat sxemi dizayn

Hər girişdə açıq versiya/vektor ('version', 'vc' sütunları).
Kritik invariantlar üçün Append-only jurnalları (balans, hesablamalar).
Sıra və babalar üçün hadisə identifikatorları (snowflake/ULID).
Kommutativ təbiətli sahələr (sayğaclar, çoxluqlar) → CRDT namizədləri.
API dizaynı: if-match/etag ilə PUT, precondition ilə PATCH.


13) Saxlama və oxu nümunələri

Read model/CQRS: «mənbə» yazısı, proyeksiyalardan oxumaq (gecikə bilər → «yenilənir»...).
Stale-OK marşrutları (kataloq/lent) vs Strict (cüzdan/limitlər).
Sticky/Bounded-stale bayraqlar sorğu (başlıq 'x-read-consistency').


14) Giriş çek siyahısı (0-45 gün)

0-10 gün

Məlumatları kateqoriyaya salın: CP-kritik (pul, sifarişlər) vs AB/çelik-OK (kataloqlar, axtarış indeksləri).
SLO steylini (məsələn, «2s-dən yaşlı deyil») təyin edin.
API-də obyektlərin və idempotency-keys versiyasını daxil edin.

11-25 gün

CDC və outbox/inbox tətbiq, cache əlillik marşrutları.
Qeyd-kritik yollarda RNOT (LSN-gate) və session pinning əlavə edin.
Ən azı bir tədbir strategiyasını (LWW/CRDT/domen) və münaqişə jurnalını həyata keçirmək.

26-45 gün

Anti-entropy (yoxlama/təmir) və Style hesabatlarını avtomatlaşdırın.
Game-day keçirin: şəbəkənin bölünməsi, münaqişələrin artması, bərpa.
Daşbordlarda vizuallaşdırın: lag, staleness, conflict rate, convergence.


15) Anti-nümunələr

Kritik invariantlar üçün kor LWW (pul itkisi/bal).
idempotency → retras ikiqat əməliyyatlar yoxdur.
bütün → həddindən artıq p99 quyruqları və uğursuzluqlar zamanı kövrək «güclü» model.
No RNOT/Session zəmanətləri → UX «yanıb-sönür», istifadəçilər öz dəyişikliklərini «görmürlər».
Gizli cache və mənbə sinxronizasiyası (CDC/əlillik yoxdur).
reconcile/anti-entropy alətinin olmaması - «əsrlər boyu» məlumatlar fərqlənir.


16) Yetkinlik metrikası

Replica lag p95 hədəf ≤ (məsələn, ≤ 500 ms regionda, ≤ 2 s regionlararası).
Staleness SLO «ciddi» marşrutlarda sorğuların 99% ≥ yerinə yetirilir.
Conflict resolution success ≥ 99. 9%, orta həll müddəti ≤ 1 dəq.
Convergence time zirvə sonra - dəqiqə, saat deyil.
100% «pul» əməliyyatları idempotency açarları və outbox/inbox ilə əhatə olunur.


17) Reseptlər (snippetlər)

If-Match/ETag (HTTP)


PUT /profile/42
If-Match: "v17"
Body: { "email": "new@example.com" }

Əgər versiya dəyişibsə - '412 Precondition Failed' → müştəri münaqişəni həll edir.

«LSN-dən yaşlı deyil» sorğusu (psevdo)


x-min-lsn: 16/B373F8D8

Router replay _ lsn ≥ x-min-lsn 'ilə replika seçir, əks halda - lider.

CRDT G-Counter (ideya)

Hər bir region öz sayğacını saxlayır; nəticə - bütün komponentlərin cəmi; replikasiya - kommutativ əməliyyat.


18) Nəticə

Eventual consistency keyfiyyətdə kompromis deyil, şüurlu bir müqavilədir: haradasa biz sürət və əlçatanlıq üçün təzəlik ödəyirik, lakin domen strategiyaları və alətləri ilə kritik invariantları qoruyuruq. Versiyaları daxil edin, idempotency, RNOT/Session zəmanət, CDC və anti-entropy, lag/staleness/conflicts ölçün - və paylanmış sisteminiz hətta uğursuzluqlar və pik yüklər altında sürətli, sabit və proqnozlaşdırıla bilən olacaq.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.