Bu darsda nima bor
1–4-qismlar CAP’ni noldan quradi: nega kerak, uch xususiyat (C, A, P), P nega majburiy va CP vs AP tanlovi. 5–6-qismlar — amaliy misollar (qaysi baza qaysi lager), biznes tanlovi va PACELC kengaytmasi. 7-qism arxitektura qarorini qanday qilishni hal qiladi. Bu mavzu kursning ko‘p qismini (replikatsiya, CQRS) bog‘laydi.
Nega kerak — bo‘linish paytidagi tanlov
Oddiy o‘xshatish: ikki filialdagi omborchi bir-biriga telefon qila olmay qoldi (aloqa uzildi). Mijoz mahsulot so‘rayapti. Ikki yo‘l: yo "hozir aniq ayta olmayman, kuting" (aniqlik), yo "menda 5 dona bor deb bilaman, oling" (xizmat davom etadi, lekin boshqa filial allaqachon sotgan bo‘lishi mumkin).
Butun kurs davomida taqsimlangan tizimlar qurdik: mikroservis (1), sharding (6), replikatsiya (7). Ularning hammasi bir necha node’ga tarqalgan. Va node’lar orasidagi tarmoq ishonchsiz — u uzilishi mumkin (partial failure — asosiy tushuncha).
Tarmoq bo‘linganda (partition — node’lar bir-biriga yeta olmay qolganda), tizim ikki yomon variant oldida qoladi:
1. Eng so‘nggi ma’lumotga kafolat berolmasa — so‘rovni rad et (izchil, lekin ishlamaydi)?
2. Yoki eskirgan bo‘lishi mumkin bo‘lgan ma’lumot bilan javob ber (ishlaydi, lekin noto‘g‘ri bo‘lishi mumkin)?
CAP teoremasi (Brewer): taqsimlangan tizimda uch xususiyatdan — Consistency (izchillik), Availability (mavjudlik), Partition tolerance (bo‘linishga chidamlilik) — bir vaqtda faqat ikkitasini to‘liq kafolatlash mumkin. Bu — arxitektura qarorlaringizning nazariy poydevori.
Asosiy g‘oya — C, A, P
Avval uch xususiyatni aniq tushunamiz:
- Consistency (izchillik): har bir o‘qish eng so‘nggi yozuvni qaytaradi — barcha node’lar bir xil ma’lumotni ko‘radi. (Bu ACID’dagi "C" emas — bu linearizability, ya’ni butun tizim bitta nusxadek ko‘rinadi.)
- Availability (mavjudlik): har bir so‘rov (xato bo‘lmagan) javob oladi — hatto u eng so‘nggi bo‘lmasa ham.
- Partition tolerance (bo‘linishga chidamlilik): node’lar orasidagi tarmoq uzilsa ham tizim ishlashda davom etadi.
P majburiy — asl tanlov C yoki A
Eng keng tarqalgan tushunmovchilik: "uchtadan ikkitasini tanla". Aslida to‘g‘riroq talqin bor — va u hammasini o‘zgartiradi.
Taqsimlangan tizimda tarmoq bo‘linishi (partition) muqarrar — kabellar uziladi, paketlar yo‘qoladi, node’lar sekinlashadi. Sen "bo‘linish bo‘lmasin" deb tanlay olmaysan. Demak P doim kerak.
Shuning uchun asl savol: tarmoq bo‘linganda nimani qurbon qilasan — izchillikni (C) yoki mavjudlikni (A)?
• Bo‘linish yo‘q paytda — ikkalasiga ham ega bo‘lasan.
• Bo‘linish bor paytda — bittasini tanlashga majbursan.
CP vs AP — ikki lager
CP · AP · CAShunday qilib, taqsimlangan tizimlar amalda ikki lagerga bo‘linadi: CP va AP.
| CP (Consistency + Partition) | AP (Availability + Partition) | |
|---|---|---|
| Bo‘linishda | So‘rovni rad etadi/bloklaydi | Javob beradi (eskirgan bo‘lishi mumkin) |
| Ma’lumot | Doim izchil | Pirovard izchil (eventual) |
| Xavf | Vaqtincha ishlamay qolishi | Eskirgan/noto‘g‘ri o‘qish |
| Misol | etcd, ZooKeeper, an’anaviy RDBMS (sync) | Cassandra, DynamoDB, Riak |
Uchinchi kombinatsiya — CA (izchillik + mavjudlik, bo‘linishga chidamsiz) — amalda taqsimlangan tizim uchun mavjud emas. U faqat bitta nodeli tizimda bo‘ladi (bo‘linish umuman yo‘q). Bir necha node bo‘ldimi — P majburiy, demak tanlov CP yoki AP.
Amaliy misollar va bazalar
biznes tanloviCAP mavhum emas — u har kungi arxitektura qaroringizga ta’sir qiladi. Tanlovni biznes belgilaydi: sizning ma’lumotingiz eskirishga qanchalik chidamli?
Biznes tanlovni belgilaydi
- CP — to‘g‘rilik birinchi: pul, balans, inventar, identifikatsiya. Bank o‘tkazmasida "eskirgan balans" — halokat. Bo‘linsa — rad etib, keyin urinish afzal.
- AP — mavjudlik birinchi: ijtimoiy lenta, layklar, kataloglar, analitika. Instagram feed’ida bitta post biroz kech ko‘rinsa — hech kim sezmaydi. Doim ishlashi muhimroq.
Kurs mavzulari bilan bog‘lanish
Aslida biz bu tanlovni allaqachon ko‘rgandik:
| Mavzu | CAP tanlovi |
|---|---|
| Sinxron replikatsiya (7-mavzu) | CP tomonga — replikani kutadi, izchillik; bo‘linsa yozuv bloklanadi |
| Asinxron replikatsiya (7-mavzu) | AP tomonga — darhol javob, lag/eskirish mumkin |
| Eventual consistency (9-mavzu CQRS) | AP — read model biroz orqada |
| Quorum/konsensus (7-mavzu Patroni) | CP — ko‘pchilik rozi bo‘lmasa, yozmaydi |
Bu — taqsimlangan tizimlardagi "to‘g‘rilik birinchi" vs "mavjudlik birinchi" falsafiy bo‘linishning aniq ko‘rinishi. Har bir taqsimlangan ma’lumotlar bazasi bu qarorni o‘z dizayniga singdirgan — va uni tanlaganingda, aslida bu falsafani tanlaysan.
Nuanslar va PACELC
tunable · PACELCCAP ko‘pincha haddan tashqari soddalashtiriladi. Senior darajada uch nuansni bilish kerak.
Nuans 1 · Bu spektr, ikkilik emas
C va A — "bor/yo‘q" emas, balki daraja. Izchillikning turli kuchlari bor (kuchli → pirovard). Aksariyat real tizimlar orasida — mutlaq CP yoki AP emas.
Nuans 2 · Ko‘p tizim sozlanadi (tunable)
Cassandra, DynamoDB kabi tizimlar har amal uchun izchillik darajasini tanlashga ruxsat beradi — kvorum orqali:
// TUNABLE CONSISTENCY (Dynamo/Cassandra): N replika, W yozuv kvorumi, R o'qish kvorumi
// Agar R + W > N -> KUCHLI izchillik (o'qish har doim eng so'nggini ko'radi)
// Agar R + W <= N -> yuqori mavjudlik, lekin eskirish mumkin (AP)
// Misol: N=3
// W=3, R=1 -> yozuv sekin (hammani kutadi), o'qish tez, izchil
// W=1, R=1 -> ikkalasi tez, lekin eskirish mumkin (AP)
// W=2, R=2 -> muvozanat: R+W=4 > 3 -> izchil, lekin bittasi o'lsa ham ishlaydi
Nuans 3 · PACELC — to‘liqroq manzara
CAP faqat bo‘linish paytini tasvirlaydi. Lekin PACELC to‘liqroq: agar bo‘linish (P) bo‘lsa — A yoki C; Else (bo‘linish yo‘q, normal holat) — Latency (kechikish) yoki Consistency. Ya’ni: hatto tarmoq soppa-sog‘ bo‘lsa ham, izchillikni oshirsang (masalan, hamma replikani kutsang) — kechikish ortadi. Izchillik bepul emas — bo‘linishda mavjudlikka, normal holatda tezlikka to‘laysan.
Qanday qaror qilish
CAP’ni bilishning maqsadi — ongli qaror qabul qilish. "Eng yaxshi baza" degani yo‘q; sizning ma’lumotingizga eng mos tanlov bor.
1. Savol ber: "tarmoq bo‘linganda, bu ma’lumot uchun eskirgan javob berilsa — nima bo‘ladi?"
— Halokat (pul, balans, inventar band qilish, noyoblik) → CP: to‘g‘rilik birinchi, kerak bo‘lsa rad et.
— Muammo yo‘q (lenta, layk, ko‘rishlar, katalog, tavsiya) → AP: mavjudlik birinchi, keyin moslashtir.
2. Bu — tizim emas, use-case qarori: bitta ilovaning turli qismlari turlicha bo‘lishi mumkin. To‘lov moduli — CP; mahsulot ko‘rishlar hisoblagichi — AP. Bir baza bo‘lishi shart emas.
3. Sozlanadigan tizimlarda (Cassandra, Dynamo) — har amalga mos izchillik darajasini tanla (kvorum bilan).
4. Ko‘r-ko‘rona tanlama: ma’lumoting eskirishga qanchalik chidamli ekanini tushunib, shunga qarab.
Ko‘pchilik ilovalar aslida ikkala turdagi ma’lumotga ega. Yetuk arxitektura — kritik qismni CP, qolganini AP qilib, har biriga mos ombor/sozlamani tanlaydi (masalan, balans → kuchli izchil SQL; sessiya/kesh → Redis; feed → eventual).
Eslab qolish kerak bo‘lgan 5 jumla
- CAP teoremasi: taqsimlangan tizimda Consistency, Availability, Partition tolerancedan bir vaqtda faqat ikkitasini to‘liq kafolatlash mumkin.
- Haqiqiy talqin: bo‘linish (P) muqarrar — shuning uchun asl tanlov bo‘linish paytida C yoki A. Bo‘linish yo‘q paytda — ikkalasiga ham ega bo‘lasan.
- CP — bo‘linishda rad etadi (to‘g‘rilik birinchi: etcd, sync RDBMS). AP — bo‘linishda javob beradi (mavjudlik birinchi: Cassandra, DynamoDB). CA — faqat bitta node.
- Tanlovni biznes belgilaydi: pul/inventar → CP; lenta/layk → AP. Bu tizim emas, use-case qarori.
- Nuanslar: C/A — spektr; ko‘p tizim sozlanadi (kvorum R+W>N); PACELC — bo‘linish yo‘q paytda ham kechikish vs izchillik tanlovi bor.
Bu mavzuning Deep/Senior qatlami (izchillik modellari spektri — linearizability/sequential/causal/eventual, kvorum matematikasi R+W+N, PACELC chuqur, Spanner/Dynamo/Cassandra qanday ishlashi, CRDT bilan AP konflikt yechish, consensus va CAP) kerak bo‘lsa — ayting.
Yoki keyingi mavzu: “12-mavzu: Observability” — taqsimlangan tizimda nima bo‘layotganini ko‘rish.