Բառը[Թաքցնել][Ցուցադրում]
WhatsApp-ը սոցիալական հաղորդագրությունների ծրագիր է, որը թույլ է տալիս օգտատերերին հաղորդագրություններ փոխանակել միմյանց հետ:
Երբևէ մտածե՞լ եք, թե ինչպես է աշխատում WhatsApp-ը:
Որո՞նք են դրա ստեղծման և գործունեության հիմքում ընկած հասկացությունները:
Այս հոդվածը կանդրադառնա WhatsApp-ի հիմունքներին համակարգի նախագծում.
Մենք նաև կանցնենք WhatsApp-ի ընդհանուր ճարտարապետությանը, որը կարող է օգտագործվել ցանկացած տեսակի զրույցի ծրագրակազմ ստեղծելու համար:
Այսպիսով, առանց ավելորդ անհանգստության, եկեք տեսնենք WhatsApp-ի համակարգի դիզայնը:
1. Հիմնական պահանջներ
WhatsApp-ը մեծ մասշտաբային տեխնոլոգիա է, որն օգտագործվում է բազմաթիվ մարդկանց կողմից ամբողջ աշխարհում: Արդյունքում, այն պետք է լավ նախագծված լինի, որպեսզի գործնականում միշտ հուսալի լինի և գործի:
Արդյունքում, համակարգի կարևոր կարիքների որոշումը կարևոր է:
WhatsApp մեսենջերի համար նվազագույն պահանջներն են.
- Կարող է հեշտացնել մեկ առ մեկ փոխգործակցությունը:
- Հաղորդագրության հաստատումը և վերջին անգամ տեսածը հնարավոր են (Ուղարկված, Առաքված և Կարդացված):
- Թույլատրել ծայրից ծայր կոդավորումը և մեդիա աջակցությունը (պատկերներ/տեսանյութեր):
Եկեք պարզենք, թե որքան հզորություն է պահանջում մեր անհրաժեշտ ծառայությունը։
2. Կարողությունների գնահատում
Մեր նպատակն է ստեղծել հարթակ, որը կարող է կառավարել մեծ քանակությամբ տրաֆիկ: Ենթադրենք, որ օրական 10 միլիարդ SMS է ուղարկվում։ Մենք ունենք՝
- Ամեն օր մեկ միլիարդ մարդ ուղարկում է 10 միլիարդ SMS:
- Երթևեկության գագաթնակետին (վայրկյանում) ակտիվ էր 700,000 մարդ (միջինը 6X)
- Պիկ օգտագործման ժամանակ վայրկյանում 40 միլիոն հաղորդագրություն է փոխանցվում:
- Հաղորդագրության միջին երկարությունը 160 նիշ է. ամեն օր ստեղծվում է 10B * 160 = 1.6 ՏԲ տվյալ:
- Վերցրեք տասը տարվա ծառայության օրինակ՝ 10 * 1.6B * 365 PB
- Ամբողջ հավելվածը կազմված կլինի միկրոծառայություններից, որոնցից յուրաքանչյուրը կկատարի մասնագիտացված առաջադրանք։ Ենթադրենք, որ հաղորդագրություն ուղարկելը տևում է 20 միլիվայրկյան, և որ յուրաքանչյուր սերվերի համար կա 100 միաժամանակյա կապ: Արդյունքում պահանջվող զրույցի սերվերների ակնկալվող քանակը = (զրույցի հաղորդագրություններ մեկ վայրկյանում ուշացում)/ միաժամանակյա միացումներ մեկ սերվերի համար = 40M * 20ms / 100 = 8000 սերվեր:
3. Բարձր մակարդակի ճարտարապետություն
Այս համակարգը կառուցված է երկու հիմնական ծառայությունների վրա. Զրույցի ծառայություն և անցողիկ ծառայություն, օրինակ: Զրուցարանային ծառայությունը կարգավորում է օգտատերերի առցանց հաղորդագրությունների արդյունքում առաջացած ամբողջ տրաֆիկը: Միաժամանակ, ժամանակավոր ծառայությունը կարգավորում է տրաֆիկը, երբ օգտատերը ցանցից դուրս է:
Եթե օգտատերը առցանց է, ապա չաթի ծառայությունը պատասխանատու է հաղորդագրությունների առաքման համար:
Այն կստուգի, արդյոք հաղորդագրության ստացողը առցանց է, թե ոչ. եթե ստացողը առցանց է, այս ծառայությունն անմիջապես կառաքի հաղորդագրությունը. եթե ստացողը առցանց չէ, անցողիկ ծառայությունը հաղորդագրություն կուղարկի նրան, երբ նրանք վերադառնան առցանց:
Անցումային ծառայությունը պահում է առանձին պահեստային տարածք՝ ժամանակավորապես հասանելի տվյալների պահպանման համար, մինչև անցանց օգտատերը նորից միանա:
Բարձր մակարդակի API-ների նախագծում
Այս ծառայությունն ունի երկու բարձր մակարդակի գործող API՝ հաղորդագրություններ ուղարկելու և կարդալու համար: Համակարգը կարող է իրականացվել REST ճարտարապետության միջոցով:
Հաղորդագրություններ ուղարկելու պարամետրեր
Այս API-ն կօգտագործվի երկու օգտատերերի միջև հաղորդագրություններ փոխանցելու համար:
Զրույցի պարամետրեր
Այս API-ն օգտագործվում է շղթայական զրույցները ցուցադրելու համար: Համարեք սա առաջին բանը, որ տեսնում եք WhatsApp-ը բացելիս: Մենք կցանկանայինք միայն մի քանի հաղորդագրություն ստանալ մեկ օգտվողի համար մեկ API հարցումով: Դա կարգավորելու համար անհրաժեշտ են օֆսեթ և հաղորդագրությունների քանակի պարամետրերը:
Որո՞նք են այնպիսի հատկանիշների գործառույթները, ինչպիսիք են վերջին անգամ տեսածը, մեկ տիզը և կրկնակի տիզը:
Այս ծառայությունների տեղակայման գործում կարևոր դերը ճանաչման ծառայությունն է: Այս հատկանիշները մշակվել են, քանի որ այս ծառայությունը շարունակում է ստեղծել և ստուգել ճանաչման պատասխանները:
- Մեկ տիզԵրբ A Օգտվողի հաղորդագրությունը հասնում է Օգտատիրոջ B-ին, սերվերը ուղարկում է մեկ նշան՝ հաստատելով, որ հաղորդագրությունը փոխանցվել է:
- Կրկնակի տիզԱյն բանից հետո, երբ սերվերի հաղորդագրությունն ուղարկվի Օգտատիրոջ B-ին պատշաճ կապի միջոցով, օգտվող B-ն կհաստատի հաղորդագրության ստացումը սերվերին: Այնուհետև սերվերը օգտվողին կտրամադրի մեկ այլ հաստատում: Արդյունքում կհայտնվի կրկնօրինակ տիզ:
- Կապույտ տիզՕգտատեր B-ն հաղորդագրությունը ստուգելուց հետո սերվերին կուղարկի ևս մեկ հաստատում: Այնուհետև սերվերը Օգտատիրոջ Ա-ին կուղարկի լրացուցիչ հաստատման հաղորդագրություն: Դրանից հետո Ա օգտատիրոջ էկրանին կհայտնվի կապույտ նշան:
- Վերջին անգամ տեսել էՍրտի զարկերի մեխանիզմն ամբողջությամբ պատասխանատու է վերջին տեսած հատկանիշի համար: Յուրաքանչյուր 5 վայրկյանը մեկ սրտի բաբախյունը փոխանցվում է սերվերին, որը հետևում է յուրաքանչյուր օգտատիրոջ վերջին տեսած կարգավիճակին աղյուսակում, որը կարող է հեշտությամբ մուտք գործել ցանկացած այլ օգտվող:
4. Հիմնական հատկանիշների նախագծում
Անհատականացված փոխազդեցություն
Սա Chat ծառայության անհրաժեշտ մասն է: Օգտագործողը կարող է պարզապես հաղորդագրություններ ուղարկել մեկ այլ օգտատիրոջ՝ օգտագործելով այս ծառայությունը: Եկեք նայենք, թե ինչպես է սա աշխատում.
Ենթադրենք, որ Ջեյը ցանկանում է շփվել Աայուշի հետ: Ջեյը կապված է չաթի սերվերի հետ, որով նա ստանում է հաղորդագրությունը: Ջեյը չաթի սերվերից հաստատում է ստանում, որ հաղորդագրությունն ուղարկվել է: Զրույցի սերվերն այժմ տվյալների պահեստից տեղեկատվություն է խնդրում չաթի սերվերի մասին, որին միացված է Աայուշը: Ջեյի չաթ սերվերն այժմ հաղորդագրությունը փոխանցում է Աայուշի չաթ սերվերին, իսկ Աայուշը հաղորդագրությունը ստանում է push մեխանիզմի միջոցով: Այժմ Աայուշը հաստատում է ուղարկում Ջեյի չաթի սերվերին, որը տեղեկացնում է Ջեյին, որ հաղորդագրությունն առաքվել է: Եթե Աայուշը նորից կարդում էր հաղորդագրությունը, Ջեյին ուղարկվում էր նոր հաստատում, որ հաղորդագրությունը կարդացվել է:
Օգտագործողի գործունեության կարգավիճակը
Վերջին անգամ, երբ մարդը ակտիվ է եղել, ակնթարթային մեսենջերների սովորական հատկանիշն է:
Հաճախորդի և սերվերի միջև կապի պահպանման համակարգ պատկերված է այս դիագրամում: Վեբ վարդակներն օգտագործվել են սերվերի և հաճախորդի միջև երկկողմանի կապ հաստատելու համար: Այս միացումներն ուղարկում են սրտի զարկեր, որոնք օգտագործվում են օգտատիրոջ ակտիվության կարգավիճակը վերահսկելու համար:
End-to-End գաղտնիություն
End-to-end գաղտնագրումը հիմնական հատկանիշն է, որն ապահովում է, որ միայն զրուցակից օգտվողները կարող են կարդալ հաղորդակցությունները: Հանրային բանալին համօգտագործվում է հաղորդակցության մեջ ներգրավված բոլոր օգտատերերի միջև և կարևոր է End-to-End գաղտնագրումը պահպանելու համար: Ենթադրենք, որ ալիքում կա երկու օգտատեր՝ Ջեյը և Աայուշը, որոնք շփվում են միմյանց հետ։
Jay-ն ունի Aayush-ի հանրային բանալին, իսկ Aayush-ն ունի Jay-ի հանրային բանալին, ինչպես նաև նրանց ոչ ընդհանուր անձնական բանալին: Արդյունքում, երբ Ջեյը փոխանցում է հաղորդագրությունը, նա կոդավորում է այն Աայուշի հանրային բանալիով, որը հնարավոր է վերծանել միայն Աայուշի անձնական բանալիով։
Նմանապես, Ջեյը միայն կկարողանա վերծանել Աայուշի հաղորդակցությունը: Արդյունքում, միայն Ջեյն ու Աայսուն կկարողանան տեսնել միմյանց հաղորդակցությունները, իսկ սերվերը պարզապես կգործի որպես դարպաս ողջ գործընթացում։
5. Խցանումներ
Յուրաքանչյուր համակարգ հակված է անսարքությունների: Երթևեկության այսքան մեծ ծավալը կառավարելու համար ծառայությունը պետք է միշտ աշխատի և մնա անսարքությունների նկատմամբ՝ խոչընդոտներից խուսափելու համար: Քանի որ մեր ծառայությունն ամբողջությամբ կախված է Chat-ի և Transient սերվերներից, մենք պետք է լուծենք բոլոր խնդիրները, որոնք բխում են դրանց աշխատանքից:
Զրույցի սերվերի ձախողումՍա մեր համակարգի սիրտն է: Երբ օգտվողները առցանց են, այն պատասխանատու է հաղորդագրությունների կառավարման և առաքման համար: Արդյունքում այս համակարգը կապեր է պահպանում իր օգտատերերի հետ։
Արդյունքում, եթե այս ծառայությունը ձախողվի, կտուժի ողջ ճարտարապետությունը: Չաթի սերվերի ձախողումը կառավարելու երկու մոտեցում կա. Մեթոդներից մեկը TCP կապերն այլ սերվեր տեղափոխելն է, մինչդեռ մյուսը թույլ է տալիս օգտվողներին ավտոմատ կերպով սկսել կապերը կապի կորստի դեպքում:
Անցումային պահպանման ձախողումՄեկ այլ բաղադրիչ, որը հակված է ձախողման, որը կարող է ի վերջո վնասել ամբողջ ծառայությունը, անցողիկ պահեստավորումն է: Օֆլայն օգտատերերի ճանապարհին հաղորդագրությունները կորչում են, եթե այս ծառայությունը ձախողվի:
Մենք կարող ենք կանխել հաղորդագրությունների կորուստը՝ կրկնելով յուրաքանչյուր օգտատիրոջ ժամանակավոր պահեստը: Արդյունքում, կրկնօրինակը կարող է օգտագործվել գործառույթները մշակելու համար, երբ օգտվողը վերադառնում է առցանց: Եթե սկզբնական սերվերը հասանելի է դառնում, օգտագործողի անցողիկ պահեստի և՛ բնօրինակը, և՛ կրկնօրինակները միավորվում են մեկ խանութի մեջ:
6. Օպտիմալացման տեխնիկա
ԺամկետանցությունՀաճախորդների անխափան և բարելավված փորձ ապահովելու համար մեսենջերի ծառայությունը պետք է լինի իրական ժամանակում: Արդյունքում, հետաձգումը պետք է կրճատվի՝ քեշավորելով հաճախ հասանելի տվյալների մի մասը: Մենք կարող ենք քեշավորել օգտատիրոջ գործունեության կարգավիճակը և վերջին խոսակցությունները հիշողության մեջ՝ օգտագործելով Redis-ի նման բաշխված քեշը:
առկայությունՄեզ պետք է, որ մեր ծառայությունը հասանելի լինի ժամանակի մեծամասնությանը: Մեր համակարգը պետք է սխալ հանդուրժող լինի, ուստի մենք կարող ենք պահել անցողիկ հաղորդագրությունների մի քանի օրինակներ, որպեսզի կորցրած ցանկացած հաղորդագրություն արագ վերականգնվի իր կրկնօրինակներից: Արդյունքում, համակարգի հասանելիությունը չի կարող վտանգվել:
Եզրափակում
Մեր համակարգն այժմ աջակցում է միայն մի քանի հնարավորությունների, բայց մենք կարող ենք հեշտությամբ ընդլայնել այն՝ ավելացնելու խմբային զրույցներ՝ մի քանի անհատների հաղորդագրություններ տարածելու համար: Կարող եք նաև տրամադրել տեսազանգերի և հեռախոսազանգերի հնարավորություններ: Այս համակարգը կարող է նաև մշակվել այնպես, որ օգտվողները կարողանան հրապարակել կարգավիճակի թարմացումներ կամ պատմություններ և կարդալ միմյանց:
Ես քրտնաջան աշխատեցի՝ ձեզ տրամադրելու WhatsApp համակարգի դիզայնի բարձր մակարդակի ակնարկ: Հուսով եմ, որ ձեզ դուր եկավ այն և լավ կօգտագործեք այն:
Թողնել գրառում