GH GambleHub

Deteksiya və münaqişələrin həlli

1) Münaqişə hesab etmək nədir

Münaqişə iki və ya daha çox dəyişiklik mənbəyinin eyni mahiyyət, resurs və ya invariantın uyğun olmayan vəziyyətlərini iddia etdiyi bir vəziyyətdir.

Sintaktik: bir fayl/açarın üst-üstə düşən dəyişiklikləri (Git-də merge conflict, Kustomize-də patch toqquşmaları).
Semantik: sxem üzrə düzgün sənəd biznes invariantını pozur (kredit ≠ debet məbləği, limit aşılıb).
Əməliyyat/müvəqqəti: səsyazma/oxu yarışı, təkrarlanan hadisələr, səbəb-nəticə əlaqələrinin uyğunsuzluğu.
Domen: resurs üzərində rəqabətli əməliyyatlar (ikiqat bilet satışı, mal overbook).

Məqsəd: münaqişəni mümkün qədər tez aşkar etmək, onun səbəbini izah etmək və hərəkətlərdən birini təhlükəsiz seçmək: avtomobil bərpası, retraj, birləşmə, kompensasiya, eskalasiya.

2) Deteksiya mexanizmləri

2. 1 Version və vəziyyətlərin müqayisəsi

ETag/If-Match in REST, rowversion/xmin in DB - lost update aşkarlanması.
3-way merge (base, ours, theirs) - uyğun olmayan düzəlişlərin işıqlandırılması.
Sahə/sənəd üzrə Checksum/Hash - ucuz müqayisə.

2. 2 Müvəqqəti və səbəb işarələri

Lamport clock: ümumi sifariş «təxminən vaxt».

Vector/Version clocks: rəqabət (AB) vs səbəblər (A → B).
Version vectors replikalar/partisiyalar - divergensiyanın deteksiyası.

2. 3 Invariantlar və məhdudiyyətlər

Sxemlər və validatorlar (JSON Schema/OpenAPI) - sintaktik validlik.
İnvariantlar: unikallıq, mənfi olmayan, balans, ACL qaydaları.
Bütövlük yoxlamaları: FK/UNIQUE/EXCLUDE indeksləri, partial constraints.
Domen assert 'kodu/siyasətləri (OPA/Kyverno/Conftest).

2. 4 Hadisə axınlarında deteksiya

Idempotency Key/Dedup Store (məsələn, Redis/TTL ilə DB): dublların rədd edilməsi.
Transactional/Exactly-once: transactional id, producer epoch, konsumer-ofset.
Sequence gap detection: keçid, təkrar (n, n + 1, n + 1).

2. 5 Müşahidə və siqnalizasiya

Səhvlərin/münaqişələrin/retrajların prometrikası.

Ətraflı səbəblər (labels: type = semanticsyntactic, entity, shard).
Tracking: konfliktlərin xüsusi əməliyyatlar/yamalarla əlaqələndirilməsi.

3) Həll strategiyaları

3. 1 Tam avtomatik (tərifinə görə təhlükəsiz)

CRDT (Conflict-free Replicated Data Types): G-Counter, PN-Counter, OR-Set, LWW-Register, Map/Graph CRDT.

Koordinasiya olmadan yaxınlaşma zəmanəti; zərərlərin/qənaət semantikasının seçilməsi vacibdir.
Kommutativ əməliyyatlar: hər hansı bir qaydada tətbiq olunur (inkrementlər, log-appendlər).
Idempotent handlers: təkrarlama nəticəni dəyişmir (açar upsert, put-if-absent).
Strukturların optimist birləşməsi: 'deep merge + policy' determinant qaydada.

3. 2 Yarı avtomatik (siyasətlə)

3-way merge + massiv qaydaları ('replace' append 'uniqueBy (key) | patchBy (key)').
LWW (Last-Write-Wins): sadə, lakin səbəb düzgünlüyünü itirmək riski.
Mənbələrin prioritetləri: «interaktiv giriş> > defoltlar».
Biznes qaydaları: «limit aşarsa - qismən təsdiq/kompensasiya».

3. 3 Koordinasiya

OCC/MVCC (optimist kilidləmə/çox versiyalı): versiyaların müqayisəsi, retraj.
Pessimist bloklama: 'SELECT... FOR UPDATE ', paylanmış loki (Redlock/DB-lock/etcd).
Konsensus (Raft/Paxos): bir lider qaydanı həll edir; daha az münaqişə, qiymət - gizli.

3. 4 Kontur adam (HITL)

Manual merj/arbitraj üçün UI (xüsusilə - məzmun, tariflər, kataloqlar).
Diffanın ön görünüşü, siyasətin izahı, düymələr: «ours/theirs almaq», «sahələri birləşdirmək», «kompensasiya yaratmaq».

4) Memarlıq təbəqələrinə görə nümunələr

4. 1 API/REST/gRPC

Optimistic concurrency: 'If-Match: <etag>', 409/412 münaqişə zamanı → müştəri təzə ETag nəzərə retrait.
Idempotency-Key üçün POST (ödənişlər/sifarişlər).
Semantik 409: səbəb və təklif olunan hərəkətləri bildirin.

4. 2 Məlumat anbarları

RDBMS: MVCC (snapshot isolation), unikal indekslər, qismən indekslər.
KV/Doc stores: versiyalar/reviziyalar (rev), compare-and-swap (CAS).
Multimaster replikasiyası: kritik varlıqlar üçün/CRDT və ya «write to leader only» versiyalarını tətbiq edin.

4. 3 Növbələr/axın

Exactly-once (praktiki olaraq - «effektiv bir dəfə»): əməliyyat prodüseri + atom write-to-sink.
Konsumerdə dedup: son N id, upsert/merge məntiqi saxlamaq.
Outbox/Inbox deseni: hadisələrin razılaşdırılmış nəşri.

4. 4 Konfiqurasiya və IaC

3-way merge GitOps, tətbiq əvvəl policy-gates (OPA/Kyverno).
Kustomize/Helm: determinant merj strategiyaları və «naməlum açarların» qadağan edilməsi.
Terraform: «drift vs desired» münaqişə siqnalı kimi plan-diff.

5) Alqoritmlər və nümunələr

5. 1 3-way merge (sadələşdirilmiş)

text resolve(base, ours, theirs):
diff1 = delta(base, ours)
diff2 = delta(base, theirs)
if independent(diff1, diff2): return apply(base, diff1 ⊕ diff2)
if conflictsOnlyInArrays: return arrayPolicyMerge(...)
else:
return CONFLICT with hunks

5. REST resursu üçün 2 OCC

http
Client reads
GET /accounts/42 -> ETag: "v17", body: {balance: 100}

Trying to write off
PUT /accounts/42
If-Match: "v17"
{balance: 50}

If someone has managed before
HTTP/1. 1 412 Precondition Failed
{error: "version_mismatch", currentEtag: "v18"}

Müştəri yenidən oxuyur, deltanı mövcud vəziyyətə tətbiq edir və təkrarlayır.

5. 3 Semantik münaqişə (invariant)

pseudo on Debit(accountId, amount):
current = read(accountId)
if current. balance - amount < 0:
return REJECT ("insufficient _ funds") # write early detection (accountId, version = current. version+1, balance=current. balance - amount)

5. 4 CRDT: OR-Set (eskiz)

Elementlər unikal tag ilə əlavə edilir, çıxarılması - xüsusi tag ilə.
«add vs remove» münaqişəsi etiketlər sayəsində həll olunur: remove yalnız görünən add etiketlərini silir.

6) Həll siyasəti: necə rəsmiləşdirmək

Memarlıq doktrinasında təsvir edin:

1. Mənbə sırası (priority chain).

2. Məlumat növləri üzrə strategiyalar: skalyarlar/obyektlər/massivlər/multimedia.

3. səbəb model: Siz versiyası istifadə edib, Lamport, vector clocks.

4. Zərərin semantikası: konsensus lazım olan LWW-də nə itirilə bilər.

5. Müvəqqəti pəncərələr: Deduplikasiya üçün TTL, idempotentlik pəncərələri.

6. Eskalasiya: avto icazə qadağan olunduqda, UI/approval tələbləri.

7. Kompensasiya: İnvariantların yenidən seçilməsi üçün «cancel/compensate» SAGA strategiyası.

7) Metrika və SLO

conflicts_total{type} - növlərə görə tezlik.
conflicts_resolved_auto_ratio - avto-icazələrin payı.
mean_time_to_resolution - həll üçün orta vaxt.
lost_update_incidents - itirilmiş yeniləmə hadisələri.
idempotency_hit_rate - işləmiş Idempotency açarlarının payı.
divergence_depth - replikaların (versiya vektorlarının) uyğunsuzluq dərinliyi.

SLO nümunəsi: «Sintaktik konfliktlərin 99% ≥ avtomatik olaraq HITL ilə ≤ 5 saniyədə, semantik konfliktlər ≤ 15 dəqiqədə həll olunur».

8) Praktik ssenarilər

8. 1 Ödənişlər

Açar: idempotentlik (Idempotency-Key), balansda OCC, geri dönən addımlar üçün SAGA.
Münaqişə: ikiqat silinmə → deadup + balans versiyasının yoxlanılması → qismən kompensasiya.

8. 2 Inventar/biletlər

Seçimlər: pessimist slot/yer kilidi; bitən TTL ilə optimist sifariş; «compare-and-reserve» növbəsi.

8. 3 Məzmun/kataloqlar

3-way merge + HITL: redaktor nəticəni seçir; «təhlükəsiz» sahələr üçün avtomatik qaydalar (qiymətə təsir etməyən SEO etiketləri).

8. 4 GitOps/Kubernetes

Tətbiq edilməzdən əvvəl render və validasiya; reject on unknown keys; qadağa «--force» ağlamadan.
Drift-deteksiya və policy-enforced geri dönüş.

9) Anti-nümunələr

LWW hər yerdə: səbəbiyyət itkisi bahasına sadəlik.
İdempotentlik olmadan gizli retrajlar: uçqun təkrarları.
Massivlərin açıq siyasətinin olmaması: konfiqurasiya nöqtələrinin «sakit» itkisi.
SPOF və uzun bloklama: Şəbəkə üzərindəki qlobal myutekslər.
«Kor» heç bir səbəb audit kompensasiya: təkrar münaqişələr.

10) Giriş çek siyahısı

  • Domen konfliktləri və invariantları müəyyən edin.
  • Version mexanizmini seçin (ETag/xmin/vector clock).
  • Kritik POST/commands-da idempotentliyi daxil edin.
  • Məlumat növlərinə (skalyarlar/massivlər/obyektlər) görə merj siyasətini təyin edin.
  • Sxem validatorları və domen yoxlamalarını commit-ə daxil edin.
  • Konfliktlərin metriklərini və alarmları konfiqurasiya edin.
  • Kritik varlıqlar üçün - lider/konsensus və ya CRDT.
  • HITL flow və UX (diff, şərhlər, audit log) işləyin.
  • SLO və kompensasiya prosedurlarını (SAGA) sənədləşdirin.

11) FAQ

Q: CRDT nə vaxt seçilir və konsensus nə vaxt?
A: CRDT eventual consistency və yüksək mövcudluğu/yerli qeydlər vacib olduqda uyğundur. Konsensus - sərt invariantlar və əməliyyatların ciddi qaydası (pul balansları, giriş hüquqları) olan məlumatlar üçün.

Q: LWW kifayət edirmi?
A: caches, metrik və ikincil indekslər üçün - tez-tez bəli. İstifadəçi məlumatları və pul üçün - demək olar ki, həmişə yoxdur.

Q: duplikasiya pəncərəsini necə seçmək olar?
A: Maksimum gözlənilən təkrar çatdırılma gecikməsinə diqqət yetirin + şəbəkə jitter, 3-5 × p99 ehtiyat əlavə edin.

Q: həmişə HITL etmək lazımdır?
A: Yox. HITL mübahisəli/dəyər münaqişələri üçün tərk edin; qalanları avtomatlaşdırın və loqolun.

12) Nəticələr

Effektiv deteksiya və münaqişələrin həlli uyğun alqoritmlərlə (CRDT/OT/OCC/MVCC/konsensus) və müşahidə olunma qabiliyyəti ilə tamamlanmış versiya, səbəb işarələri, invariantlar və aydın siyasətin birləşməsidir. Münaqişənin «normal» vəziyyət olduğu sistemlər əlçatan və proqnozlaşdırıla bilən olaraq qalır; münaqişənin «istisna» olduğu sistemlər ən əlverişsiz anda qırılır. Model seçin, qaydaları rəsmiləşdirin və nəticəni ölçün.

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!

Telegram
@Gamble_GC
İ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.