System Design deep-dive to'plami
Senior va intervyu uchun eng muhim ko'nikma — katta tizimni loyihalash. Bu — 15.7-bobning amaliy, to'liq yechimli davomi. Har bir dizayn: talab baho API ma'lumot arxitektura tor joylar.
Umumiy yondashuv (har dizaynga)
1. TALABNI ANIQLASHTIR — funksional + funksional bo'lmagan (miqyos, kechikish)
2. MIQYOSNI BAHOLA — DAU, RPS, ma'lumot hajmi (taxminiy hisob)
3. API DIZAYN — asosiy endpointlar
4. MA'LUMOT MODELI — jadvallar/sxema
5. YUQORI DARAJALI ARXITEKTURA — komponentlar, oqim
6. CHUQURLASH — tor joylar (bottleneck) va yechim (kesh, navbat, shard)
7. TRADE-OFF — har qaror sababiIntervyuda: ovoz chiqarib o'yla, savol ber (talabni aniqlashtir), diagramma chiz, trade-off'ni ayt. Yakuniy "to'g'ri javob" yo'q — fikrlash jarayoni baholanadi.
Asosiy qurilish bloklari
| Blok | Vazifa | Qachon |
|---|---|---|
| Load balancer | so'rovni serverlarga taqsimlash | ko'p server |
| Kesh (Redis) | tez o'qish, DB yukini kamaytirish | tez-tez o'qiladigan ma'lumot |
| CDN | statik kontentni yaqin serverdan | rasm, video, JS/CSS |
| Message queue | asinxron, yukni tekislash | og'ir/sekin ish (email, video) |
| DB replica | o'qishni ko'paytirish | o'qish-og'ir |
| Sharding | ma'lumotni bo'lib taqsimlash | bitta DB sig'maydi |
| Indeks | tez qidiruv | katta jadval qidiruvi |
DIZAYN 1 — URL qisqartiruvchi (TinyURL)
Talab: uzun havola qisqa kod; kod bosilganda redirect; statistika. Baho: o'qish-og'ir (100:1 read/write). Kunlik 100M redirect ~1200 RPS.
API:
POST /shorten { url } { shortCode }
GET /{shortCode} 301 redirectMa'lumot: urls(code PK, long_url, created_at, clicks)
Kod generatsiya: base62 ([a-zA-Z0-9]) — 7 belgi = 62^7 ≈ 3.5 trillion. Usul: avto-increment ID base62, yoki tasodifiy + to'qnashuv tekshiruvi, yoki hash(url).
Arxitektura:
Client Load Balancer App serverlar Redis kesh (codeurl) DB
(kesh miss)
DB keshga yozTor joy va yechim: redirect o'qish-og'ir Redis kesh (eng ko'p bosiladigan kodlar). Statistika real-time emas asinxron (navbat).
DIZAYN 2 — Rate limiter (so'rov cheklovchi)
Talab: bir foydalanuvchi/IP daqiqada N so'rovdan ko'p qilmasin. Algoritmlar:
- Token bucket — har vaqt birligida token to'ldiriladi, so'rov token yeydi (eng keng).
- Sliding window — oxirgi N soniyadagi so'rovni sanaydi (aniqroq).
- Fixed window — har daqiqada sanagich nollanadi (chegarada portlash muammosi).
Arxitektura: Redis'da har kalit (user:123) uchun sanagich + TTL. Atomik INCR + EXPIRE.
So'rov Redis: INCR user:123 > limit? 429 Too Many Requests
else o'tkazTor joy: ko'p server — markaziy Redis (har serverda alohida emas). Trade-off: aniqlik tezlik.
DIZAYN 3 — Chat ilovasi (real-time)
Talab: 1:1 va guruh, jonli xabar, online holati, tarix, offline yetkazish. Baho: millionlab doimiy ulanish.
Arxitektura:
Client WebSocket Chat serverlar (ko'p)
Redis pub/sub (serverlar orasida)
DB (xabar tarixi)
Navbat (offline push/email)Kalit muammolar:
- Ko'p server: A foydalanuvchi server-1'da, B server-2'da Redis pub/sub orqali xabar uzatiladi.
- Sticky session: bir foydalanuvchi bir serverga (load balancer).
- Offline: foydalanuvchi onlayn emas DB'ga saqla + push bildirishnoma.
- Yetkazildi/o'qildi: holat (ack) tizimi.
(To'liq: 16.3-bob)
DIZAYN 4 — Yangiliklar lentasi (news feed)
Talab: foydalanuvchi kuzatganlar postlarini vaqt/reyting bo'yicha ko'radi. Ikki yondashuv:
FAN-OUT ON WRITE (push):
Post yozilganda har obunachining feed keshiga qo'shiladi
o'qish tez (kesh tayyor) mashhur (millionlab obunachi) — qimmat yozish
FAN-OUT ON READ (pull):
Feed so'ralganda kuzatilganlar postlari yig'iladi
yozish arzon o'qish sekin (har safar yig'ish)
GIBRID: oddiy foydalanuvchi — push; mashhur (celebrity) — pullArxitektura: post DB + feed kesh (Redis) + reyting algoritmi (vaqt, layk, yaqinlik). Sahifalash (cursor pagination).
DIZAYN 5 — Bildirishnoma tizimi
Talab: in-app + email + push, ko'p kanal, sozlama, ishonchli yetkazish. Arxitektura:
Hodisa Navbat (queue) Worker kanal bo'yicha yuborish
├ in-app (WebSocket/DB)
├ email (SMTP servis)
└ push (FCM/APNs)Kalit: asinxron (navbat — yuborish sekin), qayta urinish (retry), idempotentlik (takror yubormaslik), sozlama (foydalanuvchi qaysi kanalni tanlagan).
DIZAYN 6 — Fayl saqlash (Dropbox/S3 lite)
Talab: fayl yuklash/yuklab olish, ulashish, katta fayl. Arxitektura:
Client App Object storage (S3) [signed URL bilan to'g'ridan]
Metadata DB (fayl nomi, egasi, hajm, kalit)
CDN (yuklab olish tezligi)Kalit: katta fayl — chunked upload (bo'lak-bo'lak), signed URL (xavfsiz, to'g'ridan S3), metadata DB'da, deduplikatsiya (hash bilan takror faylni saqlamaslik).
DIZAYN 7 — Qidiruv tizimi (typeahead/autocomplete)
Talab: har harf yozilganda mos takliflar (tez). Arxitektura: Trie (prefiks daraxti) yoki Elasticsearch; mashhur so'rovlar keshlangan; debounce (har harfda emas). Kalit: kechikish < 100ms kesh + indeks; reyting (mashhurlik bo'yicha).
Muhim tushunchalar
- CAP teoremasi: taqsimlangan tizimda Consistency, Availability, Partition tolerance — uchchalasini to'liq olib bo'lmaydi (2 tasini tanlaysan).
- Vertikal vs gorizontal miqyos: serverni kuchaytirish vs server qo'shish.
- SQL vs NoSQL: izchillik/bog'lanish vs miqyos/moslashuvchanlik.
- Eventual consistency: ma'lumot darrov emas, vaqt o'tib izchil bo'ladi (taqsimlangan).
- Idempotentlik: bir amalni takror bajarsa ham natija bir xil (to'lov, navbat).
- Backpressure: iste'molchi yetisha olmasa, ishlab chiqaruvchini sekinlatish.
Mashq
Quyidagilarni o'zing loyihala (talab API DB arxitektura tor joy):
- Instagram (rasm ulashish)
- Uber (haydovchi-yo'lovchi moslash)
- YouTube (video uzatish)
- Ticketmaster (chipta — yuqori concurrency)
- Google Docs (birgalikda tahrir)
Bog'liq: 15.7 System Design, Intervyu banki · Bosh sahifa: README.
Izohlar (0)
Izoh yozish uchun kiring.
- Hozircha izoh yo'q. Birinchi bo'ling!