9.10-bob: Distributed systems, CAP teoremasi
9-QISM — Arxitektura va ilg'or backend · 10-mavzu
1. Kirish va motivatsiya
9-QISM (Arxitektura)ning yakuniy va eng nazariy-fundamental mavzusi — taqsimlangan tizimlar (distributed systems) va CAP teoremasi. Shu paytgacha o'rgangan mavzularimiz — mikroservis 9.5-bob, replication/sharding 9.9-bob, eventual consistency 9.7-bob — barchasi taqsimlangan tizim. Endi ularning nazariy poydevorini tushunamiz: taqsimlangan tizim nima, nega qiyin, va eng mashhur qonun — CAP teoremasi (Consistency, Availability, Partition tolerance — uchtasidan faqat ikkitasini tanlash mumkin). Bu — har taqsimlangan tizim qarorining asosi (DB tanlash, arxitektura), va System Design intervyuning (15) klassik savoli.
Taqsimlangan tizim — bir necha kompyuter (node) bir maqsad uchun birga ishlaydigan tizim (mikroservis, replicated DB, cluster). Afzalligi — masshtab, chidamlilik 9.9-bob. Lekin u tubdan qiyin: tarmoq ishonchsiz (xabar yo'qoladi, kechikadi), node'lar yiqiladi, vaqt sinxron emas, qism node'lar bir-birini ko'rmay qoladi (partition). Bu qiyinchiliklar bir kompyuterda yo'q (funksiya chaqiruvi ishonchli). CAP teoremasi shu qiyinchilikning matematik haqiqatini ifodalaydi: tarmoq bo'linganda, izchillik (consistency) va mavjudlik (availability) o'rtasida tanlov qilishga majbursiz (ikkalasini birga olib bo'lmaydi).
Bu bob: taqsimlangan tizim (nima, nega qiyin), distributed computing fallacies (noto'g'ri taxminlar), CAP teoremasi (chuqur — C/A/P, nega ikkitasi), CP vs AP (DB tanlash), PACELC (CAP kengaytmasi — latency), consistency modellari (strong/eventual/BASE), consensus (Raft/Paxos — node'lar kelishuvi), va amaliy ma'no. Bu bob 9.5 (mikroservis), 9.7 (eventual consistency), 9.9 (replication), 6.9 (ACID) bilan bog'liq. Bu — taqsimlangan tizim fundament1 (senior+/arxitektor nazariy asosi).
O'xshatish: CAP teoremasi — uzoqdagi do'stlar bilan qaror qabul qilish. Siz va do'stingiz (ikki node) turli shaharda, telefon orqali kelishasiz (tarmoq). Hammasi yaxshi ishlaganda — muammo yo'q. Lekin telefon uzilsa (partition — tarmoq bo'linishi), ikki yo'l qoladi: (1) izchillik — "telefon ulanmaguncha hech qaror qabul qilmaymiz" (ikkalamiz bir xil bilamiz, lekin ish to'xtaydi — mavjudlik yo'q); yoki (2) mavjudlik — "har birimiz o'zimizcha qaror qilamiz" (ish davom etadi, lekin ikkalamiz har xil bilishimiz mumkin — izchillik yo'q). Telefon uzilganda ikkalasini birga (izchil + ish davom) qilib bo'lmaydi — bu CAP. Telefon ishlaganda (partition yo'q) — boshqa savol: tez javob (latency) yoki puxta tekshirish (consistency) — bu PACELC.
Nega muhim?
- Taqsimlangan tizim asosi — mikroservis, replicated DB nazariyasi.
- DB tanlash — CP (MongoDB strong/PostgreSQL) vs AP (Cassandra) — CAP.
- Trade-off tushunish — izchillik vs mavjudlik (majburiy tanlov).
- System Design — intervyu (15) klassik savoli.
2. Nazariya — chuqur tushuntirish
2.1. Taqsimlangan tizim nima va nega qiyin
TAQSIMLANGAN TIZIM — ko'p node birga ishlaydi (bir maqsad):
mikroservis 9.5-bob, replicated DB 9.9-bob, cluster, P2P
NEGA QIYIN (bir kompyuterda yo'q muammolar):
Tarmoq ishonchsiz (xabar yo'qoladi, kechikadi, takrorlanadi)
Node'lar yiqiladi (qism ishlaydi, qism yo'q)
Vaqt sinxron emas (har node'da boshqa soat)
Partition (qism node'lar bir-birini ko'rmaydi — tarmoq bo'linishi)
Tartib kafolat qiyin (qaysi event oldin?)
Qisman nosozlik (A ishlaydi, B yo'q — noaniq holat)
Bir kompyuter: funksiya chaqiruvi ishonchli; taqsimlangan: hammasi noaniqTaqsimlangan tizim — ko'p node bir maqsad uchun birga (mikroservis, replicated DB, cluster). Nega qiyin (bir kompyuterda yo'q muammolar): tarmoq ishonchsiz (xabar yo'qoladi/kechikadi), node'lar yiqiladi, vaqt sinxron emas, partition (node'lar bir-birini ko'rmaydi), tartib qiyin, qisman nosozlik (noaniq holat). Bir kompyuterda funksiya chaqiruvi ishonchli; taqsimlanganda hammasi noaniq (xabar yetdimi? node tirikmi?). Bu — taqsimlangan tizimning tub qiyinligi (CAP shuni ifodalaydi).
2.2. Distributed computing fallacies (noto'g'ri taxminlar)
8 FALLACY (taqsimlangan tizimning noto'g'ri taxminlari — L. Peter Deutsch):
1. Tarmoq ishonchli ( — yo'qoladi, uziladi)
2. Latency nol ( — masofa, kechikish bor)
3. Bandwidth cheksiz ( — cheklangan)
4. Tarmoq xavfsiz ( — hujum bor)
5. Topologiya o'zgarmas ( — node qo'shiladi/o'chadi)
6. Bitta administrator ( — ko'p)
7. Transport narxi nol ( — serializatsiya, tarmoq)
8. Tarmoq bir xil ( — turli)
Bu taxminlar — eng keng XATOLAR manbai (taqsimlangan tizimda)
Har tarmoq chaqiruvi xato bo'lishi mumkin (himoyalan — 9.6: 2.9)Distributed computing fallacies (8 noto'g'ri taxmin — L. Peter Deutsch): tarmoq ishonchli (), latency nol (), bandwidth cheksiz (), tarmoq xavfsiz (), topologiya o'zgarmas (), va h.k. Bu taxminlar — taqsimlangan tizimdagi eng keng xatolar manbai (dasturchilar tarmoqni bir kompyuterdek deb o'ylaydi). Har tarmoq chaqiruvi xato/sekin bo'lishi mumkin himoyalanish (timeout, retry, circuit breaker — 9.6: 2.9). Bu fallacy'larni bilish — taqsimlangan tizim mulohazasining boshlanishi.
2.3. CAP teoremasi (uch xususiyat)
CAP TEOREMASI (Eric Brewer 2000) — uch xususiyat:
C — CONSISTENCY (izchillik):
har o'qish ENG SO'NGGI yozuvni qaytaradi (barcha node bir xil)
A — AVAILABILITY (mavjudlik):
har so'rov JAVOB oladi (node ishlayotgan bo'lsa — kutmaydi)
P — PARTITION TOLERANCE (bo'linishga chidamlilik):
tarmoq bo'linsa ham tizim ISHLAYDI (node'lar bir-birini ko'rmasa ham)
TEOREMA: tarmoq bo'linganda (P), C va A ni BIRGA olib bo'lmaydi
faqat ikkitasi: CP yoki AP (P majburiy — tarmoq bo'linadi)CAP teoremasi (Eric Brewer): uch xususiyat — C (consistency — har o'qish eng so'nggi yozuvni, barcha node bir xil), A (availability — har so'rov javob oladi, kutmaydi), P (partition tolerance — tarmoq bo'linsa ham ishlaydi). Teorema: tarmoq bo'linganda (P), C va A ni birga olib bo'lmaydi faqat ikkitasi: CP yoki AP. P amalda majburiy (tarmoq bo'linadi — bu haqiqat), shuning uchun haqiqiy tanlov: C yoki A (partition paytida). Bu — taqsimlangan tizimning matematik haqiqati.
2.4. Nega faqat ikkitasi (chuqur tushuntirish)
TARMOQ BO'LINGANDA (partition) — 2 node bir-birini ko'rmaydi:
Node A ──╳── Node B (tarmoq uzildi)
Mijoz Node A'ga yozadi (balans = 1000)
TANLOV (A va B uzilgan):
CP (consistency tanlash):
Node A "men B bilan kelisha olmayman" yozishni RAD etadi
izchil (noto'g'ri ma'lumot yo'q), lekin MAVJUD EMAS (A ishlamaydi)
AP (availability tanlash):
Node A yozishni QABUL qiladi (B bilmaydi)
mavjud (A ishlaydi), lekin IZCHIL EMAS (A=1000, B=eski)
Uzilgan node'lar bir xil bo'la OLMAYDI + ikkalasi javob bera olmaydi
C va A — partition paytida bir-biriga ZID (ikkalasi mumkin emas)Nega faqat ikkitasi (chuqur): tarmoq bo'linganda 2 node bir-birini ko'rmaydi. Mijoz A'ga yozadi. CP (consistency): A "B bilan kelisha olmayman" yozishni rad etadi (izchil — noto'g'ri yo'q, lekin mavjud emas). AP (availability): A yozishni qabul qiladi (B bilmaydi) mavjud, lekin izchil emas (A yangi, B eski). Uzilgan node'lar bir vaqtda izchil (bir xil) va mavjud (javob beradi) bo'la olmaydi — bu fizik/mantiqiy haqiqat. Partition paytida C va A zid. Shuning uchun tanlov majburiy.
2.5. CP vs AP (DB tanlash)
CP TIZIMLAR (Consistency + Partition — izchillikni tanlaydi):
- Partition paytida — javob bermaydi (izchillikni saqlaydi)
- Misol: MongoDB (default), HBase, Redis (cluster), Zookeeper
- Qachon: izchillik kritik (bank, to'lov, inventar — noto'g'ri = falokat)
AP TIZIMLAR (Availability + Partition — mavjudlikni tanlaydi):
- Partition paytida — javob beradi (eski bo'lsa ham — eventual)
- Misol: Cassandra, DynamoDB, CouchDB
- Qachon: mavjudlik kritik (social feed, savat, like — eski OK)
"CA" (partition'siz) — amalda yo'q (tarmoq doim bo'linadi)
bir node DB (PostgreSQL) — CA (lekin taqsimlanmagan)CP vs AP (DB tanlash): CP (consistency — partition paytida javob bermaydi, izchil saqlaydi — MongoDB, HBase, Zookeeper — izchillik kritik: bank, to'lov, inventar); AP (availability — partition paytida javob beradi, eski bo'lsa ham — Cassandra, DynamoDB — mavjudlik kritik: social feed, savat, like). "CA" (partition'siz) — taqsimlangan tizimda yo'q (tarmoq doim bo'linadi — P majburiy); bir node DB (PostgreSQL) — CA lekin taqsimlanmagan. DB tanlash — biznes ehtiyojiga (izchillik vs mavjudlik).
2.6. PACELC (CAP kengaytmasi — latency)
PACELC (Daniel Abadi) — CAP'ning to'liqroq ifodasi:
IF Partition (P): A yoki C tanlash (CAP — 2.3)
ELSE (E — normal): L yoki C tanlash (latency yoki consistency)
Partition YO'Q bo'lganda ham tanlov bor:
- Latency (L): tez javob (replica'dan — eski bo'lishi mumkin)
- Consistency (C): puxta (barcha replica kelishadi — sekinroq)
Misol:
- PA/EL (DynamoDB, Cassandra): mavjudlik + latency (tez, eventual)
- PC/EC (MongoDB strong, HBase): izchillik (sekinroq, puxta)
CAP faqat partition haqida; PACELC normal holatni ham qamraydiPACELC (Daniel Abadi — CAP to'liqroq): IF Partition A yoki C (CAP); ELSE (normal) L yoki C (latency yoki consistency). Partition yo'q bo'lganda ham tanlov bor: tez javob (replica'dan — eski bo'lishi mumkin) yoki puxta (barcha replica kelishadi — sekinroq). Misol: DynamoDB/Cassandra (PA/EL — mavjudlik+latency); MongoDB strong/HBase (PC/EC — izchillik). PACELC realroq (CAP faqat partition; PACELC normal holatni ham — bu ko'proq vaqt). Trade-off doim bor (partition'da ham, normal'da ham).
2.7. Consistency modellari (strong eventual)
CONSISTENCY SPEKTRI (kuchli bo'sh):
STRONG (linearizable): har o'qish eng so'nggi yozuvni (bir node kabi)
kuchli, lekin sekin/mavjudlik past (CP)
CAUSAL: sababiy bog'liq tartib saqlanadi (AB bo'lsa, hamma A'ni B'dan oldin)
READ-YOUR-WRITES: o'z yozganingizni doim o'qiysiz (profil o'zgartirdingiz — ko'rasiz)
MONOTONIC READS: bir marta yangi ko'rgach, keyin eski ko'rmaysiz (orqaga ketmaydi)
bular "session guarantees" (foydalanuvchi seansi doirasida — eventual'ni yumshatadi)
EVENTUAL: oxir-oqibat izchil (biroz keyin — vaqtincha eski mumkin)
tez, mavjud (AP — 9.7: 2.7)
BASE (NoSQL falsafasi — ACID'ga muqobil):
Basically Available, Soft state, Eventually consistent
ACID (6.9 — kuchli, SQL) vs BASE (bo'sh, NoSQL) — spektr
biznes: bank strong; feed eventualConsistency modellari (spektr — kuchlibo'sh): strong/linearizable (har o'qish eng so'nggi — bir node kabi — kuchli, lekin sekin/CP); causal (sababiy tartib — AB bo'lsa hamma A'ni B'dan oldin ko'radi); read-your-writes (o'z yozganingizni doim o'qiysiz) va monotonic reads (yangi ko'rgach eski ko'rmaysiz) — bular session guarantees (foydalanuvchi seansi doirasida eventual'ni yumshatadi, amaliyotda juda muhim); eventual (oxir-oqibat izchil — vaqtincha eski mumkin — tez/AP — 9.7: 2.7). BASE (NoSQL falsafasi — Basically Available, Soft state, Eventually consistent — ACID'ga muqobil). ACID (6.9 — kuchli, SQL) vs BASE (bo'sh, NoSQL) — spektr. Biznes tanlaydi: bank balansi strong; social feed eventual. Modern DB — tunable (per-query — 2.10). Consistency — biznes qarori.
2.8. Consensus (node'lar kelishuvi — Raft/Paxos)
CONSENSUS — node'lar bitta qiymatga KELISHISHI (ishonchsiz tarmoqda):
Muammo: 5 node, qaysi qiymat to'g'ri? (ba'zi yiqilgan, tarmoq sekin)
RAFT (tushunarli, keng) / PAXOS (klassik, murakkab):
- Leader saylanadi (bitta node — qaror qabul qiladi)
- Majority (yarmidan ko'p — quorum) kelishsa — qaror qabul
- Leader yiqilsa — yangi saylov
CP tizimlar consensus ishlatadi (kuchli izchillik — etcd, Zookeeper, Raft)
Quorum: 5 node'da 3 kelishsa — yetadi (2 yiqilsa ham ishlaydi)
Consensus — taqsimlangan izchillikning asosi (kelishish mexanizmi)Consensus (node'lar kelishuvi — ishonchsiz tarmoqda bitta qiymatga kelishish): muammo — 5 node, qaysi to'g'ri (ba'zi yiqilgan). Raft (tushunarli, keng) / Paxos (klassik, murakkab): leader saylanadi (qaror qabul qiladi), majority/quorum (yarmidan ko'p kelishsa — qaror), leader yiqilsa yangi saylov. CP tizimlar consensus ishlatadi (kuchli izchillik — etcd, Zookeeper, Kafka). Quorum: 5 node'da 3 kelishsa yetadi (2 yiqilsa ham ishlaydi — chidamlilik). Consensus — taqsimlangan izchillikning matematik asosi.
2.8.1. Raft batafsil (leader election + log replication)
Consensus ustuvor amaliy algoritmi — Raft (Diego Ongaro, 2014). Paxos to'g'ri, biroq tushunish qiyin bo'lgani uchun Raft "tushunarlilik" maqsadida yaratilgan va bugungi kunda etcd, Consul, TiKV, CockroachDB da ishlatiladi. Raft ikki asosiy mexanizmga bo'linadi: leader election (rahbar saylash) va log replication (jurnalni ko'chirish).
RAFT — node uch holatda bo'ladi:
FOLLOWER ──(leader'dan heartbeat kelmasa, timeout)──▶ CANDIDATE
CANDIDATE ──(majority ovoz oldi)──▶ LEADER
LEADER ──(kattaroq term ko'rdi)──▶ FOLLOWER
TERM (davr) — mantiqiy vaqt hisoblagichi (monotonik o'sadi):
har saylov yangi term boshlaydi (eski leader'ni "eskirgan" deb aniqlash)
1) LEADER ELECTION (rahbar saylash):
- Follower election timeout (150–300 ms tasodifiy) kutadi
- Leader'dan heartbeat kelmasa Candidate bo'ladi, term++
- O'ziga ovoz beradi + boshqalardan ovoz so'raydi (RequestVote RPC)
- Majority ovoz olsa Leader (heartbeat yubora boshlaydi)
- Tasodifiy timeout split vote (bo'lingan ovoz) kamayadi
2) LOG REPLICATION (jurnal ko'chirish):
- Mijoz buyrug'i faqat Leader'ga boradi
- Leader log'iga yozadi AppendEntries RPC (follower'larga)
- Majority follower yozgach entry "committed" (bajarildi)
- Committed entry state machine'ga qo'llaniladi (apply)
- Leader commit indeksni follower'larga bildiradi
SAFETY: faqat eng to'liq log'li node leader bo'la oladi
committed ma'lumot hech qachon yo'qolmaydiRaft — consensus'ning tushunarli algoritmi (etcd, Consul, CockroachDB). Node uch holatda: follower, candidate, leader. Term — mantiqiy vaqt (monotonik o'sadi, eski leader'ni aniqlaydi). 1) Leader election: follower
election timeout(150–300 ms tasodifiy — split vote'ni kamaytiradi) kutadi; leader heartbeat'i kelmasa candidate bo'ladi, term++, o'ziga ovoz beradi vaRequestVoteyuboradi; majority ovoz olsa leader bo'ladi. 2) Log replication: mijoz buyrug'i faqat leader'ga boradi leader log'iga yozadiAppendEntriesbilan follower'larga ko'chiradi majority yozgach entry "committed" state machine'ga qo'llaniladi. Safety kafolati: faqat eng to'liq log'li node leader bo'la oladi (committed ma'lumot yo'qolmaydi). Qachon kerak: distributed lock, konfiguratsiya saqlash (etcd), leader tanlash, kritik metadata. Oddiy ilovada Raft'ni o'zingiz yozmaysiz — tayyor tizim (etcd/Zookeeper) ishlatasiz.
2.8.2. Replikatsiya turlari (leader-follower / multi-leader / leaderless)
Ma'lumotni bir necha node'da nusxalash — replikatsiya 9.9-bob. Uch asosiy model bor, har biri boshqacha consistency/availability trade-off beradi.
1) LEADER-FOLLOWER (master-slave) — bitta yozuvchi:
Yozish LEADER; o'qish LEADER yoki FOLLOWER (replica)
┌────────┐ replikatsiya ┌──────────┐
│ LEADER │ ─────────────▶ │ FOLLOWER │ (read-only)
└────────┘ └──────────┘
+ Oddiy, konflikt yo'q; − leader yiqilsa yozish to'xtaydi (failover)
Sinxron replikatsiya: kuchli (sekin) | Asinxron: tez (replica lag)
2) MULTI-LEADER (master-master) — bir necha yozuvchi:
Har datacenter'da leader (geografik tarqoq, offline ilovalar)
+ Har mintaqada tez yozish; − KONFLIKT (bir yozuvni ikki leader o'zgartirsa)
konflikt hal qilish kerak (2.8.5: LWW/CRDT)
3) LEADERLESS (Dynamo-style — quorum) — leader yo'q:
Mijoz bir necha node'ga yozadi/o'qiydi (Cassandra, DynamoDB)
N = replika soni; W = yozish quorum; R = o'qish quorum
R + W > N strong consistency (o'qish va yozish quorum kesishadi)
Misol: N=3, W=2, R=2 2+2>3 o'qish doim so'nggi yozuvni ko'radi
N=3, W=1, R=1 tez, lekin eventual (kesishmasligi mumkin)Replikatsiya modellari 9.9-bob: 1) Leader-follower (master-slave) — bitta yozuvchi (leader), o'qish leader yoki follower'dan; oddiy, konfliktsiz, lekin leader yiqilsa failover kerak. Replikatsiya sinxron (kuchli, sekin) yoki asinxron (tez, lekin replica lag — follower biroz orqada). 2) Multi-leader (master-master) — har datacenter'da leader (geo-tarqoq, offline ilovalar); har mintaqada tez, biroq konflikt (bir yozuvni ikki leader o'zgartirsa — hal qilish kerak). 3) Leaderless (Dynamo-style, quorum — Cassandra/DynamoDB) — leader yo'q, mijoz bir necha node bilan ishlaydi. N — replika soni, W — yozish quorum, R — o'qish quorum. R + W > N bo'lsa strong consistency (o'qish/yozish quorum'lari kesishadi — so'nggi yozuv doim ko'rinadi). Misol: N=3, W=2, R=2 kuchli; N=3, W=1, R=1 tez, lekin eventual. Bu — tunable consistency 2.10-bob ning matematik asosi.
2.8.3. Partitioning / sharding (consistent hashing)
Ma'lumot bitta node'ga sig'masa — uni bo'lish (partitioning/sharding — 9.9). Har partition mustaqil node'da yashaydi.
QAYSI NODE'GA? — partitioning strategiyalari:
RANGE (oraliq): A–H node1, I–P node2, Q–Z node3
+ Oraliq so'rov tez (range scan); − nomutanosib (hot partition)
HASH: hash(key) % N node
+ Bir tekis taqsimot; − N o'zgarsa (node qo'shilsa) HAMMASI ko'chadi (%N buziladi)
CONSISTENT HASHING (ring — Dynamo/Cassandra):
Node va key'lar bitta doiraga (0..2^32) joylashadi:
node qo'shilsa/o'chsa — faqat qo'shni key'lar ko'chadi (hammasi emas)
VIRTUAL NODES (vnodes): har fizik node = ko'p virtual nuqta
yuk bir tekis; rebalancing silliq (yangi node qo'shsangiz — bir oz oladi)
Consistent hashing = elastik masshtab (rebalancing minimal)Partitioning/sharding 9.9-bob — ma'lumot bir node'ga sig'masa uni bo'lish. Range (oraliq bo'yicha) — range-scan tez, biroq nomutanosib (hot partition). Hash (
hash(key) % N) — bir tekis, lekin N o'zgarsa (node qo'shilsa)%Nbuzilib hammasi ko'chadi. Consistent hashing (Dynamo/Cassandra) — node va kalitlar bitta halqaga (0..2³²) joylashadi; node qo'shilsa/o'chsa faqat qo'shni kalitlar ko'chadi (hammasi emas — bu asosiy afzallik). Virtual nodes (vnodes) — har fizik node halqada ko'p nuqta egallaydi yuk bir tekis, rebalancing silliq (yangi node qo'shganda har kimdan bir oz oladi). Consistent hashing = elastik masshtab (minimal ko'chirish bilan node qo'shish/o'chirish).
2.8.4. Voqealar tartibi (Lamport timestamp, vector clock)
Taqsimlangan tizimda soatlar sinxron emas 2.1-bob — "qaysi voqea oldin bo'ldi?" degan savol qiyin. Fizik vaqt (wall clock) ishonchsiz. Yechim — mantiqiy soat.
MUAMMO: node A da voqea, node B da voqea — qaysi oldin? (soatlar har xil)
LAMPORT TIMESTAMP (mantiqiy hisoblagich):
Har node counter tutadi; har voqeada counter++
Xabar yuborilganda counter birga ketadi; qabul: max(o'z, kelgan)+1
AB (sababiy) bo'lsa: L(A) < L(B) KAFOLAT
Lekin: L(A) < L(B) bo'lsa ham AB bo'lishi SHART EMAS (faqat bir yo'nalish)
VECTOR CLOCK (har node uchun alohida counter — [n1,n2,n3]):
A=[2,0,0], B=[2,1,0] A "oldin" (har komponenti ≤)
A=[2,0,0], C=[0,0,3] KONKURENT (taqqoslab bo'lmaydi — konflikt!)
Sababiylikni TO'LIQ aniqlaydi (konkurent yozuvlarni topadi)
Vector clock: konfliktni aniqlash (Dynamo, Riak — 2.8.5)Voqealar tartibi: taqsimlangan tizimda soatlar sinxron emas, shuning uchun "qaysi voqea oldin?" fizik vaqt bilan aniqlanmaydi. Lamport timestamp — har node counter tutadi (har voqeada
++), xabar bilan counter ketadi, qabuldamax(o'z, kelgan)+1. Kafolat: sababiy bog'liq bo'lsa (AB)L(A) < L(B); lekin teskarisi shart emas (L(A)<L(B) bo'lsa ham AB bo'lmasligi mumkin). Vector clock — har node uchun alohida counter ([n1,n2,n3]): agar bir vektorning har komponenti ikkinchisidan≤bo'lsa — biri "oldin"; aks holda konkurent (taqqoslab bo'lmaydi — konflikt!). Vector clock sababiylikni to'liq aniqlaydi va konkurent yozuvlarni (konflikt) topadi — shuning uchun Dynamo/Riak konflikt aniqlashda ishlatadi.
2.8.5. Konflikt hal qilish (LWW, CRDT, version vector)
AP/multi-leader tizimlarda bir yozuv turli node'da har xil o'zgarishi mumkin (2.8.4 — konkurent). Konfliktni hal qilish kerak.
KONFLIKT: X=5 (node A), X=8 (node B) — bir vaqtda (konkurent)
1) LWW (Last-Write-Wins): eng katta timestamp yutadi
+ Oddiy; − MA'LUMOT YO'QOLADI (bir yozuv ustidan yoziladi)
Cassandra default (timestamp bo'yicha)
2) VERSION VECTOR / siblings: ikkala qiymatni SAQLA
ilova/foydalanuvchi hal qiladi (savat: birlashtirish)
Dynamo/Riak: konkurent yozuvlar = siblings (app resolve)
3) CRDT (Conflict-free Replicated Data Type): avtomatik birlashadi
Ma'lumot turi shunday tuzilganki, har tartibda birlashsa BIR XIL natija
Misol: G-Counter (o'suvchi hisoblagich), OR-Set (qo'shish/o'chirish to'plami)
Redis CRDT, Riak, kollaborativ editor (Google Docs, Figma)
LWW = oddiy lekin yo'qotish; CRDT = murakkab lekin yo'qotishsizKonflikt hal qilish (AP/multi-leader): 1) LWW (Last-Write-Wins) — eng katta timestamp yutadi; oddiy, biroq ma'lumot yo'qoladi (Cassandra default). 2) Version vector / siblings — ikkala qiymatni saqlash, ilova/foydalanuvchi hal qiladi (masalan xarid savati — birlashtirish; Dynamo/Riak). 3) CRDT (Conflict-free Replicated Data Type) — ma'lumot turi shunday tuzilganki, qaysi tartibda birlashtirilsa ham bir xil natija (G-Counter — o'suvchi hisoblagich, OR-Set — to'plam). CRDT Redis, Riak va kollaborativ muharrirlarda (Google Docs, Figma) ishlatiladi. LWW oddiy, ammo yo'qotadi; CRDT murakkab, ammo yo'qotishsiz avtomatik birlashadi.
2.8.6. Distributed tranzaksiya (2PC / 3PC / Saga / TCC)
Bir necha node/xizmat bo'ylab atomik o'zgartirish — taqsimlangan tranzaksiya (05/07-bob, 9.5 Saga). Bir DB dagi ACID 6.9-bob bu yerda ishlamaydi.
1) 2PC (Two-Phase Commit) — koordinator boshqaradi:
FAZA 1 (prepare): koordinator "tayyormisiz?" hamma "HA/YO'Q"
FAZA 2 (commit): hamma HA desa "commit"; biri YO'Q "abort"
MO'RT: koordinator faza 2 da yiqilsa node'lar LOCK'da qotadi (bloklanish)
Sinxron, sekin, availability past (CP)
3PC: qo'shimcha "pre-commit" fazasi (bloklanishni kamaytiradi)
murakkabroq, amalda kam (tarmoq partition'da baribir muammo)
2) SAGA (eventual — 9.5, 07-bob): lokal tranzaksiyalar ketma-ketligi
Har qadam mustaqil commit; xato KOMPENSATSIYA (orqaga qadam)
+ Bloklanmaydi, availability yuqori; − eventual (oraliq holat ko'rinadi)
3) TCC (Try-Confirm-Cancel): biznes-darajali 2PC
TRY: resursni REZERV qil (masalan pulni "muzlat")
CONFIRM: rezervni tasdiqla | CANCEL: rezervni bo'shat
Saga'dan qat'iyroq (rezerv orqali izolyatsiya)
Taqsimlanganda 2PC'dan qoch (mo'rt) Saga/TCC (eventual, chidamli)Distributed tranzaksiya (05/07-bob, 9.5): 1) 2PC (Two-Phase Commit) — koordinator boshqaradi: prepare ("tayyormisiz?") hamma "ha" desa commit, biri "yo'q" desa abort. Mo'rt: koordinator 2-fazada yiqilsa node'lar lock'da qotadi (bloklanish); sinxron, sekin, availability past. 3PC qo'shimcha "pre-commit" bilan bloklanishni kamaytiradi, biroq murakkab va amalda kam (partition'da baribir muammo). 2) Saga (9.5, 07-bob) — lokal tranzaksiyalar ketma-ketligi, har qadam mustaqil commit, xato bo'lsa kompensatsiya (orqaga qadam); bloklanmaydi, availability yuqori, biroq eventual (oraliq holat ko'rinadi). 3) TCC (Try-Confirm-Cancel) — biznes-darajali 2PC: Try (resursni rezerv qiladi, masalan pulni "muzlatadi"), Confirm (tasdiq) yoki Cancel (bo'shatish); Saga'dan qat'iyroq (rezerv orqali izolyatsiya). Taqsimlanganda 2PC'dan qoching (mo'rt) — Saga/TCC afzal (eventual, chidamli).
2.8.7. Nosozlikni aniqlash, heartbeat, split-brain
Taqsimlangan tizim node yiqilganini bilishi kerak (leader saylash, failover uchun). Biroq "node yiqildi"mi yoki "tarmoq sekin"mi — farqlash qiyin 2.1-bob.
FAILURE DETECTION (nosozlikni aniqlash):
HEARTBEAT: har node davriy "tirikman" signali yuboradi
N ta heartbeat kelmasa "o'lgan" deb hisobla
Muammo: tarmoq sekinligi = "o'lgan" deb xato aniqlash (false positive)
PHI-ACCRUAL (Cassandra, Akka): binar emas — SHUBHA darajasi (phi)
Tarmoq statistikasiga qarab moslashadi (o'zgaruvchan kechikish)
aniqroq (barqaror tarmoqda tez, o'zgaruvchanida sabrli)
SPLIT-BRAIN (miya bo'linishi) — partition'ning xavfli holati:
Partition tufayli IKKI node o'zini "leader" deb biladi
ikkalasi yozadi = ma'lumot buziladi (falokat!)
YECHIM: QUORUM (majority) — faqat yarmidan ko'p node ko'rgan tomon ishlaydi
ozchilik tomon o'zini o'chiradi (fencing / STONITH)
3 node: 2 vs 1 2-taraf leader, 1-taraf to'xtaydi (split-brain yo'q)Nosozlikni aniqlash: node yiqilganini bilish kerak (failover uchun), biroq "yiqildi"mi yoki "tarmoq sekin"mi — farqlash qiyin. Heartbeat — har node davriy "tirikman" signali; N marta kelmasa "o'lgan" deb hisoblanadi (kamchilik: tarmoq sekinligi false positive beradi). Phi-accrual (Cassandra, Akka) — binar emas, shubha darajasi (phi) qaytaradi va tarmoq statistikasiga moslashadi (aniqroq). Split-brain (miya bo'linishi) — partition'ning eng xavfli holati: ikki node o'zini "leader" deb biladi va ikkalasi yozadi ma'lumot buziladi. Yechim: quorum (majority) — faqat yarmidan ko'p node ko'rgan tomon ishlaydi, ozchilik o'zini o'chiradi (fencing). Shuning uchun klasterlar toq sonli (3, 5) node bilan quriladi (majority aniq bo'lishi uchun).
2.8.8. Vaqt: clock skew, NTP, TrueTime
Taqsimlangan tizimda vaqtga ishonmang — har node soatida farq (clock skew) bor 2.1-bob. Bu tartib, TTL, timestamp uchun muammo.
CLOCK SKEW: node A soati 10:00:05, node B 10:00:02 (3s farq)
timestamp bo'yicha tartib XATO bo'lishi mumkin (LWW noto'g'ri yutadi)
NTP (Network Time Protocol): soatlarni sinxronlash (server bilan)
farqni kamaytiradi (odatda ~ms), lekin NOL emas (kafolat yo'q)
GOOGLE TRUETIME (Spanner): vaqtni ORALIQ sifatida beradi [earliest, latest]
GPS + atom soat; noaniqlikni (uncertainty) O'LCHAYDI (~7ms)
Spanner "commit wait": noaniqlik oralig'i o'tguncha kutadi
global strong consistency (external consistency) — soatga asoslangan
Oddiy tizimda: fizik vaqtga tartib uchun ISHONMANG mantiqiy soat (2.8.4)Vaqt — taqsimlangan tizimning yashirin tuzoqi. Clock skew — node soatlari orasidagi farq (3s ham bo'lishi mumkin) timestamp bo'yicha tartib xato (LWW noto'g'ri qiymatni yutqazadi). NTP (Network Time Protocol) soatlarni serverga sinxronlaydi (farqni ~ms ga tushiradi, biroq nol emas — kafolat yo'q). Google TrueTime (Spanner) vaqtni bitta nuqta emas, oraliq
[earliest, latest]sifatida beradi (GPS + atom soat, noaniqlikni ~7ms o'lchaydi); Spanner commit wait bilan noaniqlik o'tguncha kutadi va global strong consistency (external consistency) beradi. Oddiy tizimda tartib uchun fizik vaqtga ishonmang — mantiqiy soat (2.8.4) ishlating. TrueTime — Google infratuzilmasi (GPS/atom soat) tufayli mumkin, oddiy bulut'da yo'q.
2.8.9. Idempotency va distributed tracing
Taqsimlangan tizim ishonchli bo'lishi uchun ikki amaliy tayanch: idempotency (takror xavfsizligi) va observability (kuzatuvchanlik).
IDEMPOTENCY 8.20-bob: bir amal bir necha marta bajarilsa ham NATIJA BIR XIL
tarmoq ishonchsiz (fallacy 2.2) retry bo'ladi dublikat xavfi
Yechim: idempotency key (client yuboradi) server takrorni tanadi
Misol: to'lov "req-123" — ikki marta kelsa, bir marta bajariladi
DISTRIBUTED TRACING (kuzatuv — bitta so'rov ko'p xizmat bo'ylab):
Trace ID: so'rov boshida yaraladi, hamma xizmatga UZATILADI
Span: har xizmatdagi ish qismi (vaqt, xato)
Gateway Order(span) Payment(span) Inventory(span)
butun yo'lni ko'rish (qayerda sekin/xato — 9.6)
Standart: OpenTelemetry; ko'rish: Jaeger, Zipkin, Tempo
Taqsimlanganda: idempotency (retry xavfsiz) + tracing (xatoni topish) SHARTIdempotency 8.20-bob — bir amal necha marta bajarilsa ham natija bir xil. Tarmoq ishonchsiz (2.2)
retrybo'ladi dublikat xavfi (masalan ikki marta to'lov). Yechim — idempotency key (mijozreq-123yuboradi, server takrorni tanib bir marta bajaradi). Distributed tracing — bitta so'rov ko'p xizmat bo'ylab o'tadi, uni kuzatish uchun trace ID so'rov boshida yaratilib hamma xizmatga uzatiladi; har xizmatdagi ish qismi — span (vaqt, xato). Bu butun yo'lni ko'rsatadi (qayerda sekin/xato — 9.6). Standart — OpenTelemetry; ko'rish vositalari — Jaeger, Zipkin, Tempo. Taqsimlangan tizimda idempotency (retry xavfsizligi) va tracing (nosozlikni topish) — majburiy amaliyot.
2.9. Amaliy ma'no (qaror)
CAP/PACELC AMALDA (qaror qabul qilish):
Ma'lumot izchilligi KRITIKmi? (noto'g'ri = falokat)
HA (bank balansi, inventar, to'lov) CP/strong (PostgreSQL, MongoDB strong)
YO'Q (feed, like, savat) AP/eventual (Cassandra, DynamoDB)
Misollar:
- Bank o'tkazma strong consistency (CP) — pul yo'qolmasligi kerak
- Instagram like soni eventual (AP) — biroz noto'g'ri OK (mavjudlik muhim)
- E-commerce inventar strong (oxirgi mahsulot ikki kishiga sotilmasin)
- Social feed eventual (1s eski post — muammo emas)
Bir tizimda har xil (balans — strong; feed — eventual) — tunableAmaliy ma'no (qaror): izchillik kritikmi? Ha (bank balansi, inventar, to'lov — noto'g'ri = falokat) CP/strong (PostgreSQL, MongoDB strong); yo'q (feed, like, savat — eski OK) AP/eventual (Cassandra, DynamoDB). Misol: bank o'tkazma strong (pul yo'qolmasin); Instagram like eventual (mavjudlik muhim); e-commerce inventar strong (oxirgi mahsulot ikki kishiga sotilmasin). Bir tizimda har xil (balans strong, feed eventual — tunable — 2.10). CAP — biznes ehtiyojiga texnik qaror.
2.10. Modern yondashuv (tunable consistency)
MODERN DB — TUNABLE consistency (per-query tanlov):
Eski: DB butunlay CP yoki AP (qat'iy)
Modern: har so'rovga consistency darajasi (moslashuvchan)
Misol (Cassandra/DynamoDB):
- Muhim yozish QUORUM (kuchli — majority kelishadi)
- Oddiy o'qish ONE (tez — bitta node yetadi)
Bir ilovada: kritik (balans) strong; oddiy (profil) eventual
Eng yaxshi balans (har ma'lumotga mos consistency)
CAP "qat'iy ikkitasi" emas — spektr (per-operation tanlov)Modern yondashuv (tunable consistency): eski DB butunlay CP yoki AP (qat'iy); modern — per-query consistency (moslashuvchan). Cassandra/DynamoDB: muhim yozish QUORUM (kuchli — majority); oddiy o'qish ONE (tez — bitta node). Bir ilovada har xil: kritik (balans) strong, oddiy (profil) eventual. Eng yaxshi balans (har ma'lumotga mos). CAP — "qat'iy ikkitasi" emas, spektr (per-operation). Bu — 2026 amaliyoti (qattiq CP/AP emas, moslashuvchan). Pragmatik consistency.
2.11. Best practices (distributed/CAP)
Fallacy'larni bil (tarmoq ishonchsiz — himoyalan — 2.2, 9.6: 2.9)
CAP: izchillik kritik CP; mavjudlik kritik AP (2.5, 2.9)
PACELC: normal holatda ham latency vs consistency 2.6-bob
Consistency biznesga mos (bank strong, feed eventual — 2.7, 2.9)
Tunable consistency (per-query — modern — 2.10)
Consensus (CP — Raft/quorum — 2.8)
Eventual consistency'ni boshqar (9.7: 2.7 — UI, version)
Taqsimlanmagan yetsa — taqsimlama (monolit — 9.5; bir DB — CA)
Idempotency, timeout, retry (taqsimlangan ishonchlilik — 9.6)3. Sintaksis — tez ma'lumotnoma
CAP 2.3-bob: C (izchillik) | A (mavjudlik) | P (bo'linish) — partition'da C yoki A
CP 2.5-bob: MongoDB strong, PostgreSQL, Zookeeper (izchillik — bank)
AP 2.5-bob: Cassandra, DynamoDB (mavjudlik — feed)
PACELC 2.6-bob: partition'da A/C; normal'da L/C
Consistency 2.7-bob: strong causal read-your-writes eventual (ACID BASE)
Consensus 2.8-bob: Raft/Paxos — leader + quorum (majority)
Raft (2.8.1): leader election (term, RequestVote) + log replication (AppendEntries)
Replikatsiya (2.8.2): leader-follower | multi-leader | leaderless (R+W>N = strong)
Sharding (2.8.3): range | hash | consistent hashing (vnodes, minimal rebalancing)
Tartib (2.8.4): Lamport timestamp | vector clock (konkurent = konflikt)
Konflikt (2.8.5): LWW (yo'qotish) | version vector (siblings) | CRDT (yo'qotishsiz)
Dist. tranzaksiya (2.8.6): 2PC (mo'rt) | Saga (eventual) | TCC (rezerv)
Nosozlik (2.8.7): heartbeat | phi-accrual | split-brain quorum/fencing
Vaqt (2.8.8): clock skew | NTP (~ms) | TrueTime (oraliq, Spanner)
Amaliyot (2.8.9): idempotency (key) | tracing (trace ID + span, OpenTelemetry)
Tunable 2.10-bob: per-query consistency (QUORUM/ONE)4. Batafsil kod namunalari
Misol 1 — Fallacy himoyasi (tarmoq ishonchsiz — 2.2)
// Tarmoq ishonchsiz har chaqiruvni himoyala (9.6: 2.9)
async tashqiXizmat(data: any) {
return firstValueFrom(
this.http.post("http://service-b/api", data).pipe(
timeout(5000), // latency NOL emas (fallacy 2)
retry({ count: 3, delay: 1000 }), // tarmoq ishonchsiz (fallacy 1)
catchError((e) => {
// Node yiqilishi mumkin (qisman nosozlik — 2.1)
throw new ServiceUnavailableException("Xizmat javob bermadi");
}),
),
);
}
// Bir kompyuterda funksiya chaqiruvi ishonchli; tarmoqda — himoya kerak (2.2)Misol 2 — CP tizim (strong consistency — 2.5)
// Bank o'tkazma — STRONG consistency kerak (CP — izchillik kritik — 2.9)
async pulOtkaz(fromId: string, toId: string, summa: number) {
// Tranzaksiya (ACID — 6.9) — strong consistency (bir DB / consensus)
return this.dataSource.transaction("SERIALIZABLE", async (manager) => { // eng kuchli izolyatsiya
const from = await manager.findOne(Account, { where: { id: fromId }, lock: { mode: "pessimistic_write" } });
if (from.balans < summa) throw new BadRequestException("Mablag' yetarli emas");
await manager.decrement(Account, { id: fromId }, "balans", summa);
await manager.increment(Account, { id: toId }, "balans", summa);
// izchil (pul yo'qolmaydi/ikkilanmaydi); partition'da rad etadi (CP)
});
}
// Pul = strong consistency (eventual XATO — pul ikki marta/yo'qolishi mumkin)Misol 3 — AP tizim (eventual consistency — 2.5, 2.7)
// Like soni — EVENTUAL consistency OK (AP — mavjudlik kritik — 2.9)
async like(postId: string, userId: string) {
// Tez yozish (eventual — biroz noto'g'ri son OK)
await this.redis.sadd(`post:${postId}:likes`, userId); // tez (mavjud)
// Like soni eventual — keyin DB'ga sinxron (background)
this.eventEmitter.emit("like.added", { postId }); // async (9.7)
// Darrov taxminiy son (aniq emas — lekin mavjud, tez)
return { likes: await this.redis.scard(`post:${postId}:likes`) };
}
// Like soni 1-2 farq qilsa — muammo emas (mavjudlik muhim — partition'da ham ishlaydi)Misol 4 — Consistency tanlovi (biznesga qarab — 2.9)
// Bir ilovada HAR XIL consistency (biznesga mos — 2.9, 2.10)
@Injectable()
export class OrderService {
async buyurtmaYarat(dto: any) {
// Inventar — STRONG (oxirgi mahsulot ikki kishiga sotilmasin — 2.9)
return this.dataSource.transaction(async (manager) => {
const product = await manager.findOne(Product, {
where: { id: dto.productId }, lock: { mode: "pessimistic_write" }, // strong
});
if (product.zaxira < dto.miqdor) throw new BadRequestException("Zaxira yo'q");
await manager.decrement(Product, { id: dto.productId }, "zaxira", dto.miqdor);
const order = await manager.save(Order, dto);
return order;
});
}
async tavsiyalar(userId: string) {
// Tavsiyalar — EVENTUAL OK (biroz eski — mavjudlik muhim — 2.9)
return this.cache.get(`recommendations:${userId}`); // cache (eventual, tez)
}
}Misol 5 — Quorum (consensus — 2.8)
// Tunable consistency — Cassandra/DynamoDB quorum (2.10)
// Yozish — QUORUM (majority kelishsin — kuchli)
await cassandra.execute(query, params, {
consistency: cassandra.types.consistencies.quorum, // majority node (kuchli — 2.8)
});
// O'qish — ONE (tez — bitta node yetadi — oddiy ma'lumot)
await cassandra.execute(readQuery, params, {
consistency: cassandra.types.consistencies.one, // tez (eventual — 2.10)
});
// QUORUM yozish + QUORUM o'qish = strong (R+W > N); ONE = tez/eventual
// per-query tanlov (kritik strong, oddiy tez — 2.10)Misol 6 — Eventual consistency boshqaruvi (2.7, 9.7)
// Eventual consistency — UI/version bilan boshqarish (9.7: 2.7)
@Post("orders")
async yarat(@Body() dto: any) {
const order = await this.commandBus.execute(new CreateOrderCommand(dto));
// Read model eventual (replica/projection biroz orqada — 2.7)
return {
order,
version: order.version, // versiya (consistency token)
// Frontend: bu version bilan o'qiydi (read model tayyor bo'lguncha poll)
};
}
// Yoki write natijasini darrov qaytarish (read'siz — stale oldini olish)Misol 7 — CAP qaror jadvali (DB tanlash — 2.5, 2.9)
DB TANLASH (CAP asosida):
┌─────────────────┬──────────┬─────────────────────────────┐
│ Ehtiyoj │ Tanlov │ DB │
├─────────────────┼──────────┼─────────────────────────────┤
│ Bank, to'lov │ CP/strong│ PostgreSQL (ACID — 6.9) │
│ Inventar │ CP/strong│ PostgreSQL, MongoDB strong │
│ User profil │ CP │ PostgreSQL/MongoDB │
│ Social feed │ AP/event │ Cassandra, DynamoDB │
│ Like/view soni │ AP/event │ Cassandra, Redis │
│ Log/analytics │ AP │ Cassandra, Elasticsearch │
│ Cache/sessiya │ AP │ Redis 8.15-bob │
│ Config/lock │ CP │ etcd, Zookeeper (consensus) │
└─────────────────┴──────────┴─────────────────────────────┘
Izchillik kritik CP; mavjudlik/masshtab kritik APMisol 8 — Distributed lock (consensus amaliyoti — 2.8)
// Taqsimlangan lock — bir vaqtda bitta node bajarishi (8.18: 2.14, Redis/consensus)
async kritikIsh(resurs: string) {
// Redis lock (oddiy — yetarli ko'p holatda)
const lock = await this.redis.set(`lock:${resurs}`, this.nodeId, "EX", 30, "NX");
if (!lock) throw new ConflictException("Resurs band (boshqa node)");
try {
await this.bajar(resurs); // faqat bitta node (izchil)
} finally {
// Lock'ni faqat egasi o'chiradi (Lua — atomik)
await this.redis.eval(`if redis.call("get",KEYS[1])==ARGV[1] then return redis.call("del",KEYS[1]) end`,
1, `lock:${resurs}`, this.nodeId);
}
}
// Kuchli kafolat kerak bo'lsa — Zookeeper/etcd (consensus — 2.8); Redis — oddiy holatlarMisol 9 — Saga (taqsimlangan tranzaksiya — CAP amaliyoti — 9.5)
// Taqsimlangan tizimda ACID yo'q Saga (eventual consistency — 9.5: 2.10)
async buyurtmaSaga(dto: any) {
const order = await this.orderService.yarat(dto); // 1-node (xizmat)
try {
await this.inventoryService.band(dto); // 2-node (tarmoq — fallacy 2.2)
await this.paymentService.tolov(dto); // 3-node
await this.orderService.tasdiqla(order.id);
} catch (e) {
// Kompensatsiya (orqaga — taqsimlangan "rollback" — eventual)
await this.inventoryService.bekor(dto);
await this.orderService.bekor(order.id);
throw e;
}
}
// Taqsimlangan: ACID o'rniga Saga (eventual consistency — CAP haqiqati)Misol 10 — Taqsimlangan tizim qaror (umumiy)
TAQSIMLANGAN TIZIM QARORI (CAP/PACELC asosida):
1. Taqsimlangan KERAKMI? 9.5-bob
YO'Q (kichik) monolit + bir DB (CA — eng oddiy, izchil)
HA davom et (CAP qoidalari)
2. Ma'lumot izchilligi kritikmi?
HA (pul, inventar) CP/strong (PostgreSQL, transaction — Misol 2)
YO'Q (feed, like) AP/eventual (Misol 3)
3. Aralash? tunable / har ma'lumotga mos (Misol 4, 2.10)
4. Taqsimlangan amaliyot:
- Fallacy himoya (timeout/retry — Misol 1)
- Taqsimlangan tranzaksiya Saga (Misol 9)
- Lock Redis/consensus (Misol 8)
- Eventual UI/version boshqar (Misol 6)
Eng oddiy yechim (monolit/bir DB) yetsa — taqsimlama (CAP murakkabligidan qoch)5. To'g'ri va noto'g'ri holatlar
1) Tarmoqni ishonchli deb taxmin
timeout/retry'siz (fallacy — 2.2)
himoya (timeout, retry, circuit breaker — 9.6)2) Pulga eventual consistency
bank balansi eventual (pul yo'qoladi — 2.9)
strong consistency (CP — ACID)3) Like'ga strong consistency
like soni strong (sekin, mavjudlik past — 2.9)
eventual (AP — tez, mavjud)4) Kichik loyihaga taqsimlangan
keraksiz taqsimlash (CAP murakkabligi — 9.5)
monolit + bir DB (CA — oddiy)5) CAP'ni "har doim ikkitasi" deb qat'iy olish
butunlay CP yoki AP (2.10)
tunable (per-query — har ma'lumotga mos)6. Keng tarqalgan xatolar va yechimlari
Xato 1 — Taqsimlangan tizim "bir kompyuter"dek
Sababi: fallacy 2.2-bob. Yechimi: tarmoq ishonchsiz — himoya 9.6-bob.
Xato 2 — Ma'lumot nomutanosib (replica)
Sababi: eventual consistency e'tiborsiz 2.7-bob. Yechimi: strong (kritik) / boshqaruv (UI/version).
Xato 3 — Noto'g'ri DB (CAP)
Sababi: ehtiyoj DB mos emas 2.5-bob. Yechimi: izchillik kritik CP; mavjudlik AP.
Xato 4 — Taqsimlangan tranzaksiya buzildi
Sababi: ACID yo'q 2.4-bob. Yechimi: Saga + kompensatsiya (Misol 9).
Xato 5 — Distributed lock ishonchsiz
Sababi: oddiy lock (race). Yechimi: atomik (Redis Lua / consensus — Misol 8).
Xato 6 — Over-engineering (taqsimlangan)
Sababi: keraksiz taqsimlash. Yechimi: monolit/bir DB yetsa — shu 9.5-bob.
7. Integratsiya — bu mavzu stack'ning qayerida uchraydi
- Mikroservis 9.5-bob: taqsimlangan tizim.
- Eventual consistency 9.7-bob: AP/CQRS.
- Replication 9.9-bob: CAP amaliyoti.
- ACID 6.9-bob: strong consistency (CP).
- Saga 9.5-bob: taqsimlangan tranzaksiya.
- Ishonchlilik 9.6-bob: fallacy himoya.
- DB tanlash: SQL (CP) vs NoSQL (AP — 6.1).
- Lock 8.18-bob: consensus.
8. Eng yaxshi amaliyotlar (best practices)
- Fallacy'larni bil (tarmoq ishonchsiz — himoyalan — 2.2).
- CAP: izchillik kritik CP; mavjudlik AP (2.5, 2.9).
- PACELC (normal holatda ham latency vs consistency — 2.6).
- Consistency biznesga mos (bank strong, feed eventual — 2.9).
- Tunable consistency (per-query — modern — 2.10).
- Consensus (CP — Raft/quorum — 2.8).
- Eventual consistency boshqaruvi (UI/version — 9.7).
- Taqsimlanmagan yetsa — taqsimlama (monolit/CA — 9.5).
- Idempotency, timeout, retry (taqsimlangan ishonchlilik — 9.6).
- Saga (taqsimlangan tranzaksiya — 9.5).
9. Amaliy loyiha: "Taqsimlangan Tizim Qarorlari"
CAP/distributed'ni amalda mustahkamlash.
Maqsad
Taqsimlangan tizimda to'g'ri consistency qarorlari: CP (kritik), AP (mavjudlik), tunable.
Talablar (requirements)
- Fallacy himoya: timeout/retry (Misol 1, 2.2).
- CP (strong): bank/inventar transaction (Misol 2, 4, 2.5).
- AP (eventual): like/feed (Misol 3, 2.5).
- Aralash consistency: biznesga qarab (Misol 4, 2.9).
- Quorum: tunable (Misol 5, 2.10).
- Eventual boshqaruv: version/UI (Misol 6, 2.7).
- DB tanlash: CAP jadvali (Misol 7, 2.5).
- Distributed lock: atomik (Misol 8, 2.8).
- Saga: taqsimlangan tranzaksiya (Misol 9, 9.5).
- Qaror: taqsimlangan kerakmi (Misol 10).
Maslahatlar (hint)
- Fallacy himoya (2.2, 1-xato).
- Pul strong (2.9, 2-holat).
- Like eventual (2.9, 3-holat).
- Tunable (2.10, 5-holat).
- Saga (taqsimlangan ACID yo'q — 2.4, 4-xato).
- Oddiy yetsa — taqsimlama (9.5, 4-holat).
"Tayyor" mezonlari (acceptance criteria)
- Fallacy himoya.
- CP (strong).
- AP (eventual).
- Aralash consistency.
- Quorum.
- Eventual boshqaruv.
- DB tanlash (CAP).
- Distributed lock.
- Saga.
- Qaror.
Yechim kodi ataylab berilmagan — bu loyihani o'zingiz yozib ko'ring.
10. Xulosa va keyingi bobga ko'prik
Bu bobda taqsimlangan tizimlar va CAP'ni chuqur o'rgandik:
- Taqsimlangan tizim (nega qiyin — 2.1); fallacies (noto'g'ri taxminlar — 2.2); CAP teoremasi (C/A/P — ikkitasi — 2.3, 2.4).
- CP vs AP (DB tanlash — 2.5); PACELC (latency — 2.6); consistency modellari (strong/eventual/BASE — 2.7); consensus (Raft/quorum — 2.8).
- Amaliy ma'no (qaror — 2.9); tunable consistency (modern — 2.10).
9-QISM (Arxitektura va ilg'or backend) TO'LIQ TUGADI! (9.1–9.10: SOLID, design patterns, Clean Architecture, DDD, monolith vs microservices, service communication, event-driven/CQRS/ES, API Gateway, scalability, distributed/CAP). Endi siz arxitektor darajasidagi fikrlashga egasiz — texnologiyani bilish emas, to'g'ri qaror qabul qilish (qaysi arxitektura, qaysi DB, qaysi consistency).
Keyingi QISM — 10-QISM: DevOps va Deploy (Linux, SSH, Nginx, Docker, CI/CD, AWS, Kubernetes, monitoring). Bu — kodni real dunyoda ishga tushirish va boshqarish — "ideal backendchi" ning eng katta yetishmayotgan bo'lagi (siz so'ragan).
Foydalanilgan rasmiy/ishonchli manbalar
Fundamental nazariya:
- Eric Brewer — "CAP Theorem" (2000, keyingi qayta ko'rib chiqish: "CAP Twelve Years Later")
- Seth Gilbert, Nancy Lynch — CAP teoremasining rasmiy isboti
- Daniel Abadi — "Consistency Tradeoffs in Modern Distributed Database System Design" (PACELC)
- L. Peter Deutsch, James Gosling — "Fallacies of Distributed Computing" (8 fallacy)
Consensus va algoritmlar:
- Diego Ongaro, John Ousterhout — "In Search of an Understandable Consensus Algorithm" (Raft), raft.github.io
- Leslie Lamport — "Paxos Made Simple"; "Time, Clocks, and the Ordering of Events" (Lamport timestamp)
Replikatsiya, konflikt, vaqt:
- Amazon — "Dynamo: Amazon's Highly Available Key-value Store" (leaderless quorum, consistent hashing, vector clock)
- Marc Shapiro va boshqalar — CRDT (Conflict-free Replicated Data Types) tadqiqoti
- Google — "Spanner: Google's Globally-Distributed Database" (TrueTime, external consistency)
Kitob va hujjatlar:
- Martin Kleppmann — "Designing Data-Intensive Applications" (taqsimlangan tizim bo'yicha asosiy manba)
- Cassandra, MongoDB, DynamoDB, etcd rasmiy hujjatlari — consistency darajalari
- OpenTelemetry rasmiy hujjatlari — distributed tracing
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!