#experience
Let's talk about distributed systems.
Siz distributed system backend qismini qurayabsiz. Client serverga request (so'rov) yuboradi - API, message queue yoki event bus orqali. Ammo bir muammo bor, qanday qilib request'ni serveringiz aniq bir marta process qilishini ta'minlaysiz?
Eng qiziq muammolar bu yerda faqat u emas balkim:
- Network paketlarni drop qilishi mumkin (tashlavoradi)
- Client retry qilishi (qayta so'rov yuborishi) mumkin
- Server process qilish jarayonida crash bo'lishi (buzilishi) mumkin
- Message ketma-ketligi buzilishi, kech kelishi, yoki 2 marta kelishi mumkin
Agar yuqoridagi muammolarni oldini olmasangiz:
- Client'dan 2 marta to'lov yechishingiz mumkin
- Duplikat ma'lumot yaratib qo'yishingiz mumkin
- Mahsulotni 2 marta yuborishingiz mumkin
- 50 marta notification yuborishingiz mumkin (Twitter bir yili shunday qilgandi, foydalanuvchilar retry sababli chatiga bir xil xabarlar bilan to'ldirilgandi)
Distributed tizimlarda "At-most-once", "At-least-once" va "Exactly-once" degan tushunchalar mavjud. "At-most-once" holatida xabarlar/so'rovlar 0 yoki 1 marta yetkaziladi. Duplikatlarsiz, ammo siz uni yo'qotishingiz (drop) mumkin. "At-least-once" holatida xabarlar 1+ marta yetkaziladi. Yo'qotish yo'q, lekin takrorlanish mumkin. "Exactly-once" holatida xabar bir marta yuboriladi (bu ko'rsatkichga erishish qiyin).
Exactly-once holati deyarli mavjud emas. Siz user'ni idempotent qilib fake qilib turasiz. Ya'ni HTTP headerga doim idempotency token qo'shasiz. Process qilingan ID'lar tarixini saqlab borasiz. Outbox patter ya'ni event (xodisa)lar ma'lumotlar omborida saqlaysiz va ularni o'sha yerdan olib process qilasiz.
Misol uchun, S3, Google drive, Dropbox kabi tizimlarga ko'pchilik fayllarni yuklashadi. API'lari doim ham barqaror ishlamaydi. Xuddi o'sha PUT yoki POST request bir necha marta yuborilishi mumkin. Har bir obyekt uchun maxsus key va ETag (content caching) bilan yuborishadi. Bu esa content-based idempotency deyiladi. Yanada chqur kirsak, kontentlarni bitta qilib yubormaydi, TCP ni chegarasi (65KB) tufayli kontentlar bir nechta iteratsiya qilib yuboriladi va buni MTU deyishadi. Endi tasavvur qiling, brinchi yuklashda 20% yuklandi va crash bo'ldi, 2chisida esa 40% bo'lib crash bo'lsa nima qilasiz. Bu holatlarda ham content-based idempotency key ishlatish ko'p muammoni yechadi. Keyingi marta qayta urinishda siz kelgan joyidan davom eta olasiz degani.
System Design intervyularda ko'p yordam bergan shu mavzular menga. Sizga ham foydali bo'lishi mumkin. Bugunchalik kallangizni achitish uchun shu yetadi : )
Let's talk about distributed systems.
Siz distributed system backend qismini qurayabsiz. Client serverga request (so'rov) yuboradi - API, message queue yoki event bus orqali. Ammo bir muammo bor, qanday qilib request'ni serveringiz aniq bir marta process qilishini ta'minlaysiz?
Eng qiziq muammolar bu yerda faqat u emas balkim:
- Network paketlarni drop qilishi mumkin (tashlavoradi)
- Client retry qilishi (qayta so'rov yuborishi) mumkin
- Server process qilish jarayonida crash bo'lishi (buzilishi) mumkin
- Message ketma-ketligi buzilishi, kech kelishi, yoki 2 marta kelishi mumkin
Agar yuqoridagi muammolarni oldini olmasangiz:
- Client'dan 2 marta to'lov yechishingiz mumkin
- Duplikat ma'lumot yaratib qo'yishingiz mumkin
- Mahsulotni 2 marta yuborishingiz mumkin
- 50 marta notification yuborishingiz mumkin (Twitter bir yili shunday qilgandi, foydalanuvchilar retry sababli chatiga bir xil xabarlar bilan to'ldirilgandi)
Distributed tizimlarda "At-most-once", "At-least-once" va "Exactly-once" degan tushunchalar mavjud. "At-most-once" holatida xabarlar/so'rovlar 0 yoki 1 marta yetkaziladi. Duplikatlarsiz, ammo siz uni yo'qotishingiz (drop) mumkin. "At-least-once" holatida xabarlar 1+ marta yetkaziladi. Yo'qotish yo'q, lekin takrorlanish mumkin. "Exactly-once" holatida xabar bir marta yuboriladi (bu ko'rsatkichga erishish qiyin).
Exactly-once holati deyarli mavjud emas. Siz user'ni idempotent qilib fake qilib turasiz. Ya'ni HTTP headerga doim idempotency token qo'shasiz. Process qilingan ID'lar tarixini saqlab borasiz. Outbox patter ya'ni event (xodisa)lar ma'lumotlar omborida saqlaysiz va ularni o'sha yerdan olib process qilasiz.
Misol uchun, S3, Google drive, Dropbox kabi tizimlarga ko'pchilik fayllarni yuklashadi. API'lari doim ham barqaror ishlamaydi. Xuddi o'sha PUT yoki POST request bir necha marta yuborilishi mumkin. Har bir obyekt uchun maxsus key va ETag (content caching) bilan yuborishadi. Bu esa content-based idempotency deyiladi. Yanada chqur kirsak, kontentlarni bitta qilib yubormaydi, TCP ni chegarasi (65KB) tufayli kontentlar bir nechta iteratsiya qilib yuboriladi va buni MTU deyishadi. Endi tasavvur qiling, brinchi yuklashda 20% yuklandi va crash bo'ldi, 2chisida esa 40% bo'lib crash bo'lsa nima qilasiz. Bu holatlarda ham content-based idempotency key ishlatish ko'p muammoni yechadi. Keyingi marta qayta urinishda siz kelgan joyidan davom eta olasiz degani.
System Design intervyularda ko'p yordam bergan shu mavzular menga. Sizga ham foydali bo'lishi mumkin. Bugunchalik kallangizni achitish uchun shu yetadi : )
1🔥63👍13❤8⚡7
Google'ga yo'q dedim.
Ha, noto'g'ri eshitmadingiz, Google bergan taklifni rad qildim. Qancha yoshlarni orzusi bo'lgan kompaniyaga men rad javobini berdim.
Google bilan pishirgan ilk oshimiz o'tgan yili bo'lgandi. Kompaniyadan ishga taklif kelgan ammo L4 (middle) lavozimiga, Dropbox taklif qilgan IC4 (Senior) lavozimi balandroq bo'lgani uchun Google bilan karyeramni davom etmadim.
Ammo Google bas kelmadi, men uchun Tizim Dizayni intervyusini tashkil qilib berdi. Undan yaxshi o'ta oldim, bu safar L5 (Senior) lavozimiga taklif oldim, ammo Dropbox IC5 (Staff) lavozimga taklif bilan Googleni ortda qoldirdi yana.
Google'dan keyingi qadamni kutib qolaman.
Google'dagi akalar, rekruiterlarga aytinglar, yaxshi oylik va sharoit qilib bersa boraman.
Ha, noto'g'ri eshitmadingiz, Google bergan taklifni rad qildim. Qancha yoshlarni orzusi bo'lgan kompaniyaga men rad javobini berdim.
Google bilan pishirgan ilk oshimiz o'tgan yili bo'lgandi. Kompaniyadan ishga taklif kelgan ammo L4 (middle) lavozimiga, Dropbox taklif qilgan IC4 (Senior) lavozimi balandroq bo'lgani uchun Google bilan karyeramni davom etmadim.
Ammo Google bas kelmadi, men uchun Tizim Dizayni intervyusini tashkil qilib berdi. Undan yaxshi o'ta oldim, bu safar L5 (Senior) lavozimiga taklif oldim, ammo Dropbox IC5 (Staff) lavozimga taklif bilan Googleni ortda qoldirdi yana.
Google'dan keyingi qadamni kutib qolaman.
1🔥151😁72🤯14🏆8
#announcement
cloud.42.uz bir vaqtni o'zida 500 ta odamga xizmat ko'rsata olardi. Nimaga ko'proq emas? Chunki cloud tekin emas, 500 ta odamni har biriga VM (virtual machine) bering. Va har bir VM narxi $5 xisoblaganizda ham jami $2500 har oy pul to'lashingizga to'g'ri keladi.
Biz jonajon talabalarimiz uchun, jamoamiz bilan yangicha yechim ishlab chiqdik. Endi u 500 ta emas, 5 million odamga ham xizmat ko'rsata oladi.
Bu yechim, bizga qanday qiymat olib keladi? Sizga biz yanada ko'proq Cloud, AI, Security, DevOps, Backend, Frontend va boshqa bilmlarni amaliy yetkazishimizdagi to'siqlarni olib tashlaydi.
Sinab ko'ring
cloud.42.uz bir vaqtni o'zida 500 ta odamga xizmat ko'rsata olardi. Nimaga ko'proq emas? Chunki cloud tekin emas, 500 ta odamni har biriga VM (virtual machine) bering. Va har bir VM narxi $5 xisoblaganizda ham jami $2500 har oy pul to'lashingizga to'g'ri keladi.
Biz jonajon talabalarimiz uchun, jamoamiz bilan yangicha yechim ishlab chiqdik. Endi u 500 ta emas, 5 million odamga ham xizmat ko'rsata oladi.
Bu yechim, bizga qanday qiymat olib keladi? Sizga biz yanada ko'proq Cloud, AI, Security, DevOps, Backend, Frontend va boshqa bilmlarni amaliy yetkazishimizdagi to'siqlarni olib tashlaydi.
Sinab ko'ring
🔥82⚡16🎉9👍5
#experience
Yaqinda jamoamiz Dropbox va OpenAI bilan integratsiya qilish ustida ishladik. Bizni vazifamiz ML muhit (environment) yaratish kerak edi. Aniqroq qilsak OpenAI ChatGPT'ni Dropbox serverlarida ishga tushirish haqida gap ketayabdi. Nimalarni o'rgandim:
ML environment deganda hayolingizga istalgan katta LLMni deploy qilish, train qilish, kerakli ma'lumotlarni olib o'tish va kerakli dasturlarni run qila olish imkonini beruvchi tayyor infrastruktura kelishi kerak. Buning uchun biz juda ko'p resurs ajrtadik. GPU haqida eshitgandim ammo TPU (Tensor Processing Unit) haqida eshitmagandim, buni ham o'rganib oldim. Btw, OpenAI ni Python ko'tarib turibdi ekan. Pythonchilar bir yayrasin : )
Secuirty for AI haqida ajoyib hikoyalar eshitdim. Adversarial attacks, Data poisoning, model stealing va privacy attack haqida ko'p gap ketdi. Maqolalar o'qib ularni tahlil qilib chiqdik. AI'ga user qo'pol so'zlar aytsa yoki so'kinsa AI sizni qaytarib so'kmasligi ham security ekan, qiziq. Prompt hacking ham ozgina ko'rib chiqdik.
Yana bir qiziq o'rgangan narsam AI for security bo'ldi. Ya'ni AI'ni kiber xujumlarni qaytarishda ishlatish, misol uchun tarmoqdan kelayotgan nomalum so'rovlar, phishing email'larni topish va h.k.z. Bunday business modellar juda kam, hozir boshlasangiz yaxshilardan biriga aylanishingiz mumkin ekan.
AI deploy qilayotganda uni izolyatsaladik, firewall bilan in va out trafiklarni chekladik. To'g'ri OS tanlash ham muhim ekan bu yerda. AI faqat API bilan ishlaydi, firewall kirayotgan va chiqayotgan trafikni to'liq nazorat qiladi. Modelni og'irligi (weight) bu uni bilimi degani. Uni ham encrypted storage'da saqlash kerakligini o'rgandik. Ancha praktikaga boy bo'ldi. Katta modeldan kichik model yasashni ko'rib chiqdik. Bu orqali ancha cost va performance optimization qilsa bo'lar ekan.
Xulosa:
Eng katta xulosam AI yaxshi yordamchiligicha qoladi. Eng yaxshi injenerlar yaxshi debuger'lar ekan. AI debugging da juda oqsaydi. Debug qilishni o'rganing. Agar hali ham AI'dan kodingizni debug qilishini so'rayotgan bo'lsangiz, juniorlik zindoniga bir umr ravona bo'lasiz.
Yaqinda jamoamiz Dropbox va OpenAI bilan integratsiya qilish ustida ishladik. Bizni vazifamiz ML muhit (environment) yaratish kerak edi. Aniqroq qilsak OpenAI ChatGPT'ni Dropbox serverlarida ishga tushirish haqida gap ketayabdi. Nimalarni o'rgandim:
ML environment deganda hayolingizga istalgan katta LLMni deploy qilish, train qilish, kerakli ma'lumotlarni olib o'tish va kerakli dasturlarni run qila olish imkonini beruvchi tayyor infrastruktura kelishi kerak. Buning uchun biz juda ko'p resurs ajrtadik. GPU haqida eshitgandim ammo TPU (Tensor Processing Unit) haqida eshitmagandim, buni ham o'rganib oldim. Btw, OpenAI ni Python ko'tarib turibdi ekan. Pythonchilar bir yayrasin : )
Secuirty for AI haqida ajoyib hikoyalar eshitdim. Adversarial attacks, Data poisoning, model stealing va privacy attack haqida ko'p gap ketdi. Maqolalar o'qib ularni tahlil qilib chiqdik. AI'ga user qo'pol so'zlar aytsa yoki so'kinsa AI sizni qaytarib so'kmasligi ham security ekan, qiziq. Prompt hacking ham ozgina ko'rib chiqdik.
Yana bir qiziq o'rgangan narsam AI for security bo'ldi. Ya'ni AI'ni kiber xujumlarni qaytarishda ishlatish, misol uchun tarmoqdan kelayotgan nomalum so'rovlar, phishing email'larni topish va h.k.z. Bunday business modellar juda kam, hozir boshlasangiz yaxshilardan biriga aylanishingiz mumkin ekan.
AI deploy qilayotganda uni izolyatsaladik, firewall bilan in va out trafiklarni chekladik. To'g'ri OS tanlash ham muhim ekan bu yerda. AI faqat API bilan ishlaydi, firewall kirayotgan va chiqayotgan trafikni to'liq nazorat qiladi. Modelni og'irligi (weight) bu uni bilimi degani. Uni ham encrypted storage'da saqlash kerakligini o'rgandik. Ancha praktikaga boy bo'ldi. Katta modeldan kichik model yasashni ko'rib chiqdik. Bu orqali ancha cost va performance optimization qilsa bo'lar ekan.
Xulosa:
Eng katta xulosam AI yaxshi yordamchiligicha qoladi. Eng yaxshi injenerlar yaxshi debuger'lar ekan. AI debugging da juda oqsaydi. Debug qilishni o'rganing. Agar hali ham AI'dan kodingizni debug qilishini so'rayotgan bo'lsangiz, juniorlik zindoniga bir umr ravona bo'lasiz.
🔥67👍15❤3🤣2
#failure
Omadsizliklarim haqida qisqacha (hammasini yozsam sig'maydi ekan):
・Matematikadan yechgan ilk 10ta testimni natijasi tahmin qilib chiqsa ham, yaxshiroq natija olsa bo'ladigan darajada yomon bo'lgan. Buning uchun ustozimdan ko'p kaltak yer edim.
・SJTU Universitetida hamma yaxshi o'qib, imtixon topshirgan fandan yiqilganman. O'sha 1ta yomon o'quvchi men bo'lganman.
・Ilk loyihamni backend qismini juda yomon yozganman, bunga sabab shoshqaloqlik edi. Shuning uchun ham ko'p yiqilar edi va foydalanuvchilar arz qilardi.
・25ta open-source qilaman deb yozgan loyihalarimni 10% github'da private repo bo'lib turibdi, qolgalari github'ga ham yuklanmagan. Ularni kodini ko'rib yig'laydi kishi.
・Mobal.io ishlagan vaqtlarim katta change qilib uni production'ga yuborganimni eslayman. Shunda serverimiz 1 kunga meni deb ishdan chiqgan.
・Dropbox'da 50k config fayllarni o'chirib yuborib, data center (ma'lumotlar markazi ya'ni serverlar) qurish jarayonini 1 haftaga muzlatib qo'yganman.
・42.uz da ham ba'zi qismlarni tuzataman, yaxshilayman yoki tezlashtiraman deb ko'p buzganman.
Siz nimalar qilgansiz?
Omadsizliklarim haqida qisqacha (hammasini yozsam sig'maydi ekan):
・Matematikadan yechgan ilk 10ta testimni natijasi tahmin qilib chiqsa ham, yaxshiroq natija olsa bo'ladigan darajada yomon bo'lgan. Buning uchun ustozimdan ko'p kaltak yer edim.
・SJTU Universitetida hamma yaxshi o'qib, imtixon topshirgan fandan yiqilganman. O'sha 1ta yomon o'quvchi men bo'lganman.
・Ilk loyihamni backend qismini juda yomon yozganman, bunga sabab shoshqaloqlik edi. Shuning uchun ham ko'p yiqilar edi va foydalanuvchilar arz qilardi.
・25ta open-source qilaman deb yozgan loyihalarimni 10% github'da private repo bo'lib turibdi, qolgalari github'ga ham yuklanmagan. Ularni kodini ko'rib yig'laydi kishi.
・Mobal.io ishlagan vaqtlarim katta change qilib uni production'ga yuborganimni eslayman. Shunda serverimiz 1 kunga meni deb ishdan chiqgan.
・Dropbox'da 50k config fayllarni o'chirib yuborib, data center (ma'lumotlar markazi ya'ni serverlar) qurish jarayonini 1 haftaga muzlatib qo'yganman.
・42.uz da ham ba'zi qismlarni tuzataman, yaxshilayman yoki tezlashtiraman deb ko'p buzganman.
Siz nimalar qilgansiz?
❤24👍21🔥8😁5
DNS qanday ishlashini bilasizmi?
Google Chrome dasturini ochdingiz. Search Bar'ga "otabek.io" deb yozib enter tugmasini bosganingizda nimalar sodir bo'ladi? Qanday sodir bo'ladi? Avvalroq yozgan dnsql dasturimni yaxshiladim va Open-Source qilib githubga yukladim.
U yerdagi kontentni o'qib siz ham DNS query resolver dastur yasab ko'rsangiz bo'ladi. Keyinroq bu haqda to'liqroq blog yozishga harakat qilaman.
Contribute uchun ochiqmiz:
Github: https://github.com/otabekswe/
Google Chrome dasturini ochdingiz. Search Bar'ga "otabek.io" deb yozib enter tugmasini bosganingizda nimalar sodir bo'ladi? Qanday sodir bo'ladi? Avvalroq yozgan dnsql dasturimni yaxshiladim va Open-Source qilib githubga yukladim.
U yerdagi kontentni o'qib siz ham DNS query resolver dastur yasab ko'rsangiz bo'ladi. Keyinroq bu haqda to'liqroq blog yozishga harakat qilaman.
Contribute uchun ochiqmiz:
Github: https://github.com/otabekswe/
👍36❤9🔥7
#experience (1-qism)
Senior darajadan keyin sizda odatda 2ta yo'l bo'ladi (kompaniyaga qarab). Biri Management (odamlar bilan ishlash), boshqasi Staff (texnik liderlik). Ikkisida ham o'ziga yarasha qiyinchiliklari bor. Biz ushbu postda Staff Engineer yo'li haqida gaplashamiz.
Staff Engineer bizni kompaniyada 3ta eng asosiy narsaga qarab tanlanadi.
- U bog'liq tizimlarni yaxshi tushunadi (Ownership scope)
- U kompaniyaga nima foyda olib kelishini ko'ra oladi (Impact)
- U bir necha komandalar bilan ishlay oladi (Collabration)
Ishga ilk bor kirganimda onboarding jarayoni uchun 3 oy vaqt berilgandi. Shu 3 oyni men 2 qismga bo'lib chiqdim. 1-oy asosan onboarding bosqichini tugatish. 2 va 3-oy jamoamiz ishlaydigan tizimlarni arxitekturasini ko'rib, undagi komponentlarni o'rganib chiqish. Asosan bergan savolim "why" bo'lgan, "how" emas.
Nega "why"?
Tizmlar va undagi komponentlar nega mavjudligini bilish boshqa ishlardan ancha muhimroq. Nega aynan bu komponent yaratilgan? Nega u bunday algoritm asosida ishlaydi? Nega u error'larni bunday handle qiladi? Bu savollar ancha ko'proq qamrovda savollarga javob bera oladi. Agar shuni "how ...?" ga o'zgaritganimda men tizim qanday ishlashi va qanday handle qilishini bila olardim xolos. Bu faqat texnik savollarga javob beradi xolos, ammo qarorlarni kelib chiqish sababiga hech qachon javob topa olmaysiz. To'g'risini aytaman, tizimlarni qanday ishlashini bilish sizni qimmatbaho dasturchi qilmaydi, chunki bu yodlanadigan bilm, qayta ishlatiladigan bilm emas.
What makes you best engineer?
Men bilgan eng zo'r injinerlarni hammasida 2ta odatni ko'raman. Debugging va yozish. Debugging shunchaki koddagi xatolikni topish emas, balkim tizimni qanday ishlayotganini ko'ra olish degani. Katta tizmlarni yaratish oson bo'lishi mumkin, ammo ularni tuzatish ancha murakkabroq. Tizimni qayerida xatolik bo'layotganini topish va uni ertaroq oldini olish juda katta tajriba talab qiladi. Yaratishdan ko'ra debug qilishga ko'proq vaqtingiz ketadi odatda.
Debug qildingiz endichi? Endi ularni log qilib qo'ying. Ha biror daftaringizni oching va shu xatolik nimaga, qanday sodir bo'lgani va uni tuzatganingiz haqida to'liq yozib qo'ying. Bu juda muhim. Bilmlar xiralashadi. Bugun aniq detallarini ayta olasiz. Ammo kunlar o'tgan sari siz kam-kamdan mayda detallarni unutib boraverasiz. Yozganingizni ertaga o'qib oson yodga solasiz. Yozishni foydalari ko'p. Yozayotganda yaxshiroq yechimlar ham kelishi mumkin (shaxsan o'zimda shunday bo'lib turadi). Yozganingizni ulashish ham osonroq bo'ladi. Yozing.
Senior darajadan keyin sizda odatda 2ta yo'l bo'ladi (kompaniyaga qarab). Biri Management (odamlar bilan ishlash), boshqasi Staff (texnik liderlik). Ikkisida ham o'ziga yarasha qiyinchiliklari bor. Biz ushbu postda Staff Engineer yo'li haqida gaplashamiz.
Staff Engineer bizni kompaniyada 3ta eng asosiy narsaga qarab tanlanadi.
- U bog'liq tizimlarni yaxshi tushunadi (Ownership scope)
- U kompaniyaga nima foyda olib kelishini ko'ra oladi (Impact)
- U bir necha komandalar bilan ishlay oladi (Collabration)
Ishga ilk bor kirganimda onboarding jarayoni uchun 3 oy vaqt berilgandi. Shu 3 oyni men 2 qismga bo'lib chiqdim. 1-oy asosan onboarding bosqichini tugatish. 2 va 3-oy jamoamiz ishlaydigan tizimlarni arxitekturasini ko'rib, undagi komponentlarni o'rganib chiqish. Asosan bergan savolim "why" bo'lgan, "how" emas.
Nega "why"?
Tizmlar va undagi komponentlar nega mavjudligini bilish boshqa ishlardan ancha muhimroq. Nega aynan bu komponent yaratilgan? Nega u bunday algoritm asosida ishlaydi? Nega u error'larni bunday handle qiladi? Bu savollar ancha ko'proq qamrovda savollarga javob bera oladi. Agar shuni "how ...?" ga o'zgaritganimda men tizim qanday ishlashi va qanday handle qilishini bila olardim xolos. Bu faqat texnik savollarga javob beradi xolos, ammo qarorlarni kelib chiqish sababiga hech qachon javob topa olmaysiz. To'g'risini aytaman, tizimlarni qanday ishlashini bilish sizni qimmatbaho dasturchi qilmaydi, chunki bu yodlanadigan bilm, qayta ishlatiladigan bilm emas.
What makes you best engineer?
Men bilgan eng zo'r injinerlarni hammasida 2ta odatni ko'raman. Debugging va yozish. Debugging shunchaki koddagi xatolikni topish emas, balkim tizimni qanday ishlayotganini ko'ra olish degani. Katta tizmlarni yaratish oson bo'lishi mumkin, ammo ularni tuzatish ancha murakkabroq. Tizimni qayerida xatolik bo'layotganini topish va uni ertaroq oldini olish juda katta tajriba talab qiladi. Yaratishdan ko'ra debug qilishga ko'proq vaqtingiz ketadi odatda.
Debug qildingiz endichi? Endi ularni log qilib qo'ying. Ha biror daftaringizni oching va shu xatolik nimaga, qanday sodir bo'lgani va uni tuzatganingiz haqida to'liq yozib qo'ying. Bu juda muhim. Bilmlar xiralashadi. Bugun aniq detallarini ayta olasiz. Ammo kunlar o'tgan sari siz kam-kamdan mayda detallarni unutib boraverasiz. Yozganingizni ertaga o'qib oson yodga solasiz. Yozishni foydalari ko'p. Yozayotganda yaxshiroq yechimlar ham kelishi mumkin (shaxsan o'zimda shunday bo'lib turadi). Yozganingizni ulashish ham osonroq bo'ladi. Yozing.
1👍72🔥12❤8⚡3
#security
Yuqoridagi rasm bir ko'rishda Microsoft kompaniyasidan kelganga o'xshaydi. Logo, UI dizayn, hammasi deyarli bir xil.
Mobil telefonga email kelsa odatda kimdan, qanday domain'dan kelganini tekshirmaysiz. Ammo kompyuterdan email o'qisangiz bir qarab qo'yasiz domain'ga.
Bu yerda email microsoft.com dan emas, rnicrosoft.com dan kelgan (tushunmagan bo'lsangiz, yaxshilab o'qing). Mana shu kichik "rn" va "m" o'rtasidagi farq odamlarni oson aldanishiga sabab bo'ladi. Bu xujumni nomi "typosquatting attack" deyiladi.
Xujum qilaytogan odam shunaqa domain register qiladi. Qanchalik yaqinroq typo tanlay olsa unga yutish ehtimolini oshiradi.
Bunday xujumlar tarihda ko'proq HR, finans va shu kabi bo'limlarda ancha qo'l kelgan. Injinerlar jamoasida ham ba'zi muvaffaqiyatli hikoyalar bor ammo juda kam.
Yechim oddiy:
- Biror ish qilishdan oldin, doim domain'ni yaxshilab tekshiring
- Link ustiga bosishdan oldin, link qayerga jo'natayotganini o'qib ko'ring.
- Reply-to degan joyingizni ham tekshiring, ba'zan xabar va javob uchun alohida-alohida manzillar ishlatiladi
- So'ralmagan ishingiz uchun odatda sizga email kelmaydi.
Real hikoya:
2020-yil ilk o'qishga kirgan paytimda O'zbekistondagi va Xitoydagi kursdoshlarimni men ham shunday phishing qilganman. Faqat u yerda Facebook.com ga bo'lgan parollarni olgandim (45ta odamni bergan username va password'i ishlagan). Lekin, ularni sotmaganman shunchaki ularni ogohlikga chaqirganimni hali ham eslayman.
Ogoh bo'ling!
Yuqoridagi rasm bir ko'rishda Microsoft kompaniyasidan kelganga o'xshaydi. Logo, UI dizayn, hammasi deyarli bir xil.
Mobil telefonga email kelsa odatda kimdan, qanday domain'dan kelganini tekshirmaysiz. Ammo kompyuterdan email o'qisangiz bir qarab qo'yasiz domain'ga.
Bu yerda email microsoft.com dan emas, rnicrosoft.com dan kelgan (tushunmagan bo'lsangiz, yaxshilab o'qing). Mana shu kichik "rn" va "m" o'rtasidagi farq odamlarni oson aldanishiga sabab bo'ladi. Bu xujumni nomi "typosquatting attack" deyiladi.
Xujum qilaytogan odam shunaqa domain register qiladi. Qanchalik yaqinroq typo tanlay olsa unga yutish ehtimolini oshiradi.
Bunday xujumlar tarihda ko'proq HR, finans va shu kabi bo'limlarda ancha qo'l kelgan. Injinerlar jamoasida ham ba'zi muvaffaqiyatli hikoyalar bor ammo juda kam.
Yechim oddiy:
- Biror ish qilishdan oldin, doim domain'ni yaxshilab tekshiring
- Link ustiga bosishdan oldin, link qayerga jo'natayotganini o'qib ko'ring.
- Reply-to degan joyingizni ham tekshiring, ba'zan xabar va javob uchun alohida-alohida manzillar ishlatiladi
- So'ralmagan ishingiz uchun odatda sizga email kelmaydi.
Real hikoya:
Ogoh bo'ling!
👍48⚡15🤣9🎉5
#networking
Nega UDP paketlar yo'qolib qoladi?
Networking bo'yicha bilmi borlar bilan gaplashsangiz TCP vs UDP haqida gapirishadi. Ular UDP haqida gapirishgan paytda uni "reliable" emas deyishadi. Ammo nega unday deyayotganini so'rasangiz javob yo'q. Bilganlar esa nega packet tushib qolishini aytib bera olishmaydi.
1. Tasavvur qiling siz juda ko'p UDP paketlarni bir manzildan ikkinchisiga yuborayabsiz. Har bir UDP socket'da socket sender buffer degan qismi mavjud. Ya'ni paketlar yuborilishdan oldin ayanan o'sha yerga jamlanadi (buffer bu bir vaqtinchalik xotira). Linux kernel bu paketlarni o'qish va yuborish bilan shug'ullanadi. Agar kompyuteringiz yoki serveringizdagi Network Card tezligi past bo'lsa, dasturni tezligiga tusha olmasligi va yuborish jarayonda paketlar yo'qolishi mumkin. Bu qanchalik odatiyligini bilmayman, ammo bunday holatlar bo'lgan.
2. UDP paketlarni internetga yubordingiz (kompyuteringizdan chiqib ketdi hammasi 100% muvaffaqiyatli), u yo'lda, bir router/switch'dan ikkinchisiga o'tish jarayonida yo'qolishi mumkin. Bu yerda router/switch queue limit tugab qolishi mumkin. TCP va UDP paket kelganda TCP paketlarni himoya qilish orqali UDP paketlarni tashlab yuborishi mumkin. Va yana ko'p boshqa sabablar ham bor.
3. Birinchi va ikkinchi bosqich muvaffaqiyatli bo'ldi ham deylik. Ya'ni yo'l yurib, barcha paketlar ohirgi nuqtaga yetib keldi. Endi sizni dasturingiz paketlarni kutib turibdi. Hammasi juda zo'r. Guess what, paketlar qayerga kelib tushadi? Yes, yana o'sha socket sender buffer ga kelishadi. U buffer hajmi qanchalik katta? U barcha paketlarni sig'dira oladimi? Bu savolga to'liqroq bu yerda o'qib ko'ring [link]. Meni kompyuterimda bunday ekan
Bu raqamlar byte emas, balkim page degani (bu haqda ko'proq keyinroq yozaman). Meni xolatimda har bir page 16KB degani ekan. Demak mendagi max buffer size 8388608 => 8MB ga to'g'ri kelar ekan (8 388 608 / 1024 / 1024 = 8). Standart receive buffer kengligi esa 0.75MB ekan. Demak agar menga katta miqdorda paketlar kirib kelsa va buffer to'lib qolsa 8MB dan buyog'ini tashlab yuborar ekan. Bu yerda application tezligiga ham bog'liq paketlarni saqlab qolish yoki tashlab yuborilishi. Shu paytgacha kompyuterim qancha paketlarni tashlab yuborgan ekan deb qizdim va natija shunday:
Facebook'da ishlaydigan do'stim bir hikoya aytib bergandi. Facebook’ning “Live” funksiyasi ham UDP'dan foydalanar ekan (RTCP/UDP). 2018-yilda ular serverda recv buffer limiti to‘lganida, Linux kernel UDP paketlarni tashlab yuborish muammosiga duch kelishgan ekan. Monitoringda bu drop’larni faqat server metrikalari orqali ko‘rishganda, foydalanuvchi tarafida video ‘pause’ bo'lishi kuzatilgan ekan. Muammoni sababi
Katta tizmlarda ishlasangiz har bir qarich siz uchun muhimligini sezib borar ekansiz.
Nega UDP paketlar yo'qolib qoladi?
Networking bo'yicha bilmi borlar bilan gaplashsangiz TCP vs UDP haqida gapirishadi. Ular UDP haqida gapirishgan paytda uni "reliable" emas deyishadi. Ammo nega unday deyayotganini so'rasangiz javob yo'q. Bilganlar esa nega packet tushib qolishini aytib bera olishmaydi.
1. Tasavvur qiling siz juda ko'p UDP paketlarni bir manzildan ikkinchisiga yuborayabsiz. Har bir UDP socket'da socket sender buffer degan qismi mavjud. Ya'ni paketlar yuborilishdan oldin ayanan o'sha yerga jamlanadi (buffer bu bir vaqtinchalik xotira). Linux kernel bu paketlarni o'qish va yuborish bilan shug'ullanadi. Agar kompyuteringiz yoki serveringizdagi Network Card tezligi past bo'lsa, dasturni tezligiga tusha olmasligi va yuborish jarayonda paketlar yo'qolishi mumkin. Bu qanchalik odatiyligini bilmayman, ammo bunday holatlar bo'lgan.
2. UDP paketlarni internetga yubordingiz (kompyuteringizdan chiqib ketdi hammasi 100% muvaffaqiyatli), u yo'lda, bir router/switch'dan ikkinchisiga o'tish jarayonida yo'qolishi mumkin. Bu yerda router/switch queue limit tugab qolishi mumkin. TCP va UDP paket kelganda TCP paketlarni himoya qilish orqali UDP paketlarni tashlab yuborishi mumkin. Va yana ko'p boshqa sabablar ham bor.
3. Birinchi va ikkinchi bosqich muvaffaqiyatli bo'ldi ham deylik. Ya'ni yo'l yurib, barcha paketlar ohirgi nuqtaga yetib keldi. Endi sizni dasturingiz paketlarni kutib turibdi. Hammasi juda zo'r. Guess what, paketlar qayerga kelib tushadi? Yes, yana o'sha socket sender buffer ga kelishadi. U buffer hajmi qanchalik katta? U barcha paketlarni sig'dira oladimi? Bu savolga to'liqroq bu yerda o'qib ko'ring [link]. Meni kompyuterimda bunday ekan
# Macbook'da
# socket max buffer size
➜ ~ sysctl kern.ipc.maxsockbuf
kern.ipc.maxsockbuf: 8388608
# send/receive buffer size
➜ ~ sysctl net.inet.udp.recvspace
net.inet.udp.recvspace: 786896
Bu raqamlar byte emas, balkim page degani (bu haqda ko'proq keyinroq yozaman). Meni xolatimda har bir page 16KB degani ekan. Demak mendagi max buffer size 8388608 => 8MB ga to'g'ri kelar ekan (8 388 608 / 1024 / 1024 = 8). Standart receive buffer kengligi esa 0.75MB ekan. Demak agar menga katta miqdorda paketlar kirib kelsa va buffer to'lib qolsa 8MB dan buyog'ini tashlab yuborar ekan. Bu yerda application tezligiga ham bog'liq paketlarni saqlab qolish yoki tashlab yuborilishi. Shu paytgacha kompyuterim qancha paketlarni tashlab yuborgan ekan deb qizdim va natija shunday:
➜ ~ netstat -s -p udp
udp:
141545183 datagrams received
0 with incomplete header
0 with bad data length field
0 with bad checksum
1048 with no checksum
45648 checksummed in software
31046 datagrams (20030730 bytes) over IPv4
14602 datagrams (3553616 bytes) over IPv6
159392 dropped due to no socket
101590 broadcast/multicast datagrams undelivered
0 IPv6 multicast datagram undelivered
0 time multicast source filter matched
9244 dropped due to full socket buffers
0 not for hashed pcb
141274957 delivered
38752867 datagrams output
415727 checksummed in software
8977 datagrams (3238427 bytes) over IPv4
406750 datagrams (117958647 bytes) over IPv6
40 open UDP sockets
Facebook'da ishlaydigan do'stim bir hikoya aytib bergandi. Facebook’ning “Live” funksiyasi ham UDP'dan foydalanar ekan (RTCP/UDP). 2018-yilda ular serverda recv buffer limiti to‘lganida, Linux kernel UDP paketlarni tashlab yuborish muammosiga duch kelishgan ekan. Monitoringda bu drop’larni faqat server metrikalari orqali ko‘rishganda, foydalanuvchi tarafida video ‘pause’ bo'lishi kuzatilgan ekan. Muammoni sababi
net.core.rmem_max juda past bo'lgan ekan. "Live session burst" ya'ni ko'p foydalanuvchilar live ga kirganida socket buffer to'lib ketgan. Yechim sifatida Facebook SRE jamoasi "dynamic UDP buffer autotuning" qo'shishganini aytgandi. Ya'ni kernel sysctl parametrlarini runtime’da trafikga qarab oshirish mumkinligini topishgan. Metrikalarni esa Prometheus bilan qattiq kuzatishgan ekan.Katta tizmlarda ishlasangiz har bir qarich siz uchun muhimligini sezib borar ekansiz.
1👍44❤8🔥6
#experience
Bir qiziq bug'ni tuzadim. Bizda code base monorepo holida saqlanadi. Ya'ni hamma kodlar bitta repo'da saqlanadi. Bu holda kodlarni test qilish, build qilish, va hokazo operatsiyalarni qo'lda bajarish yoki ularga pipeline yozib ularni boshqarish qiyinlashib boradi. Bunga yechim incremental build systems ishlatish.
Incremental build system ham oddiy dasutr, faqat u kodlaringizni o'zgarishini, dependency control, qaysi qismda o'zgarish bo'lsa faqat o'sha qismni build, test qilishni belgilay oladi. Tasavvur qiling Google, Meta, Dropbox kabi tizmlarda hamma dasturlarni kodlari bitta joyda (monorepo holida) saqlanadi.
Build System alohida Linux machine'larda ishlab turadi. O'zgarishlar bo'lsa kodlar o'sha mashinaga boradi, test, build qilinadi va keyin shunga qarab natijalar bizga ko'rinadi. Bir kun build system service OOM (out of memory) bo'lib qoldi. Memory swap qilishni boshladi. Lekin biz u servislar uchun ajratgan resurslarimiz yetishi kerak edi. Borib tahlil qilishni boshladim. 64GM RAM umumiy xisobda. Hammasi yaxshi. 48GB ram qaysidir process tomonidan ishlatilayotganini ko'rdim. Va yana 16GB OS filesystem cache ham bor edi. OS filesystem cache ni doim tozalay oladi. Lekin bu holatda nimaga swap qilayotganini tushuna olmadim.
Esingizda bo'lsa docker minimal versiyasini yasab ko'rganim haqida aytgandim. Ha o'sha tajriba qo'l keldi. Hamma gap
Ba'zan qilgan eksperimentlarim ko'p azq otadi. Peace!
Updated: Bu voqeaga ancha bo'lgan lekin hozir yozgim kelib qoldi. Balkim shu ham promoga yordam bo'lgandir, who knows
Bir qiziq bug'ni tuzadim. Bizda code base monorepo holida saqlanadi. Ya'ni hamma kodlar bitta repo'da saqlanadi. Bu holda kodlarni test qilish, build qilish, va hokazo operatsiyalarni qo'lda bajarish yoki ularga pipeline yozib ularni boshqarish qiyinlashib boradi. Bunga yechim incremental build systems ishlatish.
Incremental build system ham oddiy dasutr, faqat u kodlaringizni o'zgarishini, dependency control, qaysi qismda o'zgarish bo'lsa faqat o'sha qismni build, test qilishni belgilay oladi. Tasavvur qiling Google, Meta, Dropbox kabi tizmlarda hamma dasturlarni kodlari bitta joyda (monorepo holida) saqlanadi.
Build System alohida Linux machine'larda ishlab turadi. O'zgarishlar bo'lsa kodlar o'sha mashinaga boradi, test, build qilinadi va keyin shunga qarab natijalar bizga ko'rinadi. Bir kun build system service OOM (out of memory) bo'lib qoldi. Memory swap qilishni boshladi. Lekin biz u servislar uchun ajratgan resurslarimiz yetishi kerak edi. Borib tahlil qilishni boshladim. 64GM RAM umumiy xisobda. Hammasi yaxshi. 48GB ram qaysidir process tomonidan ishlatilayotganini ko'rdim. Va yana 16GB OS filesystem cache ham bor edi. OS filesystem cache ni doim tozalay oladi. Lekin bu holatda nimaga swap qilayotganini tushuna olmadim.
swappiness degan narsa haqida google qilib o'rgandim. Agar swappiness qiymati baland bo'lsa swap qilishni boshlar ekan. Bizdagi config 2 ko'rsatayotgan edi va men uni sysctl vm.swappiness=1 ga set qildim. Lekin shunda ham swap qilishda davom etaverdi. Swapni o'chirib qo'ydik, ancha ahvol yomonlashdi. Process'lar OOM berishni boshladi. OOM berganda Linux uni kill qiladi (to'xtatadi). O'zimga "why? why?" deb bir idea kelib qoldi.Esingizda bo'lsa docker minimal versiyasini yasab ko'rganim haqida aytgandim. Ha o'sha tajriba qo'l keldi. Hamma gap
cgroup da edi. Buni rostligini tekshirish uchun dmesg ni tekshirdim, voila javob topildi. Bug topildi. Aynan bizga kerakli ishlab turgan process'lar limiti past bo'lgan cgroup ga tushib qolganini ko'rib ich-ichimdan xursand bo'lib ketdim. I wanted to scream like "Technologia, I found the bug".Ba'zan qilgan eksperimentlarim ko'p azq otadi. Peace!
👍58🔥10❤8⚡3
#experience
Kodingiz 1 millisecond'da 23 000 qator record (ma'lumot)larni ustida operatsiyani bajarish qanchalik zo'r? Kecha bir kodni ko'rdim va hamksablar bilan gaplashganimdan beri bu ko'rsatkich sekinga aylanib qoldi. I love Distributed Systems😢 .
Kecha java'dagi Math.pow() funksiyasini optimizatsiya qilishganini ko'rib qoldim. Bu unchalik muhim bo'lmasa kerak deb o'ylagandim, adashibman. Hozir kod 100x tezroq ishlayabdi ekan. Ishonmay benchmark ham qilib ko'rdim (eski va yangi change'larni farqini bilishga). Awesome!!!
Okay bu haqda blog yozishga arziydi lekin kanalda 2k reader (follower) bo'lsak bu haqida albatta yozaman. Hozircha bu sizga challange sifatida qolaqolsin. Btw, bu muammoni men yechmaganman, lekin men ham shunday yechgan bo'lardim.
Kodingiz 1 millisecond'da 23 000 qator record (ma'lumot)larni ustida operatsiyani bajarish qanchalik zo'r? Kecha bir kodni ko'rdim va hamksablar bilan gaplashganimdan beri bu ko'rsatkich sekinga aylanib qoldi. I love Distributed Systems
Kecha java'dagi Math.pow() funksiyasini optimizatsiya qilishganini ko'rib qoldim. Bu unchalik muhim bo'lmasa kerak deb o'ylagandim, adashibman. Hozir kod 100x tezroq ishlayabdi ekan. Ishonmay benchmark ham qilib ko'rdim (eski va yangi change'larni farqini bilishga). Awesome!!!
Okay bu haqda blog yozishga arziydi lekin kanalda 2k reader (follower) bo'lsak bu haqida albatta yozaman. Hozircha bu sizga challange sifatida qolaqolsin. Btw, bu muammoni men yechmaganman, lekin men ham shunday yechgan bo'lardim.
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤38👍38🤣18🔥9
Har qanday loyiha ma'lumotlar bilan ishlaydi. Va ma'lumotlar omborini tushunish tizimni eng kerakli qismini tushunishdan iborat.
Shu paytgacha topishgan ba'zi kompaniyalarimda ma'lumotlar ombori haqida qiziq muhokamalar olib borganmiz. Ba'zilarida men intervyu oluvchiga o'rgatganman. Ya'na ba'zilarida intervyu oluvchidan o'rganganman (ya'ni uni savoliga javob bera olmay, keyingi intervyuga javob topib borganman).
Ulardan ba'zilar:
- Siz biror table'ni index qildingiz, ammo undan ma'lumot olmoqchi bo'lganingizda index'dan qidirmayabdi? Bunda nima qilasiz?
- Tasavvur qiling siz ko'p tranzaksiyalar bajaruvchi tizmda ishlaysiz. Ikki va undan ko'p tranzaksiya bir vaqtda bitta row'ni yangilashga urinsa (update) nima qilasiz? Qaysi qiymatni qabul qilishni qanday qaror qilasiz?
- Trazaksiya paytida biror xodisa yuz bersa, ammo ma'lumotlar ombori COMMIT qilganizni tasdiqlasayu ammo ma'lumotlar yo'qligiga guvoh bo'lsangiz nima qilasiz?
- Primary Key va Secondary Key o'rtasida nima farq bor? Ularni qachon ishlatmagan bo'lardingiz?
- Database recover qilgan paytingiz haqida gapirib bering? Qanday backup qilgansiz? Nima uchun unday qilgansiz? Va recover process qanday bo'lgandi? Zarar nimada bo'lgandi?
- Izolyatsiya darajasi REPEATABLE READ'da bo'lsa ham, siz PHANTOM READ'dagi o'zgarishlarni ko'ra olasiz. Ammo nega ekanligni tushuntirib bering?
- Column vs Row DBlar o'rtasidagi farq nimada?
- Sizda 1 millardlik jadval bor. U tez-tez yangilanib turadi. Qatorlar sonini xisoblash uchun nima qilasiz? (Materialized View va denormalization o'rtasidagi trade-offs)
Bu savollarga javob topish uchun ba'zi ochiq va yopiq darslarni ko'rib chiqishingiz mumkin:
42.uz/course/express-database
To’liq kurs 1 Dekabr oyida chiqadi. Hozir ulgurib qoling, keyin narx o’zgaradi.
Shu paytgacha topishgan ba'zi kompaniyalarimda ma'lumotlar ombori haqida qiziq muhokamalar olib borganmiz. Ba'zilarida men intervyu oluvchiga o'rgatganman. Ya'na ba'zilarida intervyu oluvchidan o'rganganman (ya'ni uni savoliga javob bera olmay, keyingi intervyuga javob topib borganman).
Ulardan ba'zilar:
- Siz biror table'ni index qildingiz, ammo undan ma'lumot olmoqchi bo'lganingizda index'dan qidirmayabdi? Bunda nima qilasiz?
- Tasavvur qiling siz ko'p tranzaksiyalar bajaruvchi tizmda ishlaysiz. Ikki va undan ko'p tranzaksiya bir vaqtda bitta row'ni yangilashga urinsa (update) nima qilasiz? Qaysi qiymatni qabul qilishni qanday qaror qilasiz?
- Trazaksiya paytida biror xodisa yuz bersa, ammo ma'lumotlar ombori COMMIT qilganizni tasdiqlasayu ammo ma'lumotlar yo'qligiga guvoh bo'lsangiz nima qilasiz?
- Primary Key va Secondary Key o'rtasida nima farq bor? Ularni qachon ishlatmagan bo'lardingiz?
- Database recover qilgan paytingiz haqida gapirib bering? Qanday backup qilgansiz? Nima uchun unday qilgansiz? Va recover process qanday bo'lgandi? Zarar nimada bo'lgandi?
- Izolyatsiya darajasi REPEATABLE READ'da bo'lsa ham, siz PHANTOM READ'dagi o'zgarishlarni ko'ra olasiz. Ammo nega ekanligni tushuntirib bering?
- Column vs Row DBlar o'rtasidagi farq nimada?
- Sizda 1 millardlik jadval bor. U tez-tez yangilanib turadi. Qatorlar sonini xisoblash uchun nima qilasiz? (Materialized View va denormalization o'rtasidagi trade-offs)
Bu savollarga javob topish uchun ba'zi ochiq va yopiq darslarni ko'rib chiqishingiz mumkin:
42.uz/course/express-database
🔥38👍14❤9😁2
Build Your First Model
O'zingizni ilk Machine Learning modelingizni yaratib ko'rishni o'ylaganmisiz? Unda ushbu blog siz uchun. Nimalarni o'rganamiz?
· Machine Learning ortidagi Matematika siz o'ylaganchalik qiyin emasligini
· Modelni 0dan, hech qanday kutubxonalarsiz qurishni (kodingizni otabek.io da sahifada ishlatib ko'rsangiz bo'ladi)
· Va weight ni topishni turli xil yo'llarini ko'rib o'tamiz.
Ushbu blogdan keyin biror yaxshiroq erkin loyiha qila olishingizga ishonaman. Sinab ko'ring
Batafsil: otabek.io/blogs/build-your-first-model
O'zingizni ilk Machine Learning modelingizni yaratib ko'rishni o'ylaganmisiz? Unda ushbu blog siz uchun. Nimalarni o'rganamiz?
· Machine Learning ortidagi Matematika siz o'ylaganchalik qiyin emasligini
· Modelni 0dan, hech qanday kutubxonalarsiz qurishni (kodingizni otabek.io da sahifada ishlatib ko'rsangiz bo'ladi)
· Va weight ni topishni turli xil yo'llarini ko'rib o'tamiz.
Ushbu blogdan keyin biror yaxshiroq erkin loyiha qila olishingizga ishonaman. Sinab ko'ring
Batafsil: otabek.io/blogs/build-your-first-model
🔥23❤10👍6
#shortBlog
Isolation ma'lumotlar omborini go'zal tamoyillaridan biri deb bilaman. Bir nechta tranzaksiya bir-birini blok qilib qo'ymasligi uchun ajoyib yechimlar qilingan. Sezganingizdek Pessimistic Locking va Optimistic Locking mexanizmlari haqida gap ketayabdi.
Pessimistic Locking
Tranzaksiya A obyektni o'qishi yoki yozishidan oldin. Unga (Lock) qulf qo'yadi. Agar Tranzaksiya B o'sha obyektni ustida biror ish qilmoqchi bo'lsa, uni tugashini va qulfni olib tashlashini kutishi kerak bo'ladi. Bu yechimni yomon tomoni, agar ko'p tranzaksiyalar bir-birini kutib qolsa (Deadlock), tizim qotib qolishi mumkin.
Optimistic Locking
Multi-Version Concurrency Control mehanizmi yuqoridagi muammoni yanada yaxshiroq yechish uchun qilingan. Men uni Time Travel deb atayman. Nega unday? Chunki biz multi dimension olamda yashaybamiz (quantum physics aytishi bo'yicha). Bu yechimdagi go'zallik, DB barcha tranzaksiyalar qilgan o'zgarishlarni saqlab boradi. Qachonki Tranzaksiya A boshlansa, DB hozirgi holatidan "Snapshot" oladi. Tranzaksiya B ham boshlanib, biror qiymatni o'zgartirsa, u ham o'zidagi versiyani o'zgartirgan bo'ladi. Tranzaksiya A ga hech qanday zarar o'tmaydi. Read qilayotganlar ham, Write qilayotganlar ham bir-birini blok qilmaydi.
Bu ikkisi ham trade-off. Pessimistic Locking'da tizimni qotirib qo'yishingiz mumkin bo'lsa, Optimistic Locking'da juda ko'p xotira ishlatishni boshlaysiz. Undan tashqari Timestamp Ordering, 2PL, SSI, DCC, Token-Based / Lease-Based kabi yechimlar ham bor. O'rganishni maslahat beraman. System Design intervyularda o'qigan kitoblaringiz emas, texnik bilmlaringiz va ularni ishlata olishingiz ko'proq azq otadi.
Isolation ma'lumotlar omborini go'zal tamoyillaridan biri deb bilaman. Bir nechta tranzaksiya bir-birini blok qilib qo'ymasligi uchun ajoyib yechimlar qilingan. Sezganingizdek Pessimistic Locking va Optimistic Locking mexanizmlari haqida gap ketayabdi.
Pessimistic Locking
Tranzaksiya A obyektni o'qishi yoki yozishidan oldin. Unga (Lock) qulf qo'yadi. Agar Tranzaksiya B o'sha obyektni ustida biror ish qilmoqchi bo'lsa, uni tugashini va qulfni olib tashlashini kutishi kerak bo'ladi. Bu yechimni yomon tomoni, agar ko'p tranzaksiyalar bir-birini kutib qolsa (Deadlock), tizim qotib qolishi mumkin.
Optimistic Locking
Multi-Version Concurrency Control mehanizmi yuqoridagi muammoni yanada yaxshiroq yechish uchun qilingan. Men uni Time Travel deb atayman. Nega unday? Chunki biz multi dimension olamda yashaybamiz (quantum physics aytishi bo'yicha). Bu yechimdagi go'zallik, DB barcha tranzaksiyalar qilgan o'zgarishlarni saqlab boradi. Qachonki Tranzaksiya A boshlansa, DB hozirgi holatidan "Snapshot" oladi. Tranzaksiya B ham boshlanib, biror qiymatni o'zgartirsa, u ham o'zidagi versiyani o'zgartirgan bo'ladi. Tranzaksiya A ga hech qanday zarar o'tmaydi. Read qilayotganlar ham, Write qilayotganlar ham bir-birini blok qilmaydi.
Bu ikkisi ham trade-off. Pessimistic Locking'da tizimni qotirib qo'yishingiz mumkin bo'lsa, Optimistic Locking'da juda ko'p xotira ishlatishni boshlaysiz. Undan tashqari Timestamp Ordering, 2PL, SSI, DCC, Token-Based / Lease-Based kabi yechimlar ham bor. O'rganishni maslahat beraman. System Design intervyularda o'qigan kitoblaringiz emas, texnik bilmlaringiz va ularni ishlata olishingiz ko'proq azq otadi.
⚡26❤5🔥5
Concurrency Control, Double booking problem uchun bir necha xil yechimlar, Cursor, Security, va boshqa chqur mavzular backend dasturchilar uchun juda muhim. Ularni bilish yaxshi, tushunib ishlata olish undanda yaxshiroq.
Deep Dive bo'limidan yana bir darsni ochib qo'ydim. Uni bepulga kursni sotib olmasdan ham ko'rishingiz va yangi bilmlar olishingiz mumkin.
Eng ko'p beriladigan savollarga javob sifatida:
Express Database kursi bir texnologiyaga va faqat SQL tiliga bog'liqligi yo'q. Bu kursda ma'lumotlar ombori (RDBMS) bo'yicha bilmlar ko'proq. Kurs har qanday darajaga to'g'ri keladi, ha 0dan o'rgatadi. Distributed System haqida ham tushunchalar yoritilgan, sabab arxitekturik qarorlarni to'g'ri qabul qila olishga o'rgatish.
Batafsil👉 42.uz/course/express-database/random-topics/
Deep Dive bo'limidan yana bir darsni ochib qo'ydim. Uni bepulga kursni sotib olmasdan ham ko'rishingiz va yangi bilmlar olishingiz mumkin.
Eng ko'p beriladigan savollarga javob sifatida:
Express Database kursi bir texnologiyaga va faqat SQL tiliga bog'liqligi yo'q. Bu kursda ma'lumotlar ombori (RDBMS) bo'yicha bilmlar ko'proq. Kurs har qanday darajaga to'g'ri keladi, ha 0dan o'rgatadi. Distributed System haqida ham tushunchalar yoritilgan, sabab arxitekturik qarorlarni to'g'ri qabul qila olishga o'rgatish.
Batafsil
Please open Telegram to view this post
VIEW IN TELEGRAM
👍28❤7🔥3
Lectures
Barcha ochiq ma'ruzalarimni videolarini shu yerda kuzatsangiz bo'ladi.
Batafsil👉 otabek.io/lectures
Barcha ochiq ma'ruzalarimni videolarini shu yerda kuzatsangiz bo'ladi.
Batafsil
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥44❤11👍9⚡2
Internet ortidagi mo'jizani o'zingiz tushunib, va o'rgangan bilmlar asosida ularni qayta ixtiroq qilishni istaysiz. Ammo qayerdan boshlashni bilmaysizmi?
- DNS query
- HTTP protokoli
- Xavfsiz va tezkor API
- Sniffing tool (hacking uchun)
- Speedbumper
- Proxy (Nginx ga o'xshagan)
- Ngrok (Tunneling service)
- Real-time tizimlar (oz resurs, ko'p connection)
- ... va h.k.z larni 0dan quramiz (kutubxonalarsiz)
Bu yerdan boshlasangiz bo'ladi: 42.uz/course/express-networking
Hacking va Security bo'limida o'rgatilgan barcha bilm va amaliyotlarni faqat yaxshi yo'lda sarflaysiz deb umid qilaman
- DNS query
- HTTP protokoli
- Xavfsiz va tezkor API
- Sniffing tool (hacking uchun)
- Speedbumper
- Proxy (Nginx ga o'xshagan)
- Ngrok (Tunneling service)
- Real-time tizimlar (oz resurs, ko'p connection)
- ... va h.k.z larni 0dan quramiz (kutubxonalarsiz)
Bu yerdan boshlasangiz bo'ladi: 42.uz/course/express-networking
3👍74🔥20❤13
Vohid aka bilan podkastda intervyu haqida gaplashgandik va F5 kompaniyasi intervyusidan yiqilib, Networking'ni N harfini bilmasligimni bilgandim deb aytgan edim. O'sha intervyudan juda ko'p (rostan ham ko'p) xulosa va tajriba olganman.
Express Networking kursida bular haqida bo'lishib borayabman. Sizga yana bir ajoyib mavzuni o'rgatib va F5 kompaniyasiga bo'lgan intervyudan yiqilganimdan olgan tajribamni bo'lishishga qaror qildim. Bu darsni ham bepul ko'rishingiz mumkin.
Bu darsda sizga nslookup va dig kabi dasturlarni RFC o'qib qurishni amaliy o'rgatib kod yozib berganman.
👉 42.uz/course/express-networking/udp-tezkor-kuryer
Express Networking kursida bular haqida bo'lishib borayabman. Sizga yana bir ajoyib mavzuni o'rgatib va F5 kompaniyasiga bo'lgan intervyudan yiqilganimdan olgan tajribamni bo'lishishga qaror qildim. Bu darsni ham bepul ko'rishingiz mumkin.
Bu darsda sizga nslookup va dig kabi dasturlarni RFC o'qib qurishni amaliy o'rgatib kod yozib berganman.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥27👍12❤9