GH GambleHub

Uyuşmazlık Tespiti ve Çözümü

1) Çatışma olarak kabul edilen şey

Çakışma, iki veya daha fazla değişiklik kaynağının aynı varlık, kaynak veya değişmezin uyumsuz durumlarını iddia ettiği bir durumdur.

Sözdizimsel: bir dosya/anahtarda çakışan değişiklikler (Git'te çakışmayı birleştirme, Kustomize'de yama çakışması).
Semantik: Şemaya göre doğru bir belge iş değişmezini ihlal eder (borç tutarı ≠ kredi, limit aşıldı).
Operasyonel/zamansal: yazma/okuma yarışları, yinelenen olaylar, neden-sonuç uyuşmazlığı.
Etki alanı: kaynak üzerinde rakip işlemler (çift bilet satışı, overbook mallar).

Görev: çatışmayı olabildiğince erken tespit etmek, nedenini açıklamak ve eylemlerden birini güvenli bir şekilde seçmek: otomatik kurtarma, yeniden ödeme, birleşme, tazminat, tırmandırma.

2) Algılama mekanizmaları

2. 1 Sürüm ve durum karşılaştırması

REST'te ETag/If-Match, DB'de rowversion/xmin - güncelleme algılamasını kaybetti.
3-yollu birleştirme (temel, bizim, onların) - uyumsuz düzenlemeleri vurgulamak.
Checksum/Hash alana/belgeye göre - ucuz karşılaştırma.

2. 2 Zaman ve nedensel etiketler

Lamport saati: toplam sipariş "yaklaşık zaman".

Vektör/Sürüm saatleri: rekabetçi algılama (AB) vs nedensellik (A - B).
İpuçları/partiler üzerinde sürüm vektörleri - ıraksama algılama.

2. 3 Değişmezler ve Kısıtlamalar

Şemalar ve doğrulayıcılar (JSON Şeması/OpenAPI) - sözdizimsel geçerlilik.
Değişmezler: benzersizlik, olumsuzluk, denge, ACL kuralları.
Bütünlük kontrolleri: FK/UNIQUE/EXCLUSIVE indeksleri, kısmi kısıtlamalar.
Alan adı, kod/politikalarda (OPA/Kyverno/Conftest) belirtilir.

2. 4 Olay akışlarında algılama

Idempotency Anahtarı/Dedup Mağazası (örn. TTL ile Redis/DB): Almaların reddedilmesi.
Akışta işlemsel/Tam olarak bir kez: işlemsel id, üretici dönemi, tüketim ofseti.
Sıra boşluğu algılama: boşluklar, tekrarlar (n, n + 1, n + 1).

2. 5 Gözlemlenebilirlik ve alarm

Hata/Çarpışma/Retray Prometrics.

Ayrıntılı nedenler (etiketler: tip = semantiksözdizimsel, varlık, parça).
İzler - Çatışmaları belirli işlemlerle/yamalarla ilişkilendirin.

3) Çözüm stratejileri

3. 1 Tam otomatik (tanım gereği güvenli)

CRDT (Çatışmasız Çoğaltılmış Veri Türleri): G-Counter, PN-Counter, OR-Set, LWW-Register, Map/Graph CRDT.

Koordinasyon olmadan yakınsama sağlanması; Kayıp/alıkoyma semantiği seçimi önemlidir.
Değişmeli işlemler: herhangi bir sırayla uygulanır (artışlar, günlük ekleri).
Idempotent işleyicileri: tekrarlama sonucu değiştirmez (anahtarla upsert, put-if-absent).
Yapıların iyimser birleşimi: Deterministik düzen ile 'derin birleştirme + politika'.

3. 2 Yarı otomatik (politikalı)

3 yollu birleştirme + dizi kuralları ('replace' append 'uniqueBy (key) | patchBy (key)').
LWW (Last-Write-Wins): Basit ama nedensel doğruluk kaybı riski.
Kaynakların öncelikleri "etkileşimli girdi> dosya> varsayılanlardan yapılandırma'dır.
İş kuralları: "Limit aşılırsa - kısmi onay/tazminat".

3. 3 Koordinasyon

OCC/MVCC (optimistic blocking/multi-version): versiyon uzlaştırma, yeniden oynatma.
Kötümser kilitler: 'SELECT... GÜNCELLEME İÇİN ', dağıtılmış kilitler (Redlock/DB-lock/etcd).
Konsensüs (Raft/Paxos): Düzene bir lider karar verir; Daha az çatışma var, fiyat gecikme.

3. 4 Kişi-in-loop (HITL)

Manuel Birleşmeler/Tahkimler için Kullanıcı Arayüzü (özellikle İçerik, Tarifeler, Kataloglar).
Diffa'nın önizlemesi, politikanın açıklaması, düğmeler: "bizimkini/onlarınkini kabul et", "alanları birleştir", "tazminat oluştur".

4) Mimari katmanlarına göre desenler

4. 1 API/REST/gRPC

İyimser eşzamanlılık: 'If-Match: <etag>', çatışma durumunda 409/412 - istemci taze ETag'ı dikkate alarak geri çekilir.
POST'da Idempotency-Key (ödemeler/siparişler).
Anlamsal 409: Nedeni ve önerilen eylemleri iletin.

4. 2 Veri ambarları

RDBMS: MVCC (anlık görüntü yalıtımı), benzersiz indeksler, kısmi indeksler.
KV/Doc depoları: sürümler/revizyonlar (rev), karşılaştırma ve takas (CAS).
Çoklu ana çoğaltma :/CRDT kullanın veya yalnızca kritik varlıklar için lidere yazın.

4. 3 Kuyruklar/Akış

Tam olarak bir kez (pratik olarak - "etkili bir kez"): işlemsel üretici + atomik yazma-lavabo.
Konsolda Dedup: son N id'yi saklama, upsert/merge mantığı.
Giden kutusu/Gelen kutusu deseni: tutarlı olay yayımlama.

4. 4 Yapılandırmalar ve IaC

GitOps'ta 3 yönlü birleştirme, kullanımdan önce politika kapıları (OPA/Kyverno).
Kustomize/Dümen: deterministik birleştirme stratejileri ve "bilinmeyen anahtarların" yasaklanması.
Terraform: "Drift vs wanted" çatışma sinyali olarak plan-diff.

5) Algoritmalar ve örnekler

5. 1 adet 3 yönlü birleştirme (basitleştirilmiş)

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 kaynağı için 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"}

İstemci yeniden okur, deltayı geçerli duruma uygular ve tekrarlar.

5. 3 Anlamsal çatışma (değişmez)

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 (taslak)

Öğeler benzersiz bir etiketle eklenir, silinir - belirli bir etiket için.
"Ekle ve kaldır" çakışması, yalnızca görünür ekleme etiketlerini kaldırmak için kaldır etiketleri kullanılarak çözülür.

6) Çözüm politikası: nasıl resmileştirilir

Mimari doktrinde açıklamak:

1. Öncelik zinciri.

2. Veri türüne göre stratejiler: skalerler/nesneler/diziler/multimedya.

3. Nedensel model: sürümleri, Lamport, vektör saatlerini kullanıyor musunuz?

4. Kayıp semantiği: Fikir birliğine ihtiyaç duyulan LWW'de neler kaybedilebilir.

5. Zaman pencereleri: Veri tekilleştirme için TTL, idempotency pencereleri.

6. Eskalasyon: otomatik çözünürlük yasaklandığında, UI/onay gereksinimleri.

7. Tazminatlar: SAGA stratejileri, değişmezleri yeniden birleştirmek için "iptal et/telafi et".

7) Metrikler ve SLO

conflicts_total{type} türe göre frekanstır.
conflicts_resolved_auto_ratio - otomatik izinlerin payı.
mean_time_to_resolution, yerleşim için ortalama zamandır.
lost_update_incidents - Kayıp güncelleme olayları.
idempotency_hit_rate - çalışan Idempotency anahtarlarının oranı.
divergence_depth, replika diverjansın (sürüm vektörlerinin) derinliğidir.

SLO örneği: "Sözdizimsel çatışmaların ≥ %99'u otomatik olarak ≤ 5 saniye içinde, HITL ile semantik çatışmalar ≤ 15 dakika içinde çözülür".

8) Pratik senaryolar

8. 1 Ödemeler

Anahtar: Idempotency-Key, OCC dengede, geri dönüşümlü adımlar için SAGA.
Çakışma: çift yazma- dedup + bilanço sürüm kontrolü - kısmi tazminat.

8. 2 Envanter/Biletler

Seçenekler: kötümser yuva/koltuk engelleme; süresi dolan TTL ile iyimser rezervasyon; Karşılaştırma ve rezerv kuyruğu.

8. 3 İçerik/kataloglar

3 yollu birleştirme + HITL: editör toplam seçer; "Güvenli" alanlar için otomatik kurallar (fiyatı etkilemeyen SEO etiketleri)

8. 4 GitOps/Kubernetes

Uygulamadan önce render ve doğrulama; Bilinmeyen anahtarlarda reddetme; İnceleme yapmadan "--force" yasağı.
Sürüklenme algılama ve politika tarafından zorlanan geri alma.

9) Anti-desenler

LWW her yerde: nedensellik kaybı pahasına basitlik.
Idempotency olmadan gizli retrays: çığ benzeri kopyalar.
Açık dizi ilkesi yok - yapılandırma noktalarının sessiz kaybı.
Ağların üstündeki küresel muteksler: SPOF ve uzun kilitler.
Denetime neden olmadan "kör" tazminatlar: tekrarlanan çatışmalar.

10) Uygulama kontrol listesi

  • Etki alanı çakışması türlerini ve değişmezlerini tanımlayın.
  • Sürüm oluşturma mekanizmasını seçin (ETag/xmin/vektör saati).
  • Kritik POST/komutlarında idempotency etkinleştir.
  • Birleştirme ilkesini veri türüne (skalerler/diziler/nesneler) göre ayarlayın.
  • Şema doğrulayıcılarını etkinleştir ve etki alanı kontrollerini önceden işlet.
  • Çakışma ve uyarı metriklerini yapılandırın.
  • Kritik varlıklar için - lider/konsensüs veya CRDT.
  • HITL akışı ve UX (diff, yorumlar, denetim günlüğü) üzerinde çalışın.
  • Belge SLO'ları ve tazminat prosedürleri (SAGA'lar).

11) SSS

S: CRDT ne zaman seçilir ve ne zaman fikir birliği seçilir?
C: CRDT, nihai tutarlılık kabul edilebilir olduğunda ve yüksek kullanılabilirlik/yerel girişler önemli olduğunda uygundur. Konsensüs - katı değişmezlere ve katı işlem düzenine sahip veriler için (nakit bakiyeleri, erişim hakları).

S: LWW yeterli mi?
C: Önbellekler, metrikler ve ikincil dizinler için - genellikle evet. Kullanıcı verileri ve para için, neredeyse her zaman değil.

S: Veri tekilleştirme penceresini nasıl seçebilirim?
C: Beklenen maksimum yeniden teslimat gecikmesine + ağ titremesine odaklanın, madde 99 × 3-5'lik bir marj ekleyin.

S: Her zaman HITL yapmalı mısınız?
A: Hayır. Uyuşmazlık/değer çatışmaları için HITL'i bırakın, gerisini otomatikleştirin ve günlüğe kaydedin.

12) Toplam

Etkili uyuşmazlık tespiti ve çözümü, sürümleme, nedensel etiketler, değişmezler ve uygun algoritmalar (CRDT/OT/OCC/MVCC/konsensüs) ve gözlemlenebilirlik ile tamamlanan açık politikanın bir kombinasyonudur. Çatışmanın "normal'bir durum olduğu sistemler erişilebilir ve öngörülebilir kalır; Çatışmanın "istisna" olduğu sistemler mümkün olan en kötü zamanda bozulur. Bir model seçin, kuralları resmileştirin ve sonucu ölçün.

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!

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