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".
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.
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.