GH GambleHub

Replikatsiya va eventual consistency

Replikatsiya va eventual consistency

1) Nima uchun eventual consistency

Tizim zonalar/mintaqalar bo’yicha taqsimlanganda, hamma joyda sinxron yozuv yuqori latentlik va tarmoq uzilishlarida past foydalanish imkoniyatini beradi. Eventual consistency (EC) quyidagilar uchun replikalarni vaqtincha sinxronlashtirishga imkon beradi:
  • yozishning past kechikishi (lokal qabul qilish),
  • tarmoqni ajratishda yaxshiroq foydalanish
  • gorizontal masshtabda.

Asosiy vazifa - nazorat qilinadigan nozik muvofiqlik: foydalanuvchi «juda yangi» ma’lumotlarni ko’radi, domen invariantlari saqlanib qoladi, mojarolar aniqlanadi va oldindan aytib bo’ladigan tarzda hal qilinadi.


2) Muvofiqlik modellari - mijozga nimani va’da qilamiz

Strong: oʻqish darhol oxirgi yozuvni koʻradi.
Bounded stale/read-not-older-than (RNOT): oʻqish belgisidan katta emas (LSN/versiya/vaqt).
Causal: «sababiy-oqibatli» munosabatlar saqlanib qoladi (A dan B gacha).
Read-Your-Writes: Mijoz o’zining so’nggi yozuvlarini ko’radi.
Monotonic Reads: keyingi har bir oʻqish orqaga qaytmaydi.
Session: bitta sessiyada kafolatlar toʻplami.
Eventual: yangi yozuvlar mavjud boʻlmaganda, barcha nusxalar birlashadi.

Amaliyot: Session + RNOT ni tanqidiy yo’llarda va Eventual ni vitrin/kesshlarda birlashtiring.


3) Replikatsiya: mexanika va anti-entropy

Sinxron (kvorum/RAFT): yozuv N uzel bilan tasdiqlangandan keyin muvaffaqiyatli hisoblanadi; minimal RPO, p99 dan yuqori.
Asinxron: kommitit yetakchisi mahalliy, jurnalni keyinroq tarqatadi; past latentlik, RPO> 0.
Jismoniy (WAL/binlog): tez, gomogen.
Mantiqiy/CDC: satr/hodisa darajasidagi oʻzgarishlar oqimi, moslashuvchan yoʻnalish, filtrlar.
Anti-entropy: davriy solishtirish va tuzatish (Merkle-daraxtlar, xesh taqqoslash, fon re-sync).


4) Versiya identifikatorlari va sabablarga ko’ra buyurtmalar

Monoton versiyalar: increment/LSN/epoch; oddiy, lekin parallelizmni kodlamaydi.
Lamport timestamp: mantiqiy soatlar boʻyicha qisman tartib.
Vector clock: parallel tarmoqlarni aniqlaydi va ziddiyatli yangiliklarni (concurrent) aniqlashga imkon beradi.
Hybrid/TrueTime/Clock-SI: mantiq global tartib uchun «T dan oldin emas».

Tavsiya: CRDT/ziddiyatli yangiliklar uchun - vector clock; «katta bo’lmagan» uchun - LSN/GTID.


5) Mojarolar: aniqlash va hal etish

Namunaviy vaziyatlar: ikki hududdan bir ob’ektga yozuv.

Strategiyalar:

1. Last-Write-Wins (LWW) soat/mantiqiy shtamp bo’yicha - oddiy, ammo yangilanishlarni «yo’qotishi» mumkin.

2. Domen mantig’i bo’yicha merge funksiyalari:
  • hisoblagich maydonlari yig’iladi (G-Counter/PN-Counter),
  • ko’pchilik «add-wins/remove-wins» bilan birlashadi,
  • summalar/balanslar - faqat tranzaksiya jurnallari orqali, oddiy LWW orqali emas.
  • 3. CRDT (konvergent turlari): ro’yxatlar uchun G-Counter, OR-Set, LWW-Register, RGA.
  • 4. Operatsion transformatsiyalar (kam hollarda DB uchun, ko’pincha muharrirlar uchun).
  • 5. Manual resolution: «inbox» dagi mojaro, foydalanuvchi toʻgʻri versiyani tanlaydi.

Qoida: domen invariantlari strategiyani belgilaydi. Pul/qoldiq uchun - LWW dan qoching; kompensatsiya qilingan tranzaksiya/hodisalardan foydalaning.


6) Yozuvlar kafolatlari va idempotentlik

Buyruqlardagi idempotent kalitlar (payment, withdraw, create) → takrorlash xavfsiz.
Idempotentlik kaliti/seriya raqami boʻyicha «kirish» (inbox) va «chiqish» (outbox) da deduplikatsiya.
Exactly-once kuchli shartlarsiz erishib bo’lmaydi; at-least-once + idempotentlik bilan shug’ullaning.
Outbox/Inbox-pattern: DBga yozish va hodisani atomarni (lokal tranzaksiya) chop etish, qabul qiluvchi idempotency-key orqali qayta ishlaydi.


7) «X dan katta bo’lmagan» (RNOT) o’qishlar

Texnikalar:
  • LSN/GTID-geyt: mijoz minimal versiyani (yozuv javobidan) beradi, router/proksi LSN ≥ X ni ushlagan nusxaga, aks holda yetakchiga yuboradi.
  • Time-bound: «2 sekunddan katta bo’lmagan» - versiyasiz oddiy SLA.
  • Session pinning: N soniya yozilgandan so’ng faqat etakchini o’qiymiz (Read-Your-Writes).

8) O’zgarishlar oqimi va keshlarni kelishish

CDC → voqealar shinasi (Kafka/Pulsar) → iste’molchilar (keshlar, indekslar, vitrinalar).
Kesh nogironligi: topiki’invalidate: {ns}: {id}’; idempotent qayta ishlash.
Rebuild/Backfill: Agar rasinxron boʻlsa, voqealar jurnalidagi proyeksiyalarni qayta saralab oling.


9) Saga va kompensatsiyalar (xizmatlararo tranzaksiyalar)

EC-dunyoda uzoq umr ko’radigan operatsiyalar quyidagi kompensatsion harakatlarga bo’linadi:
  • Orkestr: muvofiqlashtiruvchi qadamlar va ularni kompensatsiya qiladi.
  • Xoreografiya: qadamlar voqealarga munosabat bildiradi va quyidagilarni o’zlari e’lon qiladi.

Invariantlar (misol): «balans ≥ 0» - qadam chegaralarida tekshirish + rad etilganda kompensatsiya.


10) Ko’p mintaqa va tarmoq bo’linmalari

Local-write, async-replicate: mahalliy mintaqada yozish + boshqalarga yetkazib berish (EC).
Geo-fencing: maʼlumotlar mintaqaga yopishtirilgan (past latentlik, kamroq mojarolar).
CP-ma’lumotlar uchun kvorumli DB (Raft); keshlar/vitrinalar - AP/EC.
Split-brain rejasi: aloqa uzilgan taqdirda hududlar domen limitlari (write fencing, kvotalar), so’ngra reconcile doirasida ishlashda davom etmoqda.


11) Kuzatuv va SLO

Metriklar:
  • Replica lag: vaqt/LSN-masofa/offset (p50/p95/p99).
  • Staleness: javoblar chegaradan katta (masalan,> 2s yoki LSN
  • Conflict rate: ziddiyatlar va muvaffaqiyatli merge.
  • Convergence time: choʻqqidan keyin takrorlash vaqti.
  • Reconcile backlog: ortda qoluvchi partiyalar hajmi/vaqti.
  • Ma’lumotlar toifalari bo’yicha RPO/RTO (CP/AP).
Alertlar:
  • Lag> maqsadli, ziddiyatlar ortib bormoqda, mos kelmaydigan «uzun» oynalar.

12) EC ostida ma’lumotlar sxemasini loyihalash

Har bir yozuvdagi aniq versiya/vektor (’version’,’vc’ustunlari).
Kritik invariantlar uchun Append-only jurnallari (balanslar, hisoblashlar).
Xato va tartib uchun hodisa identifikatorlari (snowflake/ULID).
Kommutativ tabiatga ega maydonlar (hisoblagichlar, toʻplamlar) → CRDTga nomzodlar.
API dizayni: if-match/etag bilan PUT, precondition bilan PATCH.


13) Saqlash va o’qish patternlari

Read model/CQRS: «manba» ga yozish, proyeksiyalardan oʻqish (orqada qolishi mumkin → «yangilanmoqda»...).
Stale-OK yo’nalishlari (katalog/lenta) vs Strict (hamyon/limitlar).
So’rovdagi Sticky/Bounded-stale bayroqlari (sarlavhasi’x-read-consistency’).


14) Joriy etish chek-varaqasi (0-45 kun)

0-10 kun

Ma’lumotlarni toifalash: CP-kritik (pul, buyurtmalar) vs EI/stale-OK (kataloglar, qidiruv indekslari).
Steylning SLOsini (masalan, «2s dan katta boʻlmagan»), maqsadli laglarni aniqlash.
Obʼektlar va idempotency-keys versiyasini APIga kiritish.

11-25 kun

CDC va outbox/inbox, kesh nogironlik yo’nalishlarini joriy etish.
RNOT (LSN-gate) va session pinning yozuvni tanqidiy yoʻllarga qoʻshish.
Kamida bitta merge-strategiyani (LWW/CRDT/domen) va mojarolar jurnalini amalga oshirish.

26-45 kun

Anti-entropy (solishtirish/tuzatish) va steyl hisobotlarini avtomatlashtirish.
Game-day: tarmoqni ajratish, mojarolar avj olish, tiklash.
Dashbordda tasvirlash: lag, staleness, conflict rate, convergence.


15) Anti-patternlar

Tanqidiy invariantlar uchun ko’r LWW (pul/ball yo’qotish).
Retrajlarda idempotency → dubli operatsiyalarning yo’qligi.
Hamma narsada «kuchli» model → p99’ning haddan tashqari dumi va nosozligi.
RNOT/Session kafolatlari yoʻq → UX «miltillaydi», foydalanuvchilar oʻzgarishlarni «koʻrmaydi».
Kesh va manbaning yashirin sinxronizatsiyasi (CDC/nogironlik yoʻq).
Reconcile/anti-entropy vositasining yo’qligi - ma’lumotlar «asrlar davomida» farqlanadi.


16) Etuklik metrikasi

Replica lag p95 ≤ maqsadli (masalan, mintaqa ichida ≤ 500 ms, mintaqalararo ≤ 2 s).
Staleness SLO «qatʼiy» yoʻnalishlarda soʻrovlarning 99% ≥ bajariladi.

Conflict resolution success ≥ 99. 9%, o’rtacha ruxsat berish vaqti ≤ 1 daqiqa

Cho’qqilardan so’ng - soat emas, daqiqa.
Pul operatsiyalarining 100 foizi idempotency-kalitlar va outbox/inbox bilan qoplangan.


17) Retseptlar (snippetlar)

If-Match/ETag (HTTP)


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

Agar versiya oʻzgarsa,’412 Precondition Failed’→ mijoz mojaroni hal qiladi.

«LSN dan katta boʻlmagan» soʻrovi (psevdo)


x-min-lsn: 16/B373F8D8

Router’replay _ lsn ≥ x-min-lsn’nusxasini tanlaydi.

CRDT G-Counter (g’oya)

Har bir mintaqa o’z hisoblagichini saqlaydi; jami - barcha komponentlar yig’indisi; replikatsiya - kommutativ operatsiya.


18) Xulosa

Eventual consistency - bu sifat bo’yicha murosa emas, balki ongli shartnoma: biz tezlik va qulaylik uchun yangilik bilan pul to’laymiz, lekin muhim invarantlarni domen strategiyalari va vositalari bilan himoya qilamiz. Versiyalarni kiriting, idempotency, RNOT/Session kafolatlari, CDC va anti-entropy, lag/staleness/conflicts o’lchang - va sizning taqsimlangan tizimingiz hatto nosozliklar va eng yuqori yuklar ostida ham tez, barqaror va oldindan aytib bo’ladigan bo’ladi.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.