System design tushunchalari real hayotiy misollarda
Assalamu Alaykum bugun dasturlar qanday rivojlanadi qaysi rivojlanish jarayonida nimalarga etibor beriladi shu mavzuda fikr yuritamiz va buni real hayotdagi misollar bilan ko'rib o'rganamiz.
Spoiler: Bu maqolada juda kop jimjimador so'zlar bo'lishi kutilmoqda ;).
Xo'sh birinchi bo'lib dasturimizni qaysidir real hayotdagi narsani tanlab olishimiz zarur .Bu uchun men do'konni tanladim hammaga oson va tushunarli bo'lishi uchun .

Lets’ go…
Qani boshladik unda do'koni ochgandan so'ng unda 1 ta sotuvchi bilan boshlanadi uni bir muddat ishlatamiz va bu orada bizda xaridorlar ko'payadi va bizga 1 ta sotuvchi yetmay qoladi bu holatda biznes egasi sifatida sotuvchidan ko'proq ishlashini va ko'proq to'lashimizni talab qilamiz.Bu jarayonlarni osonlashtirish natijasida xizmat ko'rsatishni ko'paytirish deyiladi bu holat vertical scalingga to'g'ri keladi .Bundan tashqari oldindan mahsulotlarni tayyorlab qo'yish mumkin masalan 1 kgdan qilib mahsulotlarni qadoqlab qo'yish (bu cron job ga to'gri keladi ya’ni bizga yuklama kam bo'lganda o'zimizga kerakli bo'lgan narsalarni yangilab olish). Biznesda hammasi yaxshi mabodo sotuvchi kelmay qolsachi? Bu holda biznes ishdan to'xtaydi va bu mumkin emas buning uchun alohida bitta ishchi yollaymiz. Bu holatda yagona sotuvchi bizda single point of failure (yani agar shu qism ishdan chiqsa biznes ishdan to'xtaydigan qism) bo'ladi va qo'shimcha yollanma ishchi esa backup hisoblanadi .Bu qismlar dasturni resilience (qiyinchilikdan osonlikcha chiqib ketish ).qiladi yani sotuvchi kasal bo'lgan holda ham qo'shimcha sotuvchi evaziga biznesda uzilish bo'lmaydi.
Horizontal scaling
Do'konda xaridor oqimi haddan tashqari ko'payganda biznesga yana qo'shimcha ishchilar (sotuvchilar) kerak bo'ladi .Yana 3 ta 4 ta ishchi yolladik .Bu holat ko'proq resurs evaziga ko'proq natijaga erishish bo'ladi va horizontal scaling deyiladi .
Microservislar
Biznesimiz yaxshi yurayotgani tufayli do'konni kengaytiramiz va qismlarga bo'lamiz ya’ni elektronika, oziq-ovqat , kiyim-kechak va ularga alohida ishchilar biriktiramiz , ular o'z qismlaridan savdo qilayotgan xaridorlarga xizmat ko'rsatishadi. Bu holat microservicelarga bo'lishga misol bo'ladi .Bu bizga har kimning masulyatini aniq qo'yib berishga hamda ular har xil scaling qilishga yordam beradi.Va o'rtaga bitta sotuvchi qo'yib hamma mahsulotlarni xaridorga yetkazib berish uchun qo'yishimiz mumkin va bu dasturda api gateway bu vazifani bajaradi .
Latency
Endi biz shahardagi katta do'konlardanmiz va xaridorlarimiz ko'p ammo ular uzoq yo'l bosib bizni do'konga kelishadi.Biz xaridorlarga yaxshi xizmat ko'rsatish uchun tuman markazlarida ham do'konlar ochamiz.Bu ular tezda o'z xoxishlariga ega bo'lishga yordam beradi.Bu dasturlashda mahalliy databazalarga to'g'ri keladi hamda latencyni kamaytirishga yordam beradi.
Latency — bu biz yuborgan so'rovga javobni qaytib kelishigacha ketgan vaqt bo'lib.Bu kabellar orqali Amerikaga borib kelish 5 ms vaqt ketsa ,Turkiyaga borib kelish esa 0.5 ms vaqtni olishi mumkin va bu shu atrofdagilarga tezroq malumot yetkazishga yordam beradi.
Biz mahsulotimiz kengaygani sari ularni tezroq sotishimiz kerak va yetkazib berish xizmatini yo'lga qo'yamiz .Bu holatda foydalanuvchi bizga faqat buyurtma beradi va u qaysi filialdan kelishi muhim emas.Biz buni yetkazib berish markazi orqali aniqlaymiz. Masalan 1-do'konda mahsulotni yig'ish 15 daqiqa navbat 20 daqiqa yetkazish 30 daqiqa umumiy 65 daqiqani tashkil qiladi 2-do'konda esa yigish 5 daqiqa navbat 5 daqiqa yetkazib berish 45 daqiqani tashkil etadi umumiy 55 daqiqa .Bu holatda biznes talablariga qarab tezroq yetkazib berish maqsadida 2- do'kon tanlanadi.Bu holat load balancer deyiladi.
Hozir bizda do'konimiz fault-tolorent va scalable ya’ni biznes ishlashdan to'xtamaydi hamda oson kengayishi mumkin.
Davom etamiz do'konda yetkazib berishni ishga tushurgandan so'ng ularni qismlarga bo'lishimiz zarur ya’ni sotuvchilik va yetkazib berish va ular bir birini ishiga aralashmaydi.Bu jarayon decoupling deyiladi .
Logging
Sotuvchilar pulni o'ziga olib qolmasligi yoki haydovchilar mashinada ko'p yoqilg'i sarflamasligi uchun ularni nazorat qilib har bir buyurtma sotuvni yozib borishimiz zarur.Bu logging jarayoni hisoblanadi .Va bu orqali biz o'zimiz uchun statistikalar va qaysidir mashinada xatolik bormi shularni osongina qachon bo'lganligini bilishimiz va tezda bartaraf etishimiz mumkin.
Xo'sh bizni do'kon yoki dastur yangi funksiyalarga tayyormi ?
Biz allaqachon uni qismlarga bo'ldik va bu jarayonda yetkazib berish nima yetkazib berayotganini bilishi kerak emas u oziq ovqat bo'lishi mumkin yoki boshqa narsa .Bu bizga uni ertaga osonlikcha boshqa narsaga masalan kitob yetkazib berishga ham o'tkazib yuborishimiz mumkin va bu extencibility deyiladi . Extensibility dasturalshda kodni qayta qayta yozmasdan uni ko'p joyda ishlatishga yordam beradi .
Biz hozir qilgani ishimiz yani muammolarga yechimlar topib ketishimiz bu high level design deyiladi.Va bizda low level design ham bo'lib u do'kon misolida do'kon qanday qurilishi kerak undagi omborxona qayerda bo'lishi kerak dasturlashda esa kodlar bilan bog'lanib ketgan bo'ladi.
Bu system design tushunchalari haqida qisqacha ma’lumot edi .
E’tiboringiz uchun rahmat !!
Agarda shunaqa maqolalarni ya’na o'qimoqchi bo'lsangiz obuna bo'lib qo'ying.