Backend dasturchi sifatida resurslarni boshqarish va CPU yuklanishini kuzatib borish muhim hisoblanadi. Menimcha, ko‘pchilik o‘z dasturida CPU 100% ga chiqib ketish holatini kuzatgan.
Quyida dasturchilar orasida CPU yuklamasini oshirib yuborishda eng keng tarqalgan xatoliklarni yozib chiqdim:
- Infinite Loops
Ko'pchilik qilib ko'rgan xato bo'lsa kerak.
- Background Processes yoki Daemons
Siz yozgan kod ichidagi
- High Traffic Volume yoki Load Spikes
Bu ham backendchilarni og'riqli nuqtalaridan biri. Kutilmagan trafik oqimi, requestlar sonini keskin ko'payib ketishiga olib keladi. Agar load
- Resource-Intensive Applications
- Insufficient Memory (RAM) yoki Thrashing
RAM yetishmaganda OS swapping yoki paging ga o'tadi - ya'ni, ma'lumotlarni RAM va disk o'rtasida almashtirishni boshladi. Bu tufayli I/O operatsiyalari protsessorga haddan tashqari ko'p yuklama beradi va tizim thrashing holatiga tushib qoladi.
- Concurrent Processes yoki Thread Contention
Ko'p threadli (
- Busy Waiting / Spinlock
Bu codingdagi anti-patternlardan biri. Thread biror resurs bo'shashini
- RegEx Matching & Catastrophic Backtracking
Yomon yozilgan RegEx pattern'lari (inefficient regex patterns) va greedy quantifiers (*, +) tufayli engine juda ko'p backtracking operatsiyalarini bajarishi mumkin. Bu eksponensial vaqt talab qiladi, shu sababdan CPU ishlashi ortib ketishi mumkin.
- Viruses & Malware (Cryptojacking)
Eng xavflisi. Sizning serveringiz yoki kompyuteringiz resurslaridan ruxsatsiz foydalanib, orqa fonda cryptojacking (mayning) skriptlarini ishga tushirishi mumkin. Bunaqa viruslar ko'p holatlarda npm/pip packagelarini ichida bo'ladi.
Ko'p terminlarni ataylab o'z tilida yozib kettim, mustaqil search qilib o'rganishga oson bo'ladi.
@mabrur_dev
Quyida dasturchilar orasida CPU yuklamasini oshirib yuborishda eng keng tarqalgan xatoliklarni yozib chiqdim:
- Infinite Loops
Ko'pchilik qilib ko'rgan xato bo'lsa kerak.
while(true)
yoki for
loopni ichida qandaydir mantiqiy xato bo'lsa (faulty loop condition deyiladi) kod bloki hech qachon to'xtamaydi. Natijada bitta thread protsessorni to'liq egallab oladi.- Background Processes yoki Daemons
Siz yozgan kod ichidagi
cron job
lar yoki message queue worker
lar va shunga o'xshash fonda ishlaydigan servislar notog'ri implementatsiya qilingan bo'lsa ko'p hollarda resurslarni ko'p istem qilib yuboradi. - High Traffic Volume yoki Load Spikes
Bu ham backendchilarni og'riqli nuqtalaridan biri. Kutilmagan trafik oqimi, requestlar sonini keskin ko'payib ketishiga olib keladi. Agar load
balancer
yoki auto-scaling
tog'ri sozlanmagan bo'lsa, serverlarni qulatib qo'yishi mumkin- Resource-Intensive Applications
Data Science
(katta dataset lar tahlil), ML
(model training), video encoding/decoding
yoki qanaqadir murakkab simulations lar ishlashiyam yaxshigina CPU resurslarini talab qiladi. Bu yerda ko'pincha algoritmik optimizatsiya ham muhim rol o'ynaydi.- Insufficient Memory (RAM) yoki Thrashing
RAM yetishmaganda OS swapping yoki paging ga o'tadi - ya'ni, ma'lumotlarni RAM va disk o'rtasida almashtirishni boshladi. Bu tufayli I/O operatsiyalari protsessorga haddan tashqari ko'p yuklama beradi va tizim thrashing holatiga tushib qoladi.
- Concurrent Processes yoki Thread Contention
Ko'p threadli (
multithreaded
) ilovalarda thread'lar bir xil resurs (shared resource
) uchun kurashganda race condition yoki deadlock'lar yuzaga kelishi mumkin. Resursni kutish yoki doimiy context switching CPU yuklamasini oshiradi.- Busy Waiting / Spinlock
Bu codingdagi anti-patternlardan biri. Thread biror resurs bo'shashini
sleep()
yoki wait()
qilish o'rniga, loop ichida doimiy tekshirib turadi (while (!resource_is_ready) {}
). Bu protsessor vaqtini behuda sarflaydi. Yaxshi alternativa: semaphores, mutexes, event listeners.
- RegEx Matching & Catastrophic Backtracking
Yomon yozilgan RegEx pattern'lari (inefficient regex patterns) va greedy quantifiers (*, +) tufayli engine juda ko'p backtracking operatsiyalarini bajarishi mumkin. Bu eksponensial vaqt talab qiladi, shu sababdan CPU ishlashi ortib ketishi mumkin.
- Viruses & Malware (Cryptojacking)
Eng xavflisi. Sizning serveringiz yoki kompyuteringiz resurslaridan ruxsatsiz foydalanib, orqa fonda cryptojacking (mayning) skriptlarini ishga tushirishi mumkin. Bunaqa viruslar ko'p holatlarda npm/pip packagelarini ichida bo'ladi.
Ko'p terminlarni ataylab o'z tilida yozib kettim, mustaqil search qilib o'rganishga oson bo'ladi.
@mabrur_dev
1👍14🔥4❤1
Agar siz Junior Backend dasturchi bo'lsangiz eng kamida mana shu AWS yoki boshqa alternativ Cloud servislarini bilishingiz shart
Menimcha shu top-6 servislar deyarli hamma joyda so'raladiganlari: IAM, EC2, Lambda, S3, RDS, VPC
Ro'yxatga yana nimalarni qo'shgan bo'lardingiz?
@mabrur_dev
Menimcha shu top-6 servislar deyarli hamma joyda so'raladiganlari: IAM, EC2, Lambda, S3, RDS, VPC
Ro'yxatga yana nimalarni qo'shgan bo'lardingiz?
@mabrur_dev
👍2
Mabrur - IT Blog 🇵🇸
Agar siz Junior Backend dasturchi bo'lsangiz eng kamida mana shu AWS yoki boshqa alternativ Cloud servislarini bilishingiz shart Menimcha shu top-6 servislar deyarli hamma joyda so'raladiganlari: IAM, EC2, Lambda, S3, RDS, VPC Ro'yxatga yana nimalarni qo'shgan…
Bir so’m puliz bormi, ikki so’m puliz bormi educative dan subscription sotib olib o’rganishni maslahat beraman. Kurslari odatiy videodarslardan farqli, ko’proq mustaqil bo’lishni talab qiladi, ikki martalik obed puliga bir dunyo bilimga access ochiladi
👍1
Tasavvur qiling to'lov tizimi uchun system design qilyapsiz.
To'lovlarni amalga oshirishdagi eng jiddiy muammolardan biri - mijozdan ikki marta pul yechib olmaslik.
Bu narsani oldini olish uchun nima yechim qilgan bo'lardingiz?
Xatomi, yo’qmi javob beravering. Xato bo’lsa o’rganasiz, to’g’ri bo’lsa o’rgatasiz.
To'lovlarni amalga oshirishdagi eng jiddiy muammolardan biri - mijozdan ikki marta pul yechib olmaslik.
Bu narsani oldini olish uchun nima yechim qilgan bo'lardingiz?
Xatomi, yo’qmi javob beravering. Xato bo’lsa o’rganasiz, to’g’ri bo’lsa o’rgatasiz.
Uyda ishlashdan ko’ra ofisda ishlash ko’proq yoqadi, nimaga deb o’ylaysiz?
2👍18
Mabrur - IT Blog 🇵🇸
Uyda ishlashdan ko’ra ofisda ishlash ko’proq yoqadi, nimaga deb o’ylaysiz?
Tepada kimdir boshda yong’oq chaqqandek qilib perforatorini aylantirib o’tirmaydi.
Tinch atmosfera, hamma ishlab o’tirgani ishlashga fokus jamlashga yordam beradi.
Eng muhimi 10 da kelib 6 da ketolasiz va uyga borib ish haqida butunlay unutasiz.
Remote ishlashni eng katta minuslari, huddi siz 24 soat ishlayotgandek tuyulasiz. Ertalab turibam kompyuterni ochib kod yozasiz, kechasi taskimni tugatishim kerak deb bezovta bo’libam kod yozasiz. Hullas, yaxshi manage qilib olmagan bo’sangiz, remote ishlash qiyinlashib ketadi.
Bu hozirgi vaqtdagi, hozirgi vaziyatdan kelib chiqqan fikrlarim, ba’zida remote ishlardayam shunaqa chill paytlar keladi, taskni yopib qo’yib bemalol yuraverasiz.
Tinch atmosfera, hamma ishlab o’tirgani ishlashga fokus jamlashga yordam beradi.
Eng muhimi 10 da kelib 6 da ketolasiz va uyga borib ish haqida butunlay unutasiz.
Remote ishlashni eng katta minuslari, huddi siz 24 soat ishlayotgandek tuyulasiz. Ertalab turibam kompyuterni ochib kod yozasiz, kechasi taskimni tugatishim kerak deb bezovta bo’libam kod yozasiz. Hullas, yaxshi manage qilib olmagan bo’sangiz, remote ishlash qiyinlashib ketadi.
Bu hozirgi vaqtdagi, hozirgi vaziyatdan kelib chiqqan fikrlarim, ba’zida remote ishlardayam shunaqa chill paytlar keladi, taskni yopib qo’yib bemalol yuraverasiz.
1👍17❤1
Katta Loyihalar Siri: Database Middleware
Hech o'ylab ko'rganmisiz, dasturingizga millionlab foydalanuvchilar oqib kirdi, DBingizga so'rovlar soni keskin ko'tarilib ketdi. Natijada dasturingiz sekin ishlayapti. CPU, RAM va diskingizdagi IO juda ko'tarilib ketgan. Bazangiz qulab tushdi, endi butun servisingiz to'xtab qoldi.
Nega Amazon, Netflixlar o'tirib qolmayapti, ularning ham million foydalanuvchisi borku, deyapsiz.
Gap shundaki, ularning barcha so'rovlari bitta joyga yuborilmaydi va bitta baza hamma ishni bajarmaydi. Ular odatda bazaga yuklamani (load) taqsimlashadi.
Asosiy Muammo: Write vs. Read
Baza bilan ishlashda ikki turdagi operatsiya bor:
Write: Yangi ma'lumot qo'shish, mavjud ma'lumotni o'zgartirish yoki o'chirish. Masalan, buyurtma berish, profilni yangilash, nimadirni o'zgartirish. Bu operatsiyalar bazaning ishlashiga kuchliroq ta'sir qiladi.
Read: Ma'lumotlarni shunchaki ko'rish. Masalan, mahsulot ro'yxatini yoki buyurtmalar tarixini ko'rish. Odatda, dasturlarda "Read" so'rovlari "Write" so'rovlaridan ancha ko'p bo'ladi.
Bitta bazaga ham "write", ham "read" so'rovlari kelaversa, baza ikkita vazifani birdan bajarishga qiynaladi va sekinlashadi. Bu xuddi soat 19:00 da Havasga kirsangiz, kassada bitta kassir ham mahsulotlarni skanerdan o'tkazishi, ham borib tovarlarni sortirovka qip kelishi, ham narxlar haqidagi savollarga javob berib o'tirishga ulgurmay qolganiga o'xshaydi.
Yechim: Read Replica Pattern
Bunday muammoni hal qilish uchun odatda Read Replica modelidan foydalaniladi.
Primary DB: Asosiy baza faqatgina "write" operatsiyalari uchun ajratiladi. U "write" ishlari bilan band bo'ladi.
Secondary DB (Replica): Asosiy bazani nusxalarini saqlaydi. Ular faqat "read" operatsiyalari uchun xizmat qiladi.
Replikatsiya (Replication): Primary DBga yozilgan har qanday yangi ma'lumot avtomatik ravishda barcha Secondary DB'larga nusxalanadi.
Bu model loadni taqsimlanishiga moslangan. Write so'rovlari asosiy bazaga, minglab-millionlab bo'lgan Read so'rovlari endi nusxalangan bazalarga borishni boshlaydi.
Kodda, mijoz buyurtma bersa Primary DBga yoz, buyurtma tarixini yoki narxni ko'rmoqchi bo'lsa Secondary DBga to'g'irla deb chiqish juda noqulay va kodni murakkablashtiradi. Aynan shu yerda Database Middleware ishlatiladi.
U huddi agentga o'xshab, dasturingiz va bazalaringiz o'rtasida turadi. Dasturingiz endi faqat Middlewarega murojaat qiladi, u esa so'rov turini tahlil qilib avtomatik tarzda to'g'ri bazaga yo'naltiradi.
Misol uchun, buyurtma berish bu write so'rovi, middleware uni Primary DB ga yo'naltiradi. Buyurtma tarixini ko'rish bu read so'rovi. Middleware uni so'rovlari kam bo'lgan Secondary DBlardan biriga yo'naltiradi. Bu usul dastur kodini soddalashtirib, databaseni boshqarishni soddalashtiradi.
Lekin buni kamchiliklariyam bor:
Database Middlewarening o'zi ham alohida, murakkab tizim. Uni sozlash (configuration) va doimiy monitoring qilish kerak. Noto'g'ri sozlansa, butun tizim ishdan chiqishi mumkin.
Barcha baza so'rovlari middleware orqali o'tganligi sababli, agar u qulasa, barcha DB'ga ulanish to'xtaydi. Shuning uchun, uni high availabilitysini qilishga klaster qilib o'rnatilishi shart. Bu esa o'z-o'zidan qo'shimcha resurs va xarajat degani.
@mabrur_dev
Hech o'ylab ko'rganmisiz, dasturingizga millionlab foydalanuvchilar oqib kirdi, DBingizga so'rovlar soni keskin ko'tarilib ketdi. Natijada dasturingiz sekin ishlayapti. CPU, RAM va diskingizdagi IO juda ko'tarilib ketgan. Bazangiz qulab tushdi, endi butun servisingiz to'xtab qoldi.
Nega Amazon, Netflixlar o'tirib qolmayapti, ularning ham million foydalanuvchisi borku, deyapsiz.
Gap shundaki, ularning barcha so'rovlari bitta joyga yuborilmaydi va bitta baza hamma ishni bajarmaydi. Ular odatda bazaga yuklamani (load) taqsimlashadi.
Asosiy Muammo: Write vs. Read
Baza bilan ishlashda ikki turdagi operatsiya bor:
Write: Yangi ma'lumot qo'shish, mavjud ma'lumotni o'zgartirish yoki o'chirish. Masalan, buyurtma berish, profilni yangilash, nimadirni o'zgartirish. Bu operatsiyalar bazaning ishlashiga kuchliroq ta'sir qiladi.
Read: Ma'lumotlarni shunchaki ko'rish. Masalan, mahsulot ro'yxatini yoki buyurtmalar tarixini ko'rish. Odatda, dasturlarda "Read" so'rovlari "Write" so'rovlaridan ancha ko'p bo'ladi.
Bitta bazaga ham "write", ham "read" so'rovlari kelaversa, baza ikkita vazifani birdan bajarishga qiynaladi va sekinlashadi. Bu xuddi soat 19:00 da Havasga kirsangiz, kassada bitta kassir ham mahsulotlarni skanerdan o'tkazishi, ham borib tovarlarni sortirovka qip kelishi, ham narxlar haqidagi savollarga javob berib o'tirishga ulgurmay qolganiga o'xshaydi.
Yechim: Read Replica Pattern
Bunday muammoni hal qilish uchun odatda Read Replica modelidan foydalaniladi.
Primary DB: Asosiy baza faqatgina "write" operatsiyalari uchun ajratiladi. U "write" ishlari bilan band bo'ladi.
Secondary DB (Replica): Asosiy bazani nusxalarini saqlaydi. Ular faqat "read" operatsiyalari uchun xizmat qiladi.
Replikatsiya (Replication): Primary DBga yozilgan har qanday yangi ma'lumot avtomatik ravishda barcha Secondary DB'larga nusxalanadi.
Bu model loadni taqsimlanishiga moslangan. Write so'rovlari asosiy bazaga, minglab-millionlab bo'lgan Read so'rovlari endi nusxalangan bazalarga borishni boshlaydi.
Kodda, mijoz buyurtma bersa Primary DBga yoz, buyurtma tarixini yoki narxni ko'rmoqchi bo'lsa Secondary DBga to'g'irla deb chiqish juda noqulay va kodni murakkablashtiradi. Aynan shu yerda Database Middleware ishlatiladi.
U huddi agentga o'xshab, dasturingiz va bazalaringiz o'rtasida turadi. Dasturingiz endi faqat Middlewarega murojaat qiladi, u esa so'rov turini tahlil qilib avtomatik tarzda to'g'ri bazaga yo'naltiradi.
Misol uchun, buyurtma berish bu write so'rovi, middleware uni Primary DB ga yo'naltiradi. Buyurtma tarixini ko'rish bu read so'rovi. Middleware uni so'rovlari kam bo'lgan Secondary DBlardan biriga yo'naltiradi. Bu usul dastur kodini soddalashtirib, databaseni boshqarishni soddalashtiradi.
Lekin buni kamchiliklariyam bor:
Database Middlewarening o'zi ham alohida, murakkab tizim. Uni sozlash (configuration) va doimiy monitoring qilish kerak. Noto'g'ri sozlansa, butun tizim ishdan chiqishi mumkin.
Barcha baza so'rovlari middleware orqali o'tganligi sababli, agar u qulasa, barcha DB'ga ulanish to'xtaydi. Shuning uchun, uni high availabilitysini qilishga klaster qilib o'rnatilishi shart. Bu esa o'z-o'zidan qo'shimcha resurs va xarajat degani.
@mabrur_dev
10👍30🔥6❤2
Telegram: Haqiqatan Ham Eng Xavfsiz Messengermi?
Ko‘pchiligimiz Telegramni dunyodagi eng xavfsiz messenjerlardan biri deb bilamiz. Lekin uning xavfsizlik mexanizmlariga biroz chuqurroq nazar tashlasak, bu savolning javobi unchalik ham oddiy emasligini ko‘ramiz.
Keling, avval “xavfsiz suhbat” deganda nima nazarda tutilishini aniqlashtirib olaylik. Dasturlash nuqtai nazaridan, bu "E2EE" (end-to-end encryption) tushunchasini anglatadi.
Bu jarayon qanday ishlaydi?
1. Siz xabarni yozasiz.
2. Xabar sizning telefoningizda shifrlanadi.
3. Bu shifrlangan xabar server orqali yuboriladi.
4. Faqatgina qabul qiluvchining telefoni uni shifrdan chiqarib, o‘qiy oladi.
E2EE usuldagi shaxsiy chatlarda gaplashsangiz, hech kim, hatto Durovni akasiyam serverlariga kirib xabarlaringizni o‘qiy olmaydi.
Lekin oddiy Telegram chatlari bunday ishlamaydi. Siz jo‘natgan xabar avvalo Telegram serverlariga boradi. U yerda xabar shifrlangan bo‘lsa-da, bu shifrlash (Client-Server Encryption) faqat sizning telefoningizdan servergacha amal qiladi. Serverda esa xabar qayta ishlanadi:
- Xabar bir necha qismga bo‘linadi (chunking).
- Bu qismlar va ularni ochish uchun kalitlar (decryption keys) turli davlatlardagi serverlarda saqlanadi.
- Qabul qiluvchiga yetib borgunicha, bu qismlar serverda qayta birlashtiriladi va keyingi telefonga jo‘natiladi (Server-Client Encryption).
Telegram bu usulni juda xavfsiz deb hisoblaydi, chunki xakker sizning xabaringizni o‘qish uchun turli mamlakatlardagi serverlardan ham xabar qismlarini, ham kalitlarni topib olishi kerak. Bu deyarli imkonsiz, ammo nazariy jihatdan imkoniyat mavjud. Bu sizning xabarlaringizni serverlarda o‘qib bo‘lmaydi degani emas - Telegramning o‘zida bu ma’lumotlarga kirish imkoniyati bor.
Haqiqiy Xavfsizlik - Mahfiy Chatlarda
Agar siz hech kim xabarlarimni o'qiy olmasin desangiz, Telegramning "maxfiy chat" funksiyasidan foydalanishingiz kerak.
Maxfiy chat nima qiladi?
Bu chatdagi barcha xabarlar sizning telefoningizda shifrlanadi (E2EE) va faqat qabul qiluvchi telefonida shifrdan chiqariladi. Shifrlash kalitlari serverda saqlanmaydi.
Bu funksiya faqat mobil ilovalar uchun mavjud, kompyuter (desktop) ilovalarida ishlamaydi. Shuningdek, maxfiy chatlarni guruhlar yoki kanallar uchun ishlatib bo‘lmaydi, shu sababdan guruhni nazorat qiladigan bot yasab qo'yib, oxirgi eventlarini olib ko'rsangiz "Rodnoylar AUEEEE" degan gruppadagi xabarlarni bemalol o'qib o'tirsangiz bo'ladi.
Oddiy kundalik muloqot uchun Telegramning odatiy chatlari yetarlicha xavfsiz. Juda maxfiy, shaxsiy yoki muhim ma’lumotlar almashmoqchi bo‘lsangiz, albatta "Maxfiy chat"dan foydalanganingiz ma’qul.
@mabrur_dev
Ko‘pchiligimiz Telegramni dunyodagi eng xavfsiz messenjerlardan biri deb bilamiz. Lekin uning xavfsizlik mexanizmlariga biroz chuqurroq nazar tashlasak, bu savolning javobi unchalik ham oddiy emasligini ko‘ramiz.
Keling, avval “xavfsiz suhbat” deganda nima nazarda tutilishini aniqlashtirib olaylik. Dasturlash nuqtai nazaridan, bu "E2EE" (end-to-end encryption) tushunchasini anglatadi.
Bu jarayon qanday ishlaydi?
1. Siz xabarni yozasiz.
2. Xabar sizning telefoningizda shifrlanadi.
3. Bu shifrlangan xabar server orqali yuboriladi.
4. Faqatgina qabul qiluvchining telefoni uni shifrdan chiqarib, o‘qiy oladi.
E2EE usuldagi shaxsiy chatlarda gaplashsangiz, hech kim, hatto Durovni akasiyam serverlariga kirib xabarlaringizni o‘qiy olmaydi.
Lekin oddiy Telegram chatlari bunday ishlamaydi. Siz jo‘natgan xabar avvalo Telegram serverlariga boradi. U yerda xabar shifrlangan bo‘lsa-da, bu shifrlash (Client-Server Encryption) faqat sizning telefoningizdan servergacha amal qiladi. Serverda esa xabar qayta ishlanadi:
- Xabar bir necha qismga bo‘linadi (chunking).
- Bu qismlar va ularni ochish uchun kalitlar (decryption keys) turli davlatlardagi serverlarda saqlanadi.
- Qabul qiluvchiga yetib borgunicha, bu qismlar serverda qayta birlashtiriladi va keyingi telefonga jo‘natiladi (Server-Client Encryption).
Telegram bu usulni juda xavfsiz deb hisoblaydi, chunki xakker sizning xabaringizni o‘qish uchun turli mamlakatlardagi serverlardan ham xabar qismlarini, ham kalitlarni topib olishi kerak. Bu deyarli imkonsiz, ammo nazariy jihatdan imkoniyat mavjud. Bu sizning xabarlaringizni serverlarda o‘qib bo‘lmaydi degani emas - Telegramning o‘zida bu ma’lumotlarga kirish imkoniyati bor.
Haqiqiy Xavfsizlik - Mahfiy Chatlarda
Agar siz hech kim xabarlarimni o'qiy olmasin desangiz, Telegramning "maxfiy chat" funksiyasidan foydalanishingiz kerak.
Maxfiy chat nima qiladi?
Bu chatdagi barcha xabarlar sizning telefoningizda shifrlanadi (E2EE) va faqat qabul qiluvchi telefonida shifrdan chiqariladi. Shifrlash kalitlari serverda saqlanmaydi.
Bu funksiya faqat mobil ilovalar uchun mavjud, kompyuter (desktop) ilovalarida ishlamaydi. Shuningdek, maxfiy chatlarni guruhlar yoki kanallar uchun ishlatib bo‘lmaydi, shu sababdan guruhni nazorat qiladigan bot yasab qo'yib, oxirgi eventlarini olib ko'rsangiz "Rodnoylar AUEEEE" degan gruppadagi xabarlarni bemalol o'qib o'tirsangiz bo'ladi.
Oddiy kundalik muloqot uchun Telegramning odatiy chatlari yetarlicha xavfsiz. Juda maxfiy, shaxsiy yoki muhim ma’lumotlar almashmoqchi bo‘lsangiz, albatta "Maxfiy chat"dan foydalanganingiz ma’qul.
@mabrur_dev
1🔥16❤6👍3
Cursor sizlardayam narx hisoblamay qo'ydimi? Nimagadir, 1 haftadan beri bir tiyin ishlatganim yo'q, g'alati tuyulyapti )
😁18👍1
Mikroservislardan monolitlarga qaytish tendensiyasi haqida ko'p o'qib qolayabman. Men ham tajribamdan kelib chiqib, shu mavzu bo'yicha ikki og'iz gaplarimni aytmoqchiman.
Nega ko'pchilik mikroservislardan voz kechib, monolitlarga qaytishni boshladi, nega bu hype avvalgidek emas?
1. Murakkablik Yo'qolmaydi, Faqat "Ko'chib O'tadi"
2. "Yashirin Xarajat"
Davomi pastda...
Nega ko'pchilik mikroservislardan voz kechib, monolitlarga qaytishni boshladi, nega bu hype avvalgidek emas?
1. Murakkablik Yo'qolmaydi, Faqat "Ko'chib O'tadi"
Mikroservislardagi ko'pchilik ishonadigan narsa - murakkablikni kamaytirish. Lekin bu shunchaki illyuziya. Dasturlashda "Conservation of Complexity" (Murakkablikning saqlanish qonuni) degan yozilmagan tushuncha bor. Ya'ni, siz murakkablikni yo'q qilmaysiz, shunchaki uni bir joydan ikkinchi joyga ko'chirasiz.
- Monolitdagi murakkablik: Kod ichida yashaydi. Modullar, klasslar va funksiyalar orasidagi bog'liqliklarda namoyon bo'ladi. Buni yengish uchun SOLID, DRY kabi dizayn prinsiplarini yaxshi bilish va ular bilan ishlash kerak bo'ladi. Kod ishlashi bitta asosan bitta joyda va tushunishga oson.
- Mikroservislardagi murakkablik: Endi bu murakkablik tarmoqqa ko'chadi. Siz nafaqat kod haqida, balki tarmoqning ishonchsizligi, ma'lumotlar bazasidagi taqsimlangan tranzaksiyalar (distributed transactions), service discovery, versiyalash va API shartnomalari kabi butun bir "distributed systems" muammolari haqida bosh qotirishingiz kerak.
2. "Yashirin Xarajat"
Dasturchilar mahsulot o'rniga infra bilan band va bu menimcha, mikroservislarning eng katta "yashirin xarajati". Har bir servis uchun alohida CI/CD pipeline, monitoring, logging, alerting va xavfsizlik konfiguratsiyalari kerak. Bu esa mahsulot rivojlanishidan vaqt oladigan ulkan DevOps ishini talab qiladi.
Amazon kabi gigantlarda har bir jamoaning ichida bunga mas'ul SRE (Site Reliability Engineer) mutaxassislari bor. Ammo kichikroq jamoalarda bu yuk ko'pincha dasturchining yelkasiga tushadi.
Natijada oddiy bir funksional uchun bir nechta servisni o'zgartirish, ular orasidagi API contractlar buzilmasligini ta'minlash va bir necha jamoa bilan kelishish kabi bosh og'riqlar paydo bo'ladi. Bu esa yana bir xavfli anti-pattern - "Distributed Monolith" (taqsimlangan monolit) ni keltirib chiqaradi. Servislar alohida deploy qilinsayam, ular bir-biriga shunchalik bog'liqki, bittasini o'zgartiish uchun qoglanlariniyam o'zgaritish kerak bo'ladi.
Davomi pastda...
1👍12🔥2👨💻1
Mabrur - IT Blog 🇵🇸
Mikroservislardan monolitlarga qaytish tendensiyasi haqida ko'p o'qib qolayabman. Men ham tajribamdan kelib chiqib, shu mavzu bo'yicha ikki og'iz gaplarimni aytmoqchiman. Nega ko'pchilik mikroservislardan voz kechib, monolitlarga qaytishni boshladi, nega…
3. Tushunarsiz Bounded Contexts
4. Jamoa Tuzilmasi Arxitekturani Belgilaydi
5. Miya uchun Haddan Tashqari Yuklama (Cognitive Load)
Mikroservislar Google yoki Netflix kabi gigantlarning muammolarini hal qilish uchun paydo bo'ldi. Ammo ko'pchilik hype'ga ergashib, bu yechimni o'zining mutlaqo boshqa muammolariga qo'llay boshladi. Natijada ular "mikroservis muammosi" deb ataladigan yangi va ancha qimmat muammoga duch kelishdi.
Hozirgi sog'lom trend - bu "Monolith First" tamoyiliga amal qilish. Ya'ni, dasturni yaxshi strukturalangan modular monolit bilan boshlab, faqat biznes va texnik zarurat tug'ilganda eng ko'p og'riq keltirayotgan modulni alohida servis sifatida ajratib olish
@mabrur_dev
Mikroservislar qurishdagi eng og'riqli nuqtalardan biri - bu biznes domenini noto'g'ri boundariesga ajratish. O'zim ham bu yo'lda ko'p qoqilganman.
Domain-Driven Design (DDD) konsepsiyasi servislarni biznes qobiliyatlariga qarab ajratish kerakligini aytadi. Bu chegaralar "Bounded Contexts" (Chegaralangan Kontekstlar) deb ataladi. To'g'risini aytganda, bu tushunchani to'liq anglash va amalda to'g'ri qo'llash - arxitekturaning eng qiyin vazifalaridan biri. Agar kontekstlarni noto'g'ri aniqlasangiz, servislar o'rtasida tinimsiz "suhbat" (chatty communication) va o'ta kuchli bog'liqlik paydo bo'ladi.
Amazon Prime Video'ning monolitga qaytishining asosiy sabablaridan biri ham aynan shu: ular video monitoring servisining chegaralarini noto'g'ri aniqlagani sababli tarmoq xarajatlari osmonga chiqib ketgan.
4. Jamoa Tuzilmasi Arxitekturani Belgilaydi
Mikroservislar mustaqil, avtonom jamoalar uchun mo'ljallangan. Agar sizda 50 kishilik bitta katta jamoa bo'lsa-yu, siz ularni 15 ta mikroservis ustida ishlashga majburlasangiz, shaxsiy fikrimcha, kompaniya noto'g'ri yo'lda bo'ladi. Natijada doimiy sinxronizatsiya, cheksiz "call"lar, boshqa jamoa ruxsatini kutib bloklanib qolishlar kuzatiladi. Arxitekturani tanlashdan oldin berilishi kerak bo'lgan savol shu:
"Jamoalarimiz ham shunday "mikro" va mustaqil ishlay oladimi?"
5. Miya uchun Haddan Tashqari Yuklama (Cognitive Load)
Bitta monolitda dasturchi butun dastur mantig'ini bitta IDE ichida kuzatishi va debug qilishi mumkin. 15 ta mikroservisli tizimda esa bitta so'rov (request) qaysi servislardan o'tib, xatolik aynan qayerda yuz berganini tushunish uchun butun tizimning mental modelini miyada ushlab turish kerak. Bu kognitiv yuklamani keskin oshiradi va samaradorlikni tushiradi. Fokusni yo'qotdingizmi, demak, hammasini boshidan boshlashingiz kerak.
Mikroservislar Google yoki Netflix kabi gigantlarning muammolarini hal qilish uchun paydo bo'ldi. Ammo ko'pchilik hype'ga ergashib, bu yechimni o'zining mutlaqo boshqa muammolariga qo'llay boshladi. Natijada ular "mikroservis muammosi" deb ataladigan yangi va ancha qimmat muammoga duch kelishdi.
Hozirgi sog'lom trend - bu "Monolith First" tamoyiliga amal qilish. Ya'ni, dasturni yaxshi strukturalangan modular monolit bilan boshlab, faqat biznes va texnik zarurat tug'ilganda eng ko'p og'riq keltirayotgan modulni alohida servis sifatida ajratib olish
@mabrur_dev
2👍22🔥2👨💻2
Mabrur - IT Blog 🇵🇸
Tasavvur qiling to'lov tizimi uchun system design qilyapsiz. To'lovlarni amalga oshirishdagi eng jiddiy muammolardan biri - mijozdan ikki marta pul yechib olmaslik. Bu narsani oldini olish uchun nima yechim qilgan bo'lardingiz? Xatomi, yo’qmi javob beravering.…
Yana miyani ishlatamiz )
Tasavvur qiling, Payme yoki Click ishlatyapsiz. Ikkalasidayam QR Code orqali to'lov qilish imkoniyati bor. Istalgan to'lov tizimida necha hil QR Code bilan to'lash kombinatsiyalari bor deb o'ylaysiz?
Har bir turdagi QR Code qanday ishlaydi, ular statikmi yoki dinamik o'zgaradimi?
Tasavvur qiling, Payme yoki Click ishlatyapsiz. Ikkalasidayam QR Code orqali to'lov qilish imkoniyati bor. Istalgan to'lov tizimida necha hil QR Code bilan to'lash kombinatsiyalari bor deb o'ylaysiz?
Har bir turdagi QR Code qanday ishlaydi, ular statikmi yoki dinamik o'zgaradimi?
2👍11
Mabrur - IT Blog 🇵🇸
Yana miyani ishlatamiz ) Tasavvur qiling, Payme yoki Click ishlatyapsiz. Ikkalasidayam QR Code orqali to'lov qilish imkoniyati bor. Istalgan to'lov tizimida necha hil QR Code bilan to'lash kombinatsiyalari bor deb o'ylaysiz? Har bir turdagi QR Code qanday…
QR Code orqali to'lovlar asosan 2 xil bo'ladi, static va dinamik. Lekin ulardan yana 2 xil kombinatsiya yasasa bo'ladi: Consumer Presented, Merchant Presented
❤13👍11🔥5
Texnik intervyularda beriladigan savollardan biri - API va SDK ning farqlari nimada?
Bu savolga qanday javob bergan bo'lardingiz?
Bu savolga qanday javob bergan bo'lardingiz?
👍7
Kanal rivoji uchun kichik so’rovnoma.
Dasturlash kurslarini bitirib, yoki umuman ish qidirib yurganlar bormi?
Dasturlash kurslarini bitirib, yoki umuman ish qidirib yurganlar bormi?
Anonymous Poll
48%
Bor
39%
Ishlayman
13%
Endi o’rganyabman
🔥7👨💻2👍1