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