Мазмұны[Жасыру][Көрсету]
Instagram арнасы - бұл адамдармен және сіз үшін маңызды нәрселермен бөлісуге және байланысуға арналған платформа. Instagram желісін ашқанда немесе арнаңызды жаңартқанда, сізді қызықтырады деп ойлайтын фотосуреттер мен бейнелер жоғарғы жағында көрсетіледі.
Жаңалықтар арнасы оқуға бағытталған жүйедегі басқа нысандар жасаған мәтінді, кескіндерді немесе бейнелерді қамтитын элементтер жиынтығы. Ол үнемі өзгеріп отырады, ал басқа ұйымдар жаңа посттар жасайды.
Бұл постта біз Instagram арнасының жүйелік дизайнын мұқият қарастырамыз. Сонымен, бастайық.
1. Талаптар
Функционалдық қажеттілік
- Пайдаланушының жаңалықтар арнасы пайдаланушы бақылаған немесе қызықтыратын жүйедегі басқа нысандардың жазбаларынан жасалады.
- Мәтінді, суреттерді және бейнелерді посттардан табуға болады.
- Пайдаланушының жаңалықтар арнасы басқалар жасаған жаңа хабарламалармен жаңартылуы керек.
Функционалды емес критерий
- Жаңалықтар арнасын құру нақты уақыт режимінде болуы керек. Түпкі пайдаланушы тек 12 секунд кешіктіруді сезінуі керек.
- Жаңа жазбаны қосу: жүйеге жіберілгеннен кейін жаңалықтар арнасының сұрауында жаңа жазбаның пайда болуы 5 секундтан аспауы керек.
2. Сыйымдылықты бағалау
- 2021 жылдың наурыз айындағы мәлімет бойынша, әлем халқының саны небәрі 7.8 миллиард адамды құрайды. Ол әлем халқының 21% Facebook DAU (күнделікті белсенді пайдаланушы) және 32% Facebook MAU (айлық белсенді пайдаланушы) (айлық белсенді пайдаланушы) екенін көрсетеді. Бұл таңқаларлық.
- Біз жасап жатқан жүйеде істерді жеңілдету үшін 1 миллиард DAU бар делік.
- Бір адам Facebook-те 500 адамды немесе бизнесті бақылайды делік. Топ немесе бет нысан ретінде қарастырылуы мүмкін.
Болжалды трафик
Бір пайдаланушы жаңалықтар арнасын күніне орта есеппен 10 рет жүктеп алады делік. Осылайша, бұл күніне шамамен 116K QPS және 1e10 сұрау.
Сақтау бағасы
Жылдам алу үшін біз жадта әрбір пайдаланушының жаңалықтар арнасынан орташа есеппен 500 жазбаны сақтаймыз делік және әрбір жазбаның өлшемі 1 КБ. Осылайша, әр пайдаланушыға 500 КБ, барлық DAU үшін 500 ТБ және әрқайсысында 5000 ГБ жедел жады бар 100 компьютер.
3. Жүйелер үшін API интерфейстері
userId (GUID): жаңалықтар арнасы алынатын пайдаланушы.
Қосымша опциялар параметрінде келесі өрістер қолжетімді:
- afterPostId (GUID): осыдан кейінгі посттан жаңалықтар арнасын алыңыз. Көрсетілмеген болса, ең соңғы жазбаларды алыңыз.
- count (сан): әрбір сұрау қайтара алатын жазбалардың ең көп саны. Егер ешқайсысы берілмесе, сервер әдепкі ең көп санды орнатады.
- excludeReplies (логикалық): жауаптардың жаңалықтар арнасына қосылуын болдырмайды.
- Қайтарылған JSON жаңалықтар арнасының элементтерінің тізімін қамтиды.
4. Мәліметтер қорын жобалау
Заңды тұлғалар
- пайдаланушы
- entityId, атау, сипаттама және уақыт белгісі міндетті өрістер болып табылады.
- Келесі өрістер қажет: PostId, тақырып, мәтін, автор идентификаторы және уақыт белгісі.
- уақыт белгісі, url және mediaId
Қарым-қатынас
- Басқа пайдаланушыларды немесе нысандарды пайдаланушы бақылай алады. (м:н)
- Автор-пост: пайдаланушылар да, нысандар да жазбалар жасай алады. Қарапайымдылық үшін тек Пайдаланушылар хабарламалар жасай алады делік. (1:n; автор идентификаторы ендіріледі).
- Әрбір хабарлама қандай да бір ақпарат құралдарымен бірге жүреді. (1:n)
5. Жоғары деңгейлі дизайн
сәулет
Жұмыс үрдістері
Жем өндірісі
Джей жаңалықтар ағынын сұрағанда, жүйе келесі әрекеттерді орындайды:
- Джей бақылайтын барлық адамдардың және заттардың идентификаторларын шығарып алыңыз.
- Жиынтық жазбалар: сол идентификаторларды ескере отырып, ең соңғы, танымал және сәйкес жазбаларды алыңыз.
- Жазбаларды өзектілігі мен уақытына қарай бағалаңыз.
- Кэш: жасалған арналарды сақтаңыз және Джейге ең жақсы 20 хабарлама жіберіңіз.
- Джей алғашқы 20 жазбаны оқып болған кезде, келесі 20 жазбаны алу үшін тағы бір сұрау жіберіледі.
Жем тарату
Джей Аюштың соңынан еріп жүр және Аюш жаңа нәрсе жариялайды делік. Джейдің жаңалықтар арнасын жүйе жаңартуы керек:
- Аюуштың ізбасарларының жеке куәліктерін алыңыз.
- Жаңа мақалалар қосу: Айуштың жазбасын сол идентификаторлардың жазылушылардың жаңалықтар арнасы пулына қосыңыз.
- Жазбаларды өзектілігі мен уақытына қарай бағалаңыз.
- Рейтинг жазбасының кэшін жаңартыңыз.
- Жаңа хабарламалар жарияланған кезде жазылушыларға хабарлау керек.
компоненттері
Пайдаланушылардың қосылымдары веб-серверлер арқылы жүзеге асырылады.
Жоғарыда көрсетілген процедураларды қолданба сервері орындайды.
Кэш және дерекқор:
- Реляциялық дерекқор пайдаланушысы/объектісі
- Реляциялық деректер қоры (пост)
- Сурет/бейне атрибуты: Aayush Storge
- Реляциялық дерекқордың метадеректері
Жеке қызметтер:
- Жем өндірісі
- Арналар туралы хабарландыру
6. Егжей-тегжейлі дизайн
Азық генерациясы
Фан-аут оқылатын аңғал іске асыру:
Бұл немқұрайлы іске асыруға байланысты мәселелер мыналарды қамтиды:
- Достары/ізбасарлары көп пайдаланушылар айтарлықтай баяулауды байқайды, өйткені біз көптеген хабарларды електен өткізіп, біріктіріп, дәрежелеуіміз керек.
- Пайдаланушы өз бетін жүктегенде, біз уақыт шкаласын құрастырамыз. Бұл баяу және көп кідіріс болуы мүмкін.
- Әрбір күй жаңартуы тікелей жаңартулар үшін барлық жазылушылар үшін арна жаңартуларына әкеледі. Бұл біздің жаңалықтар арнасын құру қызметінде айтарлықтай кідірістерге әкелуі мүмкін.
Тиімділікті арттыру үшін хронологияны алдын ала жасап, оны жадта сақтай аламыз.
Офлайн өндіріс (Fan-out жазу)
Бізде пайдаланушылардың жаңалықтар арналарын жадта үнемі жасайтын және сақтайтын арнайы серверлер болуы мүмкін. Біз жаңалықтар арнасын пайдаланушы қалаған кезде алдын ала жасалған, сақталған орыннан ғана жеткізе аламыз.
Пайдаланушының арнасы жадта қанша арна элементі сақталуы керек?
Пайдалану мінез-құлқыңызға қарай бейімделіңіз.
Біз барлық пайдаланушылар үшін жаңалықтар арнасын жасауымыз керек пе (және оны жадта сақтау)?
- Жүйеге жиі кірмейтін адамдар үшін.
- LRU негізіндегі кэштеу қарапайым тәсіл болып табылады.
- Ең жақсы шешім - пайдаланушылардың жүйеге қалай кіретінін анықтау. Бұл қашан? Сіз қандай жұмыс күндері туралы айтып отырсыз?
Таспаның жариялануы
Fanout - бұл сіздің барлық жазылушыларыңызға хабарлама жіберу процесі.
Фанут оқу (тарту)
Жаңалықтар арнасын сұраған кезде жүйе оқу сұрауын алады. Fanout read барлық жазылушыларыңызға мазмұнды оқуды сұрайтын оқу сұрауын жібереді.
артықшылықтары:
- Жазу процедурасы арзан.
- Деректерді оқу кезінде әртүрлі біріктіру алгоритмдерін пайдалану оңайырақ.
Минус:
- Көп ізбасарлары бар адам үшін оқу операциясы біршама қымбатқа түседі.
- Пайдаланушылар жаңа деректерді тартпайынша көрмейді.
- Ең соңғы хабарларды тұрақты түрде алу үшін тартқанда, дұрыс тарту каденциясын табу қиынға соғады және тарту сұрауларының көпшілігі бос жауап қайтарып, ресурстарды ысырап етеді.
Фанут жазу(басу)
Жаңа хабарлама жіберген кезде жүйеге жазу сұрауы жасалады. Жазу сұрауы барлық ізбасарларыңызға fanout write арқылы жаңалықтар арнасын жаңарту үшін жіберіледі.
Pro
- Оқу процесі арзан.
Con
- Миллиондаған ізбасарлары бар пайдаланушы үшін жазу процедура тым қымбат.
Арнаның дәрежесі
Арналарға хронологиялық ретпен тапсырыс берудің орнына, бүгінгі рейтинг алгоритмдері қосымша маңыздырақ элементтерге басымдық берілгеніне кепілдік беруге тырысады.
- Арна элементінің сәйкестігін анықтауға көмектесетін факторларды таңдаңыз, мысалы, ұнатулар, пікірлер және бөлісулер саны, мақалада фотосуреттер немесе бейнелер болса, элементтің соңғы жаңартылған уақыты және т.б.
- Сипаттамалар негізінде ұпайды есептеңіз.
- Жазбаларды бағалау үшін ұпайды пайдаланыңыз.
Біздің рейтингтік жүйеміздің қаншалықты тиімді екенін көру үшін пайдаланушыны ұстап тұру, жарнамадан түскен табыс және т.б. сияқты KPI параметрлерін орнатыңыз.
қорытынды
Instagram немесе оның негізгі бизнесі Facebook үлкен корпорация болғанына қарамастан, ол жақсырақ түсінеді жүйелік дизайн.
Мен сізге Instagram арнасының жоғары деңгейдегі қысқаша мазмұнын ұсынуға тырыстым.
Бұл пайдалы болды және сіз оны жақсы пайдаланасыз деп үміттенемін.
пікір қалдыру