Nizolarni deteksiya qilish va hal qilish
1) Mojaroni nima deb hisoblash kerak
Mojaro - o’zgarishlarning ikki yoki undan ortiq manbalari bir xil mohiyat, resurs yoki invariantning nomuvofiq holatlariga da’vo qiladigan holatdir.
Sintaksiy: bitta fayl/kalitning kesishadigan oʻzgarishlari (merge conflict in Git, patch-kolliziyalar in Kustomize).
Semantik: sxema bo’yicha to’g "ri hujjat biznes-invariantni buzadi (kredit bo’≠ debet summasi, limit oshib ketgan).
Operatsion/vaqtinchalik: yozish/o’qish poygalari, takrorlanadigan voqealar, sabab-oqibatlar o’rtasidagi tafovut.
Domenlar: resurs bo’yicha raqobatdosh operatsiyalar (chiptani ikki marta sotish, tovarning overbuki).
Maqsad: mojaroni imkon qadar tezroq aniqlash, uning sababini tushuntirish va harakatlardan birini xavfsiz tanlash: avtoulovni qayta tiklash, retray, qo’shilish, kompensatsiya, eskalatsiya.
2) Deteksiya mexanizmlari
2. 1 Versionlik va holatlarni taqqoslash
ETag/If-Match in REST, rowversion/xmin in DB - lost update.
3-way merge (base, ours, theirs) - mos kelmaydigan tuzatishlarni yoritish.
Checksum/Hash - arzon taqqoslash.
2. 2 Vaqtinchalik va sababiy belgilar
Lamport clock: umumiy tartib «vaqt boʻyicha».
2. 3 Invariantlar va cheklovlar
Sxemalar va validatorlar (JSON Schema/OpenAPI) - sintaktik validlik.
Invariantlar: o’ziga xoslik, salbiy emas, muvozanat, ACL qoidalari.
FK/UNIQUE/EXCLUDE indekslari, partial constraints.
Kod/siyosatdagi domen assert’lari (OPA/Kyverno/Conftest).
2. 4 Voqealar oqimida deteksiya
Idempotency Key/Dedup Store (masalan, Redis/DB bilan TTL): dubllarni rad etish.
Transactional/Exactly-once strimingda: transactional id, producer epoch, konsumer-ofsetlar.
Sequence gap detection: oʻtkazib yuborish, takrorlash (n, n + 1, n + 1).
2. 5 Kuzatuv va signalizatsiya
Xato/ziddiyat/retraj prometrikasi.
3) Hal qilish strategiyasi
3. 1 To’liq avtomatik (ta’rifiga ko’ra xavfsiz)
CRDT (Conflict-free Replicated Data Types): G-Counter, PN-Counter, OR-Set, LWW-Register, Map/Graph CRDT.
Muvofiqlashtirmasdan konvergensiya kafolati; yoʻqotish/saqlash semantikasini tanlash muhimdir.
Kommutativ operatsiyalar: har qanday tartibda qo’llaniladi (inkrementlar, log-appendlar).
Idempotent handlers: takrorlash natijani oʻzgartirmaydi (kalit boʻyicha upsert, put-if-absent).
Tuzilmalarning optimistik qoʻshilishi: «deep merge + policy» determinirlangan tartibda.
3. 2 Yarim avtomatik (siyosat bilan)
3-way merge + massiv qoidalari (’replace’append’uniqueBy (key) | patchBy (key)’).
LWW (Last-Write-Wins): oddiy, ammo sababiy to’g’rilikni yo’qotish xavfi.
Manbalarning ustuvorliklari: «interaktiv kirish> > defoltlar».
Biznes-qoidalar: «agar limit oshsa - qisman tasdiqlash/kompensatsiya».
3. 3 Muvofiqlashtiruvchi
OCC/MVCC (optimistik blokirovka/koʻp versiyalilik): versiyalarni solishtirish, retray.
Pessimistik blokirovka:’SELECT... FOR UPDATE’, taqsimlangan loklar (Redlock/DB-lock/etcd).
Konsensus (Raft/Paxos): bitta rahbar tartibni hal qiladi; mojarolar kamroq, narx yashirin.
3. 4 Kontur ichida odam (HITL)
Qo’lda merj/hakamlik uchun UI (ayniqsa - kontent, tariflar, kataloglar).
Diffni oldindan koʻrish, siyosatni tushuntirish, «ours/theirs qabul qilish», «maydonlarni birlashtirish», «kompensatsiya yaratish» tugmalari.
4) Arxitektura qatlamlari bo’yicha patternlar
4. 1 API/REST/gRPC
Optimistic concurrency:’If-Match: <etag>’, 409/412.
Idempotency-Key v POST (to’lovlar/buyurtmalar).
Semantik 409: Sababi va taklif qilinayotgan harakatlarni aytib bering.
4. 2 Maʼlumotlar ombori
RDBMS: MVCC (snapshot isolation), noyob indekslar, qisman indekslar.
KV/Doc stores: versiyalar/taftishlar (rev), compare-and-swap (CAS).
Multimedia replikatsiyasi: CRDT yoki «write to leader only» versiyalarini tanqidiy narsalar uchun ishlating.
4. 3 Navbatlar/striming
Exactly-once (amalda - «bir marta samarali»): tranzaksion prodyuser + atom write-to-sink.
So’nggi N id, upsert/merge mantig’ini saqlash.
Outbox/Inbox patterni: voqealarni kelishilgan holda nashr etish.
4. 4 Konfiguratsiyalar va IaC
3-way merge to GitOps, policy-gates (OPA/Kyverno) da qo’llanilgunga qadar.
Kustomize/Helm: merjning aniqlangan strategiyalari va «noma’lum kalitlarni» taqiqlash.
Terraform: «drift vs desired».
5) Algoritmlar va misollar
5. 1 3-way merge (soddalashtirilgan)
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 resursi uchun 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"}
Mijoz deltani qayta o’qiydi, dolzarb holatga qo’llaydi va takrorlaydi.
5. 3 Semantik mojaro (invarant)
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)
Elementlar noyob tag bilan qoʻshiladi, olib tashlash esa aniq tag bilan amalga oshiriladi.
«add vs remove» mojarosi faqat koʻrinadigan add-teglarni olib tashlaydi.
1. Manbalar tartibi (priority chain).
2. Ma’lumotlar turlari bo’yicha strategiyalar: skalyarlar/obyektlar/massivlar/multimedia.
3. Sababi model: Versiyalar, Lamport, vector clocks.
4. Yo’qotishlar semantikasi: konsensus kerak bo’lgan LWWda nima yo’qolishi mumkin.
5. Vaqtinchalik oynalar: Deduplikatsiya uchun TTL, idempotentlik oynalari.
6. Eskalatsiya: avto-ruxsatnoma taqiqlanganda, UI/approval talablari.
7. Kompensatsiyalar: invariantlarni qayta tanlash uchun «cancel/compensate» SAGA strategiyasi.
7) Metrika va SLO
conflicts_total{type} - turlari bo’yicha chastota.
conflicts_resolved_auto_ratio - avto-ruxsatnomalar ulushi.
mean_time_to_resolution - tartibga solishgacha bo’lgan o’rtacha vaqt.
lost_update_incidents - yoʻqotilgan yangilanishlar hodisalari.
idempotency_hit_rate - ishlagan Idempotency-kalitlar ulushi.
divergence_depth - replikalarning (versiya vektorlarining) tafovut chuqurligi.
SLO-misol: «Sintaktik mojarolarning 99% ≥ avtomatik ravishda HITL bilan ≤ 5 soniyada, semantik mojarolarning ≤ 15 daqiqasida hal qilinadi».
8) Amaliy stsenariylar
8. 1 To’lovlar
Kalit: idempotentlik (Idempotency-Key), balansdagi OCC, qaytariladigan qadamlar uchun SAGA.
Mojaro: ikki baravar hisobdan chiqarish → dedup + balans versiyasini tekshirish → qisman kompensatsiya.
8. 2 Inventar/chiptalar
Opsiyalari: slot/joyni pessimistik blokirovka qilish; tugayotgan TTL bilan optimistik zirh; «compare-and-reserve» navbati.
8. 3 Kontent/kataloglar
3-way merge + HITL: tahrirchi natijani tanlaydi; «xavfsiz» maydonlar uchun avto-qoidalar (narxga ta’sir qilmaydigan SEO-belgilar).
8. 4 GitOps/Kubernetes
Render va qo’llanishdan oldin validatsiya qilish; reject on unknown keys; «-force» ni ravishsiz taqiqlash.
Drift-deteksiya va policy-enforced qaytarish.
9) Anti-patternlar
LWW hamma joyda: sababiy yo’qotishlar evaziga soddalik.
Idempotentsiz yashirin retrajlar: ko’chki shaklidagi dublikatlar.
Massivlarning aniq siyosati mavjud emas: konfiguratsiya nuqtalarining «jimgina» yoʻqolishi.
Tarmoq ustidagi global myutekslar: SPOF va uzoq vaqt blokirovka qilish.
«Ko’r» kompensatsiyalar auditsiz sabablar: takroriy mojarolar.
10) Joriy etish chek-varaqasi
- Domen va invariantlardagi ziddiyat turlarini aniqlang.
- Version mexanizmini tanlang (ETag/xmin/vector clock).
- Tanqidiy POST/commands ga idempotentlikni kiriting.
- Merj siyosatini maʼlumot turlari (skalyarlar/massivlar/obʼektlar) boʻyicha belgilang.
- Sxema validatorlari va domen tekshiruvlarini kommitgacha yoqing.
- Qarama-qarshiliklar va alarmlar metrikasini sozlang.
- Tanqidiy mavjudotlar uchun - lider/konsensus yoki CRDT.
- HITL-flou va UX (diff, sharhlar, audit log) ustida ishlang.
- SLO va kompensatsiya jarayonlarini (SAGA) hujjatlashtiring.
11) FAQ
Q: CRDTni qachon tanlash kerak va konsensus qachon?
A: CRDT eventual consistency va yuqori ochiqlik/lokal yozuvlar muhim bo’lganda mos keladi. Konsensus - qat’iy invariantlar va operatsiyalarning qat’iy tartibi (pul balanslari, foydalanish huquqlari) bo’lgan ma’lumotlar uchun.
Q: LWW yetarlimi?
A: Keshlar, metriklar va ikkilamchi indekslar uchun - ko’pincha ha. Foydalanuvchi ma’lumotlari va pul uchun - deyarli har doim yo’q.
Q: Deduplikatsiya oynasini qanday tanlash mumkin?
A: Qayta yetkazib berishning kutilayotgan eng ko’p kechikishiga yo’l qo’ying + tarmoq jitterlari, 3-5 × p99 zaxirasini qo’shing.
Q: Har doim HITL qilish kerakmi?
A: Yo’q. HITLni munozarali/qiymat mojarolari uchun qoldiring; qolganlarini avtomatlashtiring va logotip qiling.
12) Yakunlar
Samarali deteksiya va mojarolarni hal qilish - bu mos algoritmlar (CRDT/OT/OCC/MVCC/konsensus) va kuzatish bilan to’ldirilgan versiya, sabab belgilari, invariantlar va aniq siyosat kombinatsiyasi. Mojaro «normal» holat bo’lgan tizimlar arzon va oldindan aytib bo’lmaydigan bo’lib qolmoqda; to’qnashuv «istisno» bo’lgan tizimlar eng noo’rin vaqtda buziladi. Modelni tanlang, qoidalarni rasmiylashtiring va natijani o’lchang.