💻 Dasturlashga va muallifning hayotiga oid shaxsiy blog
Ijtimoiy tarmoqlarim:
https://taplink.cc/mabrur
@tweetlarim
Post #1503
2.51K
- 🔥 8
- 👨💻 2
- 👍 1
MA @mabrur_dev
Showing posts older than #1504 · Back to latest
Mabrur | Dasturlash va AI 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…

Mabrur | Dasturlash va AI 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.…
Mabrur | Dasturlash va AI 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…
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.
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?"
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.
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.
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.


Mabrur | Dasturlash va AI Uyda ishlashdan ko’ra ofisda ishlash ko’proq yoqadi, nimaga deb o’ylaysiz?
Mabrur | Dasturlash va AI 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…

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.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. balancer yoki auto-scaling tog'ri sozlanmagan bo'lsa, serverlarni qulatib qo'yishi mumkinData 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.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.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.


