System Design
System design – bu ma'lum talablar va biznes ehtiyojlarini qondirish uchun dasturiy yoki texnik tizimning arxitekturasi, komponentlari, modullari va interfeyslarini loyihalash jarayonidir. Bu jarayon tizimning umumiy tuzilmasini, qanday qismlarga bo'linishini va ular qanday o'zaro aloqa qilishini belgilaydi, hamda uning samaradorligi, ishonchliligi va kengaytirilishini ta'minlaydi.
Katta hajmdagi tizimlarda faqat kod yozish yetarli emas. Masalan, ijtimoiy tarmoq, onlayn to'lov platformasi yoki e-commerce sayti millionlab foydalanuvchiga xizmat qilishi kerak bo'ladi. Shunday paytda to'g'ri arxitektura quyidagilarni ta'minlaydi:
- Scalability (kengayish qobiliyati) – tizim foydalanuvchilar soni va yuklama ortganida ham samarali ishlashni davom ettirishi uchun uni oson kengaytirish mumkin bo'ladi.
- Reliability (ishonchlilik) – tizim xatoliklarda ham uzluksiz ishlaydi.
- Performance (samaradorlik) – tezkor va past kechikish bilan javob beradi.
- Security (xavfsizlik) – ma'lumotlar himoyalangan bo'ladi.
- Maintainability (qo'llab-quvvatlash osonligi) – tizimni yangilash va kengaytirish qulay bo'ladi.
Info
System design – bu dasturiy tizimlarni katta ko'lamda ko'rish, ularni qanday qurish, qanday bo'lishi va foydalanuvchiga qanday xizmat qilishi haqida qarorlar qabul qilish jarayonidir. To'g'ri system design tufayli tizim samarali ishlaydi, foydalanuvchilarga qulay xizmat ko'rsatadi va kelajakda kengaytirish oson bo'ladi.
System design jarayoni
System design odatda ikki asosiy bosqichdan iborat:
- High-Level Design (HLD) – tizimning katta ko'rinishi: servislar, modullar, ma'lumotlar oqimi va ularning bog'liqligi.
- Masalan, web ilovada: autentifikatsiya servisi, ma'lumotlar bazasi, caching servisi.
- Low-Level Design (LLD) – tizimning ichki tafsilotlari: ma'lumotlar bazasi sxemalari, algoritmlar, API endpointlari va modul darajasidagi kod tuzilmalari.
Vertikal kengayish va gorizontal kengayish
Katta tizimlarni dezayn qilish jarayonida Gorizontal va Vertikal kengaytirish tushunchalarga duch kelasiz, xo'sh bu tushunchalar nimani anglatadi?
Vertikal kengaytirish(vertical scaling) serverlarga qo'shimcha resurs (CPU, RAM va boshqalar) qo'shish jarayonini anglatadi. Gorizontal kengaytirish(horizontal scaling) resurs qo'shish bilan emas qo'shimcha serverlar qo'shib kengaytirish imkonini beradi.
So'rovlar soni kam bo'lsa vertikal kengayishni tanlash mumkin. Vertikal kengayishning soddaligi uning asosiy afzalligi hisoblanadi. Ammo bu jiddiy cheklovlar keltirib chiqaradi.
- Resurslar chegarasi bor. Bitta serverga cheksiz CPU va xotira qo'shish mumkin emas.
- Uzilishlar mavjud, agar server ishlamay qolsa veb-sayt/ilova to'liq ishlamay qoladi.
Yuqoridagi Cheklovlar tufayli gorizontal kengayish katta loyihalar uchun ko'proq to'g'ri tanlov bo'ladi. Gorizontal kengaytirish bitta serverni kattalashtirish emas, balki qo'shimcha serverlarni qo'shib, tizimni kengaytirish usuli. Bu usulda turli serverlar load balancer yordamida foydalanuvchi so'rovlarini taqsimlab ishlaydi.
Gorizontal kengayishning asosiy afzalliklari:
- Cheksiz kengaytirish imkoniyati – resurslar tugab qolsa, yangi server qo'shish orqali tizimni kattalashtirish mumkin.
- Xavfsizlik va uzluksizlik – bitta server ishlamay qolsa ham, qolgan serverlar ishlashda davom etadi (high availability).
- Moslashuvchanlik – tizimni ehtiyojga qarab oson kengaytirish yoki qisqartirish mumkin.
Gorizontal kengayishning ham muammolari bor:
- Murakkablik – serverlar soni ko'payganda ularni boshqarish, sinxronlashtirish, ma'lumotlar bazasini taqsimlash qiyinlashadi.
- Qo'shimcha xarajat – ko'proq server va infratuzilma talab qiladi.
Load balancer
Load balancer kiruvchi trafikni oldindan belgilangan veb-serverlar o'rtasida teng taqsimlaydi. Quyidagi rasmda load balancer qanday ishlashi ko'rsatilgan.
bytebytego.com
Yuqoridagi rasmda foydalanuvchilar to'g'ridan-to'g'ri load balancerning umumiy Public IPsiga ulanadi. Ushbu sozlash yordamida veb-serverlarga endi mijozlar to'g'ridan-to'g'ri kirish imkoni yo'q. Xavfsizlik uchun Private IPlar serverlar o'rtasidagi aloqa uchun ishlatiladi.
Private IP - faqat bitta tarmoqdagi serverlar o'rtasida mavjud bo'lgan IP manzil. Bu IPga internet orqali ulanib bo'lmaydi. Load balancer private IPlar orqali veb-serverlar bilan bog'lanadi.
Yuqoridagi rasmda load balancer va ikkinchi veb-server qo'shilgandan so'ng, barcha uzilishlar muammosini muvaffaqiyatli hal qildik. Yaxshiroq tushunish uchun quyida tushuntirib o'tamiz:
Agar 1-server oflayn rejimga o'tsa, barcha so'rovlar 2-serverga yo'naltiriladi. Bu serverning oflayn rejimga o'tishini ya'ni tizimga kirish cheklanishini oldini oladi. Shuningdek yukni muvozanatlash uchun yangi server qo'shib so'rovlar yukini taqsimlash imkonini beradi.
Agar veb-saytga so'rovlar tez o'sayotgan bo'lsa va so'rovlarni boshqarish uchun ikkita server yetarli bo'lmasa, load balancer bu muammoni to'g'ri hal qilishga yordam beradi. Ya'ni yuqorida aytib o'tilganidek siz faqat serverlar qo'shishingiz kerak va load balancer avtomatik ravishda ularga so'rovlarni taqsimlab yuborishni boshlaydi.