Django darslari (Mukhammad irmatov)


Гео и язык канала: Узбекистан, Узбекский
Категория: Технологии


Kanalda python, django va backendga aloqador mavzularda postlar bo’ladi.
Author: Software Engineer at SageGrader(Australia)
Aloqa uchun: @mukhammad_irmatov
Youtube sahifa:
https://www.youtube.com/channel/UCo-bKPTGuDtjJf9JzjvtgNw/featured

Связанные каналы  |  Похожие каналы

Гео и язык канала
Узбекистан, Узбекский
Категория
Технологии
Статистика
Фильтр публикаций


Yakshanba kuni Piskom tog’ining yonbag’rida joylashgan Ispay qishlog’i va sharsharasiga qilgan sayohatimizdan ba’zi suratlarni sizlar bilan bo’lishmoqchiman.

Dasturchi sifatida eng ko’p vaqtimizni kompyuter qarshisida o’tkazamiz, bu o’z navbatida sog’ligimizga salbiy ta’sir qilishi mumkin. Piyoda sayr qilish, ayniqsa, tog’li hududlarga sayohat qilish ham ruhiy, ham jismoniy holatni yaxshilaydi.

Faqat kod yozish va buglarni to’g’irlash bilan band bo’lgan miyamiz toza havo da tiniqlashadi, charchoqlar chiqib ketadi, ko’z ham kompyuter ekranidan uzoqlashib, ancha dam oladi.

Sayohat qiling, salomat bo’ling 🌲


Connection Pooling Pgbouncer nima?

Assalamu Aleykum azizlar!. Men Mukhammad Irmatov postlaridan kelib chiqib Pgbouncer haqida qisqacha ma'lumot berib o'tmoqchi edim.

Yuqoridagi postda aytib o'tilganidak Postrgesql har bir kiruvchi client request uchun connection yaratadi. Har bir connection uchun serverdan joy ajratiladi. Qarabsizki 100ta request va 100ta connection, bundan kelib chiqadiki resource to'ladi va PostgreSQL resourlar to'lguncha request larga connection ochib klientlarga javob bera oladi. Bu model Client-Server arxitekturasi deb nomlanadi, albatta sekin, effektivniy hisoblanmaydi. Shuning uchun Connection pool bizga yordam beradi. Bunga bitta misol PostgreSQL uchun albatta PgBouncer.

Pgbouncer bu Connection pool ga javob beruvchi, klient va DB o'rtasida turuvchi middleware protses hisoblanadi. Mijoz Pgbouncerga ulanadi va bir vaqtda pgbouncer DBga ulanadi. Pgbouncer o'ziga katta miqdorda connection so'rovlarni qabul qiladi va pooling yordamida bazaga bo'lgan haqiqiy connectionlarni kamaytiradi. Bunda http requestlarimiz tez ishlashni ham boshlaydi. Sababi har bir kiruvchi http request uchun yangi haqiqy connection ochilmaydi va yopilmaydi, CPU va Memorydan joy ajratilmaydi, bundan kelib chiqadiki baza requestlarni avvalgi holatiga qaraganda tezroq handling qiladi.

PgBouncerni 3 turdagi pool_mode mavjud.
Bular:
1. Session - mijoz sessiyani uzgandan so'ng connection poolga qaytarib beriladi.
2. Transaction - har bir tugatilgan transactiondan so'ng connection poolga qaytadi.
3. Statement - har bir sql so'rovdan so'ng connection poolga qaytadi.

Connection poolga qaytadi va boshqa kirib keluvchi requestlarga javob berishi mumkun bo'ladi. Ko'pgina hollarda Tranction pool_mode ishlatilish tavsiya beriladi.


Bu odam nima xohlayotganini asl maqsadi nima ekanligini kimdir tushuntirib bera oladimi?

Yuborgan bot linkini hali start qilmadim, qilaveraymi 😅

P.S. Chat egasini ismi ko’rinmasin deb uchirib qo’ydim


Pyramid code example

Pyramid freymvorkida GET va POST metodlarini ishlatishga misol


Pyramid nomli Python frameworki bor, O’zbekistonda unchalik ham mashhurlikka erisholmagan bo’lsada, aslida ancha qulay va ko’p imkoniyatli freymvork hisoblanadi.

Django battery-included (hammasi ichida) freymvork bo’lsa, Pyramid minimalistik freymvork hisoblanadi. Kerakli komponentlar ehtiyojga qarab tanlanadi. Django shunday freymvorkki siz unga moslashishingiz kerak, Pyramid esa sizga moslashadi.

Misol uchun django da ma’lumotlar bazasi bilan ishlash uchun o’zini tayyor ORM bilan ishlashga majbursiz (istisnolar bor), Pyramidda istasangiz SqlAlchemy, istasangiz Pony ORM yoki boshqasini ishlataverasiz.

Python uchun veb freymvorklar juda ko’p, hammasini tagida bitta maqsad yotadi, u ham bo’lsa dasturchiga qulaylik yaratish. Barcha freymvorklarda requestlarni boshqarish, URL routing, database bilan ishlash(CRUD) kabi asosiy vazifalarni o’z ichiga olgan.

Siz ham xuddi shu vazifalarni o’z ichiga olgan freymvorkni o’zingiz Python yordamida yozishingiz mumkin. Mustaqil freymvork yozmoqchi bo’lsangiz Jakhongir Rakhmonov ni “Pythonda veb framework yozish” kursini tavsiya qilaman.


Bugun olx.uz da tozalash(uborka) kunimi deyman, sayti ertalabdan ishlamayapti. CloudFront ni noto’g’ri sozlab qo’yganga o’xshaydi

P.S. Oxirgi vaqtlar olx da juda ko’p shunga o’xshash muammolar bo’lyapti.
Bu xatolik nimadan bo’lishi mumkin?


Connection pooling nima?

Connection Pooling ma’lumotlar bazasiga ulanishlarni(connections) samarali boshqarish uchun ishlatiladi. Database ga yuborilgan har bir so’rov ma’lumotlar bazasida yangi connection ni ochadi va so’rov ga javob berilgach, connection yana yopiladi. Bu jarayon uzluksiz davom etadi, bu esa jarayonni sekinlashishiga olib keladi.

Connection pool esa ma’lumot bazasi bilan bog’langan va so’rov qabul qilishga tayyor bir nechta connectionlarni saqlab turadi. Ma’lumotlar bazasiga so’rov bo’lganda, yangi connection ochmasdan, tayyor connection orqali so’rovlarga javob beradi. Database ga so’rov yakunlangach, tayyor connection yana eski holatda ishlatishga tayyor holatga qaytadi.

Django 5 da yangi qo’shilgan connection pooling va eski versiyalardagi conn_max_age connection poolingni eng oddiy ko’rinishi hisoblanadi. Production uchun app va database orasida pgbouncer ni sozlash tavsiya qilinadi

2.1k 4 11 23 39

Django 5 versiyasiga vanihoyat connection pool qo’shilibdi.

Django da DB bilan amallar tugagandan keyin, connection darhol yopilar edi. Agar DB ga yangi so’rov yubormoqchi bo’lsa, yana qaytadan connection o’rnatish kerak bo’ladi. Bu esa ko’p bo’lmasada vaqt yo’qotilishiga olib keladi.

Eski versiyalarda connection pool ni conn_max_age orqali qisman amalga oshirsa bo’lar edi, aslida bu connection pool ni ta’minlamaydi, ochilgan connection ni ma’lum bir vaqt yopmay ushlab turadi. Bu usulni yomon tarafi shundaki, agar to’g’ri boshqarilmasa, va vaqtida connectionlar yopilmasa connection pool to’lib qolishiga olib keladi va bu esa DB bottlenack ga sabab bo’ladi.

Yuqoridagi barcha muammolarni django 5 versiyasida connection pool qo’shilgani tufayli ancha yengillashadi


Ancha oldin id.egov.uz saytida telefon raqamim bilan ro’yhatdan o’tgan edim. Hech qanday muammosiz identifikatsiyadan o’tib, kirishga muvaffaq bo’lganman. Shu yaqin kunlarda bu tizimga yana ishim tushib, o’sha vaqtda qo’ygan parolim esdan chiqib ketganligi uchun parolni tiklash sahifasini ochdim va JSHSHIR va ro’yhatdan o’tgan telefon raqamimni kiritdim va quyidagicha xatolik oldim.

Ko'rsatilgan telefon raqami Sizga tegishli bo'lmasligi mumkin. Nomingizga rasmiylashtirilgan boshqa telefon raqamini kiritib ko'ring.


Bu telefon raqam o’zimni nomimda emasdi, hayron qoldirgan jihati bu telefon raqam bilan ro’yhatdan o’tish vaqtida muammo bo’lmagan va ancha vaqt bu tizimni ishlatib yurganman. Birdan bunday o’zgarib qolishi hech qanaqa mantiqqa to’g’ri kelmaydi.

Hay mayli qoidasi shunaqa ekanda deb, pasportimga yangi telefon raqam sotib olib, endi parolni tiklayman deganimda esa boshqa xatolikka duch keldim:

Markaziy bazada ma'lumotlar topilmagan. Kiritilgan maʼlumotlarning toʻgʻriligini tekshiring.


Bu qanaqasi bo’ldi deb, call centerga bog’langanimda telefon raqam olayotganda yangi raqamni pasport seriyasiga emas, pasportdagi JSHSHIR ga bog’latib olishingiz kerak ekan 🤯

Oddiy foydalanuvchi telefon raqam sotib olayotgan vaqtda ID tizimi pasport seriyasiga olingan raqam bilan ro’yhatdan o’tolmasligini qayerdan biladi? Shuni odamlar uchun ovoragarchiliklarsiz, qulay qilib qo’ysa ancha vaqt va asablar tejalgan bo’lar edi.

Bu tizim foydalanuchilarni vaqtini sarflab, qiynalib yurishi uchun emas, qaytganga vaqtini tejash uchun yaratilgan emasmidi?

P.S. Uzinfocomda ishlaydigan dasturchilar, parolimni tiklab beringlar kerak bo’lyapti )

2.9k 0 14 33 64

Qiziq savol tug’ildi, bu talabga mos ekanligini qanday aniqlab oladi, ya’ni bu “qobiliyat” ni aniqlash uchun qandaydir kriteria (o’lchov usuli) bormi?

Siz nima deb o’ylaysiz, bunday kompaniyaga ishga kirgan maqulmi yoki aksinchami?


Xakerchalar(yoki botlar) mockexam.uz platformasini php da qilingan deb o’ylayapti shekilli. Qandaydir zaif joyini qidiryapti anchadan beri, SQL injection ham, DDOS ham qilib ko’rishdi, hozircha security o’z joyida.

Dastur xavfsizligini ta’minlashda standartlarga amal qilinsa + Cloudflare yoqib qo’yilsa, shuni o’zi 99% hujumlarni to’xtatib qoladi.


ChatGPT ga rahmat, 70-80 % rezyumelar ancha yaxshilanib, to’g’ri formatga tushib qolibdi.

Faqat birgina iltimos rezyumeni wordda va hh.uz generate qilib bergan shablon da qilmanglar )


Bu savolga o’zimda ham 100% ishlaydigan aniq yechim yo’q.
Agar “sizga mana 1 yil, va istalgancha moliyaviy resurs sarflab, shu proyektni qiling”, deganda, ishni avvalo kuchli komanda yig’ishdan boshlagan bo’lardim.

Komandaga eng kamida 1 ta Database engineer, 1 ta DevOps engineer, backend dasturchi va ishni ko’zini biladigan frontend dasturchi olinar edi.

Asosiy texnologiya sifatida FastAPI ni sinab ko’rgan bo’lardim. Boshlanishiga microservice emas, monolit arxitekturani tanlardim. Database uchun relation database masalan Postgresql va connection poolni yaxshilash uchun Pgbouncer. Data partitioning, sharding va scaling kabi database tasklarni barchasini Database engineerga yuklardim.

Caching - backend uchun Redis, front uchun (CDN) Cloudflare maqul variant. Load balancing uchun Nginx va HAProxyni kombinatsiyasi ishlatsa bo’ladi. Load balancerni monolit arxitektura bo’lsada ishlatsa bo’ladi, server ichidagi instance larga traffikni baribir taqsimlash kerak.

Message queue uchun Redis emas, aynan RabbitMQ ni ishlatgan bo’lardim, chunki RabbitMQ aynan queue uchun native tool hisoblanadi. Monitor qilish uchun Prometheus va Grafana kombinatsiyasi va albatta error logs uchun Sentry.

Serverni konteynerlash uchun Docker va Kubernetes kombinatsiyasi va Cloud server esa AWS eng maquli. AWS da ham barchasi uchun alohida servis olinadi(Postgres, Redis Cluster vahokazo) va auto scale funksiyasi yoqiladi.

CI/CD pipeline github yoki gitlab emas, Jenkins orqali amalga oshiriladi. Secure bo’lishi uchun Rate limiting application levelda yoqiladi. Xavfsizlik uchun qo’shimcha ravishda CloudFlare va AWS sozlamalari ham to’g’irlanadi.

3.9k 0 13 16 27

Nega moliyaviy jihatdan muammosi yo’q, istalgan server resurslarni sotib olishga qodir bo’lgan uzavtosanoat.uz sayti har doim down bo’ladi? Ular ham hech 1 million user bilan load test qilib, qachon down bo’lishini bilib shunga yarasha tayyorgarlik ko’rishadimi?

Agar sizga 1 yil vaqt berib, shu saytni down bo’lmaydigan qilgin deganda qanday yo’l tutgan bo’lardingiz? Qaysi texnologiya va usullardan foydalanib, down bo’lishini oldini olardingiz?


Load testing qilish aysbergni uchi xolos, asosiy qilinadigan ish testdan keyin bo’ladi. Har bir “Nega” degan savollaringizga debug qilib, javob olishga harakat qiling.

Agar database javob berish vaqti oshib ketib, loglarda 504(timeout) error qaytarayotgan bo’lsa, qaysi querylar ko’p vaqtni olyapti, qaysi querylarni optimizatsiya qilish haqida bosh qotirishim kerak deb o’zingizga savol bering.

Agar server CPU va memory ga yuklama 90% dan oshib ketsa, demak server resurslarini oshirish haqida bosh qotirishingiz kerakdir.

Qolgan barcha savollaringizga shoshmasdan, o’ylab javob olishga harakat qiling.

Dasturingiz BUG siz, RPS ingiz har doim baland bo’lsin : )


Rasmdagi grafiklarda locust orqali test qilingan dastur natijalarini ko’rib, server performance haqida ko’p ma’lumot olishimiz mumkin.

1-qatordagi grafikda yashil chiziq bu RPS ko’rsatkichi - Requests Per Second (bir sekundda requestlar soni). Qizil chiziq esa fail bo’lgan so’rovlar soni.

E’tibor bergan bo’lsangiz 1-grafikda qizil chiziqlar 0 bo’lib borgan va RPS 30 ga, bir vaqtda request yuborayotgan foydalanuvchilar soni 1700 ga yaqinlashganda server javob qaytarish vaqti (response time) ko’payib, fail requestlar soni oshib ketgan(4 raqamiga qarang)

5-grafikda esa foydalanuvchilar soni 2200 dan oshib, RPS 38 ga yetganda server butunlay down bo’lib(unhealthy), so’rovlar javob berishni to’xtatgan.

Yuqoridagi grafikdan server bir vaqtda qancha so’rovlarga javob bera oladi yoki nechta user bir vaqtda so’rov jo’natishi mumkin.

Keyingi qilinadigan ish, nima uchun server aynan shu yerga kelganda down bo’lyapti. Qanday omillar bunga sabab bo’lyapti?


Nima uchun Locust ni ishlatishimiz kerak

Load test qilish kerakligini bilib oldik, lekin uni qanday amalga oshiramiz deb xavotir olmang. Siz uchun tayyor, bepul dastur allaqachon yaratib qo’yilgan, siz pip orqali dasturni o’rnatib, so’rovlarni ketma ketlikda bajarilish tartibini yozasiz va ishga tushirsangiz kifoya, Locust dasturini o’zi siz uchun test qiladi va real vaqt rejimida dashboard orqali stress test natijalarini ko’rsatib turadi.

Locust opensource bo’lganligi uchun undan bemalol bepul foydalanishingiz mumkin. Locustni afzalligi shundaki, test uchun kodlarni python dasturlash tilida yozasiz va yozgan testingizni CI/CD uchun ham ishlatishingiz mumkin. Bundan tashqari, Locust admin paneli sizga barcha statistika orqali qaysi endpointga nechta request yuborilgani, ularni nechtasi fail bo’lgani, o’rtacha, minimum va maksimum response time gacha ko’rsatib turadi.

Dastur orqali yuborilgan barcha so’rovlarni, fail bo’lgan requestlarni va umumiy reportni yuklab olishingiz mumkin.


Load testing nega kerak?

Loyihadagi eng oxirgi buglarni ham to’g’irlab, so’nggi o’zgarishlarni deploy qilgach, endi nima ish qilsam ekan deb o’ylayotgan bo’lsangiz, dasturingizni load(stress) test qilib, uning imkoniyatlarini bilib olganingiz maqul.

Load testing - dasturga turli xil yuklama berish orqali ya’ni dastur yuklama yo’q, yuklama ko’p va yuklama haddan tashqari ko’p vaqtda qanday ishlashini bilib olish mumkin bo’ladi.

Siz o’zingiz ishlab chiqqan dasturni tinch holatda tekshirganingizda aksariyat holatda test muvaffaqiyatli o’tadi. Lekin dasturingizga 1000, 10000 va 100000 lab request jo’natilganda qanday ishlashini, qachon server ishlashdan to’xtashini albatta tekshirib olishingiz kerak.

Load testing(stress test ham deb atashadi) quyidagi savollarga javob topish uchun kerak:

1) Serverdan bir vaqtda foydalanuvchilar soni keskin oshganda qanday ishlaydi

2) Serverni maksimal qobiliyati qanday ya’ni bir vaqtda maksimal qancha user yoki qancha so’rovlarga javob bera oladi yoki server down bo’lish nuqtasi qayerda

3) Foydalanuvchilar soni oshganda response time qanchalik o’zgaradi

4) Dasturni qayerida qanday muammolar bor. Database querylar to’g’ri sozlanmaganmi yoki server resurslari yetarlimi yoki yo’q

Bu ma’lumotlarni bilish sizga dasturingiz kamchiliklarini to’g’irlashga va resurslarni to’g’ri sarflashga yordam beradi


Barchangizga Iydul Fitr bayrami muborak boʻlsin.

Xonadoningizga tinchlik-xotirjamlik, fayzu baraka, o‘zingizga sihat-salomatlik tilayman!


So’nggi oylarda elektromobillarni zaryadlash biznesi ancha ommalashdi. Ilovalar ichida Tokbor va Megawatt ilovalari dizayn tomonlama ham, qulaylik tomonlama ham talabga umuman javob bermay qo’ygan.

Aprel oyidan boshlab, foydalanuvchi uchun qulay va sodda ilova yaratishni boshladik. Zaryadlash stansiyasi bilan serverni orasida bog’lanish uchun OCPP standartidan foydalaniladi ya’ni stansiyani ishlayotgan yoki ishlamayotganligi haqida signallar ham, user tomonidan mashinani zaryadlashni boshlash uchun yuboriladigan Start va zaryadlashni to’xtatish uchun Stop buyruqlar ham hammasi OCPP standarti orqali boshqariladi. Aynan shu qismi juda ko’p vaqt va resurni oldi.

Boshida 3-4 oyda bitadigandek ko’ringan sodda ilova, alohida backend, websocket server, korporativ vebsayt va Admin paneldan tashkil topgan ulkan loyihaga aylanib ketdi. Loyiha muvaffaqiyatli va o’z vaqtida topshirlishi juda ko’p faktorlarga bog’liq lekin kuchli jamoa va IT ni tushunadigan odamlar bilan birga ishlasangiz loyihani tezroq va ortiqcha stress va boshog’riqlarsiz topshirasiz.

Bizda biznes egalari odatda mutlaqo IT dan uzoq bo’lganligi uchun, websocket serverda qayeridadir muammo bo’lyapti desangiz, “men bilmayman qanday qilib bo’lsa ham to’g’irlanglar” degan javob eshitasiz yoki bo’lmasam dasturchi bilan maslahatlashmasdan turib, developmentda turgan product ni keng omma uchun ya’ni production uchun ham chiqarib yuboraveradi 😆

Shunday katta loyiha birgina backend dasturchi uchun og’irlik qiladi. Men bilan birga Abduaziz ham katta hajmdagi ishni bajardi. Abduaziz ni (AbduazizPy) o’zim tanigan eng ijodkor python dasturchilaridan biri deb hisoblayman

Ilova uchun link: Play market & Appstore

@djangodarslari

3.7k 0 10 19 39
Показано 20 последних публикаций.