System Design
Scalability asoslari
Scalability — tizimning yuklama ortishi bilan bajarilishini saqlash yoki yaxshilash qobiliyati.
Nega Scalability muhim?
Tasavvur qiling, siz startup yaratdingiz:
- 1-kun: 100 foydalanuvchi → bitta server yetadi
- 1-oy: 10,000 foydalanuvchi → server sekinlasha boshladi
- 6-oy: 1,000,000 foydalanuvchi → server ishlamay qoldi
Muvaffaqiyatli mahsulot o’sadi. O’sish uchun tizim scalable bo’lishi kerak.
Vertical Scaling (Vertikal kengayish)
Scale Up — mavjud serverni kuchliroq mashina bilan almashtirish.
Server 1.0 → Server 2.0
- 4 CPU → 16 CPU
- 8 GB RAM → 64 GB RAM
- 500 GB disk → 2 TB SSD
Afzalliklari
- Oddiy implementatsiya: faqat serverni almashtirish kerak
- Murakkablik yo’q: arxitektura o’zgarmaydi
- Ma’lumotlar bir joyda: distributed muammolar yo’q
Kamchiliklari
- Cheklov bor: bitta mashinani cheksiz kuchaytira olmaysiz
- Single point of failure: server ishlamasa, hammasi to’xtaydi
- Qimmat: katta serverlar juda qimmat
- Downtime kerak: serverni almashtirganda to’xtatish kerak
Qachon ishlatiladi?
- Startup boshlang’ich bosqichida
- Database kabi stateful komponentlar uchun
- Legacy tizimlar uchun (qayta yozish qiyin bo’lsa)
Horizontal Scaling (Gorizontal kengayish)
Scale Out — ko’proq serverlar qo’shish.
Server 1 → Server 1, 2, 3, 4, 5, ...
- 4 CPU - 4 CPU (har birida)
- 8 GB RAM - 8 GB RAM (har birida)
Afzalliklari
- Cheksiz kengayish: minglab server qo’sha olasiz
- High availability: bitta server ishlamasa, qolganlari ishlaydi
- Cost-effective: oddiy serverlar arzon
- Zero downtime: yangi server qo’shish paytida tizim ishlaydi
Kamchiliklari
- Murakkab: load balancer, distributed system kerak
- Ma’lumotlar taqsimlangan: consistency muammolari
- Dasturni o’zgartirish kerak: stateless qilish kerak
- Network overhead: serverlar o’rtasida aloqa kerak
Qachon ishlatiladi?
- Million+ foydalanuvchilar
- Microservices arxitektura
- Cloud-native ilovalar
- High availability talab qilinadigan tizimlar
Vertical vs Horizontal: Taqqoslash
| Xususiyat | Vertical | Horizontal |
|---|---|---|
| Narx | Qimmat | Arzon |
| Cheklov | Ha | Yo’q |
| Availability | Past | Yuqori |
| Murakkablik | Oddiy | Murakkab |
| Scaling tezligi | Sekin (downtime) | Tez |
Real-world misollar
- Dastlab: Vertical scaling (katta EC2 instancelar)
- Hozir: Horizontal scaling (minglab server)
- Sabab: billion+ foydalanuvchilarga xizmat
Stack Overflow
- Hozir ham: Asosan vertical scaling
- Sabab: O’rta hajmdagi yuklama, sodda arxitektura yetarli
Netflix
- To’liq horizontal: 100,000+ microservice instancelari
- Sabab: global scale, high availability
Aralash yondashuv (Hybrid)
Ko’pincha ikkalasi birgalikda ishlatiladi:
┌─────────────────────┐
│ Load Balancer │ ← Horizontal scaling
└─────────┬───────────┘
│
┌────┴────┬────────────┐
│ │ │
┌────▼────┐ ┌─▼────────┐ ┌─▼────────┐
│ Server 1│ │ Server 2 │ │ Server 3 │ ← Horizontal
│ (16 CPU)│ │ (16 CPU) │ │ (16 CPU) │ ← Vertical
└─────────┘ └──────────┘ └──────────┘
Har bir server kuchli (vertical) + Ko’p serverlar (horizontal)
Stateful vs Stateless
Horizontal scaling uchun stateless bo’lish muhim:
Stateful (Muammo)
User → Server 1 (session saqlanadi)
User → Server 2 (session yo'q!)
Stateless (Yechim)
User → Server 1 → Redis (session tashqarida)
User → Server 2 → Redis (bir xil session)
Auto-scaling
Modern cloud platformalar avtomatik scale qiladi:
// AWS Auto Scaling Rule
if (CPU > 70%) {
add_server();
}
if (CPU < 30%) {
remove_server();
}
Afzalliklari:
- Traffic spike’larga avtomatik javob
- Kam trafik vaqtida pul tejash
- Manual monitoring kerak emas
Xulosa
Scalability — muvaffaqiyatli tizimning asosi.
Qoidalar:
- Kichik boshlaganda — vertical yetarli
- O’sish kutilsa — horizontal rejalashtiring
- Stateless arxitektura yarating
- Auto-scaling o’rnating
- Monitoring qo’ying (metrikalar kuzating)
Keyingi dars: Tarmoq asoslari va internet protokollari.