WisarWisar
Hamroh materiallar/Chuqur bilim5 daqiqa

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)

text
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 sababi

Intervyuda: 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:

text
POST /shorten { url }       { shortCode }
GET  /{shortCode}           301 redirect

Ma'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:

text
Client  Load Balancer  App serverlar  Redis kesh (codeurl)  DB
                                           (kesh miss)
                                         DB  keshga yoz

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

text
So'rov  Redis: INCR user:123  > limit?  429 Too Many Requests
                                 else  o'tkaz

Tor 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:

text
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:

text
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) — pull

Arxitektura: 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:

text
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:

text
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):

  1. Instagram (rasm ulashish)
  2. Uber (haydovchi-yo'lovchi moslash)
  3. YouTube (video uzatish)
  4. Ticketmaster (chipta — yuqori concurrency)
  5. 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!
System Design deep-dive to'plami — Wisar