Mundarija[Yashirish][Show]
Instagram Feed - bu siz uchun muhim bo'lgan odamlar va narsalar bilan almashish va bog'lanish uchun platforma. Instagram-ni ochganingizda yoki tasmangizni yangilaganingizda, biz sizni qiziqtirgan fotosuratlar va videolar tepada ko'rinadi.
Yangiliklar tasmasi - bu tizimdagi boshqa ob'ektlar tomonidan yaratilgan, siz o'qish uchun mo'ljallangan matn, rasm yoki videolarni o'z ichiga olgan elementlar to'plami. U har doim o'zgarib turadi, boshqa tashkilotlar esa yangi postlar tayyorlamoqda.
Ushbu postda biz Instagram tasmasining tizim dizaynini diqqat bilan ko'rib chiqamiz. Shunday ekan, boshlaylik.
1. Talablar
Funktsional zarurat
- Foydalanuvchining yangiliklar tasmasi foydalanuvchi kuzatgan yoki qiziqqan tizimdagi boshqa ob'ektlarning postlaridan yaratiladi.
- Matn, rasmlar va videolarning barchasini postlarda topish mumkin.
- Foydalanuvchining yangiliklar lentasi boshqalar tomonidan yaratilgan yangi xabarlar bilan yangilanishi kerak.
Funktsional bo'lmagan mezon
- Yangiliklar tasmasini yaratish real vaqt rejimida amalga oshirilishi kerak. Yakuniy foydalanuvchi faqat 12 soniya kechikishni boshdan kechirishi kerak.
- Yangi xabarni qo'shish: Yangi xabar tizimga yuborilgandan so'ng yangiliklar tasmasi so'rovida paydo bo'lishi uchun 5 soniyadan ko'proq vaqt ketishi kerak.
2. Imkoniyatlarni baholash
- 2021-yil mart holatiga ko‘ra, dunyo aholisi bor-yo‘g‘i 7.8 milliard kishini tashkil etadi. Bu shuni ko'rsatadiki, dunyo aholisining 21 foizi Facebook DAU (kunlik faol foydalanuvchi) va 32 foizi Facebook MAU (oylik faol foydalanuvchi) (oylik faol foydalanuvchi). Bu ajoyib.
- Tasavvur qilaylik, biz qurayotgan tizimda ishlarni osonlashtirish uchun 1 milliard DAU bor.
- Faraz qilaylik, bir kishi Facebookda 500 kishi yoki biznesni kuzatib boradi. Guruh yoki sahifa ob'ekt deb hisoblanishi mumkin.
Taxminiy trafik
Faraz qilaylik, bitta foydalanuvchi yangiliklar tasmasini kuniga o'rtacha 10 marta yuklab oladi. Shunday qilib, har kuni taxminan 116K QPS va 1e10 so'rovlar.
Saqlash taxminlari
Faraz qilaylik, biz har bir foydalanuvchining yangiliklar lentasidan oʻrtacha 500 ta postni tezkor olish uchun xotirada saqlab turamiz va har bir post hajmi 1KB. Shunday qilib, har bir foydalanuvchi uchun 500 KB, barcha DAU uchun 500 TB va har biri 5000 GB operativ xotiraga ega 100 kompyuter.
3. Tizimlar uchun API
userId (GUID): yangiliklar tasmasi olinayotgan foydalanuvchi.
Ixtiyoriy variantlar parametrida quyidagi maydonlar mavjud:
- afterPostId (GUID): bundan keyingi postdan yangiliklar tasmasini oling. Belgilanmagan bo'lsa, eng so'nggi xabarlarni oling.
- soni (raqam): har bir so'rov qaytara oladigan postlarning maksimal soni. Agar hech kim taqdim etilmagan bo'lsa, backend standart maksimal raqamni o'rnatadi.
- excludeReplies (mantiqiy): javoblarning yangiliklar lentasiga kiritilishini oldini oladi.
- Qaytarilgan JSON yangiliklar tasmalari roʻyxatini oʻz ichiga oladi.
4. Ma'lumotlar bazasini loyihalash
Korxonalar
- foydalanuvchi
- entityId, ism, tavsif va vaqt tamg'asi majburiy maydonlardir.
- Quyidagi maydonlar talab qilinadi: PostId, sarlavha, matn, muallif identifikatori va vaqt tamg‘asi.
- vaqt tamg'asi, url va mediaId
aloqalar
- Boshqa foydalanuvchilar yoki ob'ektlar foydalanuvchi tomonidan kuzatilishi mumkin. (m:n)
- Muallif-post: foydalanuvchilar ham, ob'ektlar ham xabarlar yaratishi mumkin. Oddiylik uchun faqat foydalanuvchilar xabarlar yaratishi mumkin deb hisoblang. (1:n; muallif identifikatori o'rnatilishi mumkin).
- Har bir xabar qandaydir ommaviy axborot vositalari bilan birga keladi. (1:n)
5. Yuqori darajadagi dizayn
arxitektura
Ish oqimi
Ozuqa ishlab chiqarish
Jey o'zining yangiliklar oqimini so'raganda, tizim quyidagilarni amalga oshiradi:
- Jey kuzatadigan barcha odamlar va narsalarning identifikatorlarini oling.
- Xabarlarni jamlash: ushbu identifikatorlarni hisobga olgan holda, eng so'nggi, ommabop va tegishli postlarni oling.
- Xabarlarni ularning ahamiyati va vaqtiga qarab tartiblang.
- Kesh: yaratilgan tasmalarni saqlang va Jeyga eng yaxshi 20 ta postni yuboring.
- Jey dastlabki 20 ta xabarni oʻqib boʻlgach, keyingi 20 ta xabarni olish uchun yana bir soʻrov yuboriladi.
Ozuqa taqsimoti
Tasavvur qiling, Jey Aayushni kuzatib bormoqda va Aayush har qanday yangi narsalarni joylashtiradi. Jeyning yangiliklar tasmasi tizim tomonidan yangilanishi kerak:
- Aayush izdoshlarining identifikatorlarini oling.
- Yangi maqolalar qo'shing: Aayushning postini o'sha identifikatorlar izdoshlarining yangiliklar tasmasi hovuziga qo'shing.
- Xabarlarni ularning ahamiyati va vaqtiga qarab tartiblang.
- Reyting postining keshini yangilang.
- Yangi xabarlar chop etilganda obunachilarga xabar berilishi kerak.
komponentlar
Foydalanuvchilarning ulanishlari veb-serverlar tomonidan ta'minlanadi.
Yuqorida ko'rsatilgan protseduralar dastur serveri tomonidan amalga oshiriladi.
Kesh va ma'lumotlar bazasi:
- Relyatsion ma'lumotlar bazasi foydalanuvchisi/ob'ekti
- Relyatsion ma'lumotlar bazasi (post)
- Rasm/video atributi: Aayush storge
- Relyatsion ma'lumotlar bazasi metama'lumotlari
Shaxsiylashtirilgan xizmatlar:
- Ozuqa ishlab chiqarish
- Tasmalar haqida xabar berish
6. Batafsil dizayn
Ozuqa ishlab chiqarish
Fan-out o'qish sodda amalga oshirish:
Ushbu beparvo amalga oshirish bilan bog'liq muammolarga quyidagilar kiradi:
- Ko'p sonli do'stlari/muxlislari bo'lgan foydalanuvchilar sezilarli sekinlashuvni sezishadi, chunki biz ko'p sonli xabarlarni saralashimiz, birlashtirishimiz va tartiblashimiz kerak.
- Foydalanuvchi o'z sahifasini yuklaganida, biz vaqt jadvalini tuzamiz. Bu sust bo'lishi va juda ko'p kechikishi mumkin.
- Har bir holat yangilanishi jonli yangilanishlar uchun barcha izdoshlar uchun tasma yangilanishiga olib keladi. Bu bizning Yangiliklar tasmasini yaratish xizmatida sezilarli kechikishlarga olib kelishi mumkin.
Biz samaradorlikni oshirish uchun xronologiyani oldindan yaratishimiz va uni xotirada saqlashimiz mumkin.
Oflayn ishlab chiqarish (Fan-out yozish)
Bizda doimiy ravishda foydalanuvchilarning yangiliklar tasmalarini yaratuvchi va xotirada saqlaydigan maxsus serverlar bo'lishi mumkin. Biz yangiliklar tasmasini foydalanuvchi xohlagan vaqtda oldindan yaratilgan, saqlangan joydan yetkazib berishimiz mumkin.
Foydalanuvchi tasmasi xotirada nechta tasma elementini saqlashi kerak?
Foydalanish xatti-harakatingizga qarab moslashtiring.
Barcha foydalanuvchilar uchun yangiliklar tasmasini yaratishimiz kerakmi (va uni xotirada saqlashimiz kerak)?
- Tez-tez kirmaydigan odamlar uchun.
- LRU-ga asoslangan keshlash oddiy yondashuvdir.
- Eng yaxshi yechim foydalanuvchilar qanday tizimga kirishini aniqlashdir. Qachon? Qaysi ish kunlari haqida gapiryapsiz?
Tasmani nashr qilish
Fanout - bu barcha izdoshlaringizga xabar yuborish jarayoni.
Fanout o'qish (tortish)
Yangiliklar tasmasini so'raganingizda, tizim o'qish so'rovini oladi. Fanout read barcha izdoshlaringizga oʻqish soʻrovini yuborib, ularning mazmunini oʻqishni soʻraydi.
Taroziga:
- Yozish tartibi arzon.
- Ma'lumotlarni o'qiyotganda, turli xil yig'ish algoritmlaridan foydalanish osonroq.
Kamchiliklari:
- Ko'p izdoshlari bo'lgan odam uchun o'qish operatsiyasi ancha qimmatga tushadi.
- Foydalanuvchilar yangi ma'lumotlarni tortib olmaguncha ko'rmaydilar.
- Biz muntazam ravishda eng so'nggi xabarlarni olish uchun tortganimizda, to'g'ri tortish kadansini topish qiyin va ko'pchilik tortishish so'rovlari bo'sh javob qaytaradi va resurslarni behuda sarflaydi.
Fanout yozish (surish)
Yangi xabar yuborganingizda tizimga yozish so'rovi yuboriladi. Yozish so'rovi fanout write yordamida yangiliklar tasmasini yangilash uchun barcha izdoshlaringizga yuboriladi.
Pro
- O'qish jarayoni arzon.
con
- Millionlab izdoshlari bo'lgan foydalanuvchi uchun yozish protsedura juda qimmat.
Tasma darajasi
Tasmalarni xronologik tartibda tartiblash o'rniga, bugungi reyting algoritmlari qo'shimcha ravishda muhimroq narsalarga ustuvorlik berilishini kafolatlashga harakat qiladi.
- Tasma elementining dolzarbligini aniqlashga yordam beradigan omillarni tanlang, masalan, yoqtirishlar, sharhlar va baham ko'rishlar soni, maqolada fotosuratlar yoki videolar bo'lsa, oxirgi marta yangilangan vaqt va hokazo.
- Xususiyatlarga qarab ballni hisoblang.
- Xabarlarni tartiblash uchun balldan foydalaning.
Bizning reyting tizimimiz qanchalik samarali ekanligini ko'rish uchun foydalanuvchini ushlab turish, reklama daromadi va boshqalar kabi KPIlarni o'rnating.
Xulosa
Instagram yoki uning asosiy biznesi Facebook katta korporatsiya bo'lishiga qaramay, u yaxshiroq tushunadi tizim dizayni.
Men sizga Instagram tasmasining yuqori darajadagi qisqacha mazmunini taqdim etish uchun bor kuchim bilan harakat qildim.
Umid qilamanki, bu foydali bo'ldi va siz undan yaxshi foydalanasiz.
Leave a Reply