Мазмұны[Жасыру][Көрсету]
WhatsApp - пайдаланушыларға бір-бірімен хабарлама алмасуға мүмкіндік беретін әлеуметтік хабар алмасу бағдарламасы.
WhatsApp қалай жұмыс істейтінін ойлап көрдіңіз бе?
Оның құрылуы мен жұмыс істеуіне негіз болатын қандай ұғымдар бар?
Бұл мақала WhatsApp негіздерін қарастырады жүйелік дизайн.
Біз сондай-ақ кез келген чат бағдарламалық құралын құру үшін қолданылатын WhatsApp-тың жалпы архитектурасын қарастырамыз.
Олай болса, көп ұзамай WhatsApp жүйесінің дизайнын қарастырайық!
1. Негізгі талаптар
WhatsApp - бүкіл әлемде көптеген адамдар пайдаланатын ауқымды технология. Нәтижесінде, ол іс жүзінде әрқашан сенімді және жұмыс істейтін етіп жақсы жобаланған болуы керек.
Нәтижесінде жүйенің маңызды қажеттіліктерін анықтау өте маңызды.
Бұл WhatsApp мессенджеріне қойылатын минималды талаптар:
- Бір-бірден өзара әрекеттесуді жеңілдетуге қабілетті.
- Хабарды растау және соңғы рет көру мүмкіндігі де мүмкін (Жіберілді, жеткізілді және оқылды).
- Үшті шифрлауға және медианы қолдауға рұқсат беріңіз (суреттер/бейнелер).
Біздің қажетті қызметімізге қанша сыйымдылық қажет екенін білейік.
2. Сыйымдылықты бағалау
Біздің мақсатымыз - үлкен көлемдегі трафикті өңдеуге қабілетті платформа жасау. Күніне 10 миллиард SMS жіберіледі делік. Бізде бар:
- Күн сайын бір миллиард адам 10 миллиард SMS жібереді.
- Трафиктің шыңында (секундына) 700,000 6 адам белсенді болды (орташа есеппен XNUMXX)
- Ең жоғары пайдалану кезінде секундына 40 миллион хабарлама жіберіледі.
- Хабарламаның орташа ұзындығы 160 таңбаны құрайды: 10В * 160 = 1.6 ТБ деректер күн сайын жасалады.
- Мысал ретінде он жылдық қызметті алайық: 10 * 1.6B * 365 PB
- Бүкіл қолданба микросервистерден тұрады, олардың әрқайсысы арнайы тапсырманы орындайды. Хабарламаны жіберу 20 миллисекундты алады және әр серверде 100 қатарлас қосылым бар деп есептейік. Нәтижесінде қажетті чат серверлерінің болжамды саны = (секундына сөйлесу хабарларының кешігуі)/ бір серверге бір мезгілде қосылулар = 40M * 20ms / 100 = 8000 сервер.
3. Жоғары деңгейдегі архитектура
Бұл жүйе екі негізгі қызметке негізделген. Мысалы, чат қызметі және өтпелі қызмет. Сөйлесу қызметі пайдаланушылардың онлайн хабарламалары арқылы жасалған барлық трафикті өңдейді. Бір уақытта уақытша қызмет пайдаланушы желіден тыс кезде трафикті өңдейді.
Пайдаланушы желіде болса, чат қызметі хабарларды жеткізуге жауапты.
Ол хабарламаны алушының желіде екенін немесе жоқтығын тексереді; егер алушы желіде болса, бұл қызмет хабарламаны дереу жеткізеді; егер алушы желіде болмаса, өтпелі қызмет олар желіге оралған кезде хабарды жібереді.
Өтпелі қызмет желіден тыс пайдаланушы қайта қосылғанға дейін уақытша қол жетімді деректерді сақтау үшін бөлек сақтау аймағын сақтайды.
Жоғары деңгейлі API интерфейстерін жобалау
Бұл қызметте хабарларды жіберу және оқу үшін екі жоғары деңгейлі жұмыс істейтін API бар. Жүйені REST архитектурасы арқылы жүзеге асыруға болады.
Хабарламаларды жіберу параметрлері
Бұл API екі пайдаланушы арасында хабарларды жіберу үшін пайдаланылады.
Әңгімелесу параметрлері
Бұл API ағынды чаттарды көрсету үшін пайдаланылады. Бұл WhatsApp-ты ашқанда бірінші көретін нәрсе деп есептеңіз. Бір API сұрауында бір пайдаланушы үшін бірнеше хабарды ғана алғымыз келеді. Мұны өңдеу үшін ығысу және хабарлар саны параметрлері қажет.
Соңғы рет көру, жалғыз белгі және қос белгі сияқты функциялардың функциялары қандай?
Бұл қызметтерді енгізудегі маңызды рөл растау қызметі болып табылады. Бұл мүмкіндіктер бұл қызмет растау жауаптарын жасауды және тексеруді жалғастыратындықтан әзірленді.
- Бір кене: А пайдаланушысының хабары B пайдаланушысына жеткенде, сервер хабардың жіберілгенін растайтын бір белгі жібереді.
- Қос белгі: Сервер хабары тиісті қосылым арқылы B пайдаланушысына жіберілгеннен кейін, B пайдаланушысы серверге хабарламаны алғанын растайды. Содан кейін сервер A пайдаланушысына басқа растауды береді. Нәтижесінде қайталанатын белгі пайда болады.
- Көк кене: B пайдаланушысы хабарламаны тексергеннен кейін серверге тағы бір растау жібереді. Содан кейін сервер A пайдаланушысына қосымша растау хабарын жібереді. Осыдан кейін А пайдаланушысының экранында көк белгі пайда болады.
- Соңғы көру: Жүрек соғу механизмі соңғы көрген мүмкіндікке толығымен жауап береді. Әрбір 5 секунд сайын жүрек соғысы серверге жіберіледі, ол кез келген басқа пайдаланушы оңай қол жеткізе алатын кестеде әрбір пайдаланушының соңғы көрген күйін қадағалайды.
4. Негізгі мүмкіндіктерді жобалау
Жекеленген өзара әрекеттесу
Бұл чат қызметінің қажетті бөлігі. Пайдаланушы осы қызметті пайдаланып басқа пайдаланушыға жай ғана хабарлама жібере алады. Мұның қалай жұмыс істейтінін қарастырайық:
Джей Аюушпен сөйлескісі келеді делік. Джей хабарды алатын чат серверіне қосылған. Джей чат серверінен хабардың жіберілгенін растайды. Чат сервері қазір деректер қоймасынан Aayush қосылған чат сервері туралы ақпаратты сұрауда. Джейдің чат сервері енді хабарды Аайуштың чат серверіне жібереді, ал Аайуш хабарламаны push механизмі арқылы алады. Аайуш енді Джейдің чат серверіне растау жібереді, ол Джейге хабарламаның жеткізілгенін хабарлайды. Егер Аюуш хабарламаны қайта оқыса, Джейге хабарламаның оқылғаны туралы жаңа растау жеткізілді.
Пайдаланушы әрекетінің күйі
Адамның соңғы рет белсенді болғаны - жедел хабар алмасушылардың тұрақты мүмкіндігі.
Клиент пен сервер арасындағы байланысты қамтамасыз ету жүйесі осы диаграммада бейнеленген. Веб-розеткалар сервер мен клиент арасында екі жақты байланыс орнату үшін пайдаланылды. Бұл қосылымдар пайдаланушының әрекет күйін бақылау үшін пайдаланылатын жүрек соғуларын жібереді.
Құпиялылық
Үздіксіз шифрлау тек сөйлесуші пайдаланушылардың хабарламаларды оқи алатынын қамтамасыз ететін негізгі мүмкіндік болып табылады. Ашық кілт байланысқа қатысатын барлық пайдаланушылар арасында ортақ пайдаланылады және End-to-End шифрлауды қолдау үшін маңызды. Арнада бір-бірімен байланысатын Jay және Aayush деген екі қолданушы бар делік.
Джейде Аайуштың ашық кілті бар, ал Аайушта Джейдің ашық кілті, сондай-ақ олардың ортақ емес жеке кілті бар. Нәтижесінде Джей хабарламаны жіберген кезде оны Аайуштың ашық кілтімен шифрлайды, оны тек Аайуштың жеке кілтімен дешифрлеуге болады.
Сол сияқты, Джей тек Аюуштың байланысын шеше алады. Нәтижесінде тек Джей мен Айсух бір-бірінің байланыстарын көре алады, ал сервер бүкіл процесте шлюз ретінде ғана жұмыс істейтін болады.
5. Кедергілер
Кез келген жүйе дұрыс жұмыс істемеуі мүмкін. Мұндай үлкен көлемдегі трафикті басқару үшін қызмет кедергілерді болдырмау үшін әрқашан жұмыс істеп тұруы және ақауларға төзімді болуы керек. Біздің қызмет толығымен Chat және Transient серверлеріне тәуелді болғандықтан, біз олардың жұмысынан туындайтын барлық мәселелерді шешуіміз керек.
Чат серверінің сәтсіздігі: Бұл біздің жүйенің жүрегі. Пайдаланушылар желіде болғанда, ол хабарларды басқаруға және жеткізуге жауапты. Нәтижесінде бұл жүйе өз пайдаланушыларымен байланысын сақтайды.
Нәтижесінде бұл қызмет сәтсіз болса, бүкіл архитектура зардап шегеді. Сөйлесу серверінің сәтсіздігін басқарудың екі жолы бар. Бір әдіс TCP қосылымдарын басқа серверге ауыстыру болса, екіншісі қосылым жоғалған жағдайда пайдаланушыларға қосылымдарды автоматты түрде бастауға мүмкіндік береді.
Өтпелі сақтаудың сәтсіздігі: Бүкіл қызметті зақымдауы мүмкін сәтсіздікке бейім басқа құрамдас - өтпелі жад. Бұл қызмет сәтсіз болса, желіден тыс пайдаланушыларға жіберілетін хабарлар жоғалады.
Әрбір пайдаланушының уақытша жадын қайталау арқылы хабардың жоғалуын болдырмай аламыз. Нәтижесінде репликаны пайдаланушы желіге оралған сайын функцияларды өңдеу үшін пайдалануға болады. Түпнұсқа сервер қол жетімді болса, пайдаланушының өтпелі жадының түпнұсқа және көшірме даналары бір қоймаға біріктіріледі.
6. Оңтайландыру әдістері
Кідіріс: Үздіксіз және жақсартылған клиент тәжірибесін жеткізу үшін хабар алмасу қызметі нақты уақытта болуы керек. Нәтижесінде, жиі қатынасатын деректердің бір бөлігін кэштеу арқылы кідіріс азайтылуы керек. Біз Redis сияқты таратылған кэшті пайдаланып жадтағы пайдаланушы әрекетінің күйін және соңғы сөйлесулерді кэштей аламыз.
болуы: Бізге қызмет көп жағдайда қолжетімді болуы керек. Біздің жүйе ақауларға төзімді болуы керек, осылайша біз жоғалған хабарды оның көшірмелерінен тез қалпына келтіру үшін өтпелі хабарлардың бірнеше көшірмелерін сақтай аламыз. Нәтижесінде жүйенің қолжетімділігіне қауіп төнуі мүмкін емес.
қорытынды
Біздің жүйе қазір бірнеше мүмкіндіктерді ғана қолдайды, бірақ хабарларды бірнеше адамға тарату үшін топтық чаттар қосу үшін оны оңай кеңейте аламыз. Сондай-ақ бейне және телефон қоңырауы мүмкіндіктерін қамтамасыз ете аласыз. Бұл жүйені пайдаланушылар күй жаңартуларын немесе әңгімелерді жариялайтын және бір-бірін оқи алатындай етіп жасауға болады.
Мен сізге WhatsApp жүйесінің дизайны туралы жоғары деңгейлі шолуды ұсыну үшін көп жұмыс жасадым. Сізге ұнады және оны жақсы пайдаланасыз деп үміттенемін.
пікір қалдыру