TGViewer
Dr. Algorithm Dr. Algorithm @dralgorithm · 4.59K subscribers
Post #536 504

Forwarded from Jakhongir Rakhmonov - IT

Nega Discord loyihasi Go tilida yozilgan servisni Rustda qayta yozib chiqdi

Discordni 614 millionga yaqin foydalanuvchi ishlatadi. Ulardan 200 milliontasi aktiv tarzda ishlatadi. Hazillashadigan raqamlar emas.

Xullas shu Discordda har bir foydalanuvchi qaysi kanallarni va qaysi xabarlarni o‘qiganini o‘zida saqlab turadigan “Read Service” degan servisi bor. Kimdirlar buni microservice deb atashlari mumkin. Bu degani, har safar Discordga kirganingizda, har safar xabar yuborilganda va o‘qilganda ishlatiladigan service. Ya’ni eng ko‘p ishlatiladigan servicelardan biri. Gap millionlab requestlar haqida ketyapti. Va bu service Go tilida yozilgan ekan.

Boshida hammasi yaxshi bo‘lgan, lekin vaqt o‘tib har bir necha daqiqada ushbu service qisqa vaqtga sekinlashib qolishni boshlagan: latency va CPUlarda o‘sish kuzatilgan. Discord jamoasi bu sekinlashish “Garbage Collection”ni deb bo‘layotganini aniqlagan. O‘zi Garbage Collection (ahlat tozalash) nima?

Sizning dasturingiz kompyuter xotirasidan foydalanadi. Aytaylik bitta o‘zgaruvchi yaratib shu o‘zgaruvchida ismingizni saqlasangiz shu ma’lumot xotiraga yoziladi. Dasturingiz bu ma’lumotdan foydalanib bo‘lgandan so‘ng kompyuter xotirasidan uni o‘chirib tashlash kerak. Agar shu tarzda tez-tez tozalanib turmasa xotirada joy qolmaydi va tabiiyki hech nima ishlamay qoladi.

Go tilida bu ish avtomatik tarzda bajariladi. Taxminan har ~2 daqiqada Go tili xotiradagi har bir ma’lumotni tekshirib chiqadi. “Sen hali ham ishlatilyapsanmi?” deb so‘raydi. “Ha, men hali ham dasturga kerakman” desa, “Bo‘pti, qolaver. Propiskangni uzaytiraman” deydi. “Yo‘q, meni ishlatib bo‘ldi dastur. 2 daqiqadan beri ishsiz o‘tiribman” desa, “Unda senga rahmat, ketaver qishlog‘ingga“ deb u ma’lumotni o‘chirib tashlaydi.

Ana endi eslang. “Read Service” ni millionlab foydalanuvchi ishlatadi va har bir foydalanuvchi uchun ko‘plab ma’lumot saqlanadi. Undan tashqari bu service juda ham aktiv, har sekundda millionlab request keladi. Ya’ni, tozalash kerak bo‘lishi mumkin bo‘lgan ma’lumot juda juda ko‘p. Garbage Collector hammasini har 2 daqiqada tekshirib chiqish uchun yaxshigina kuch va vaqt sarflaydi. Natijada dastur sekinlashadi. Garbage Collectionni esa o‘chirib qo‘yib bo‘lmaydi. Unda Go tili ishlamay qolgan bo‘lar edi.

Ana endi Rustni eslaymiz. Rust tilida Garbage Collection umuman yo‘q. Xotirani u boshqa usulda boshqaradi. Xotiradagi ma’lumot ishlatib bo‘lishiga darhol uni o‘chirib tashlaydi. 2 daqiqa kutib o‘tirmaydi. Natijada tozalash uchun Go kabi ko‘p kuch va vaqt sarflamaydi.

Shuning uchun ham Discord “Read Service” ni Rust tilida qayta yozib chiqqan va zo‘r natijalarga erishgan. Tezlikdan tashqari, ularning aytishi bo‘yicha kodning o‘zi ham ancha osonlashgan. Sababi qiyin asinxron kodni Rustda Go tiliga solishtirgan yozish ancha osonroq.

“Go baribir top” deb yozishni boshlaydiganlar uchun eslatib o‘tay. Hech kim Rustni Godan ko‘ra ustunroq demayapti. Shunchaki Discord uchun va aynan ushbu service uchun Rust ko‘proq to‘g‘ri kelgan.

Manba: https://discord.com/blog/why-discord-is-switching-from-go-to-rust

📱 @jakhonrakhmonov   🤝 Muallifni qo‘llab-quvvatlash
  • 🔥 8
  • 👍 6
More from @dralgorithm
  1. Sep 7, 2026Akalar bilan uchrashuv 😎 O‘tgan hafta Saidolim aka dasturchi akalar yig‘ilishiga taklif q…
  2. Sep 7, 2026photo post
  3. Sep 4, 2026Maktab + SI + Rasm Bugun farzandim maktabidan maktub oldim. Ajablantirgani uchun bu haqida…
  4. Sep 1, 2026Vatanimiz Mustaqilligining 35 yilligi muborak bo‘lsin. Yurtimiz doim barakali, rivojlangan…
  5. Aug 29, 2026Jet lag va 15 daqiqa qoidasi Samolyot Toshkentga qo‘ndi, "Home, sweet home!" deb uyga kird…
  6. Aug 28, 2026Zamon sizniki Hafta ajoyib oʻtdi. 20 yil koʻrishmagan tanishlarim bilan koʻrishdim. Bir va…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →