Змест[Схаваць][Паказаць]
WhatsApp - гэта праграма сацыяльных паведамленняў, якая дазваляе карыстальнікам абменьвацца паведамленнямі адзін з адным.
Вы калі-небудзь задумваліся, як працуе WhatsApp?
Якія канцэпцыі ляжаць у аснове яго стварэння і функцыянавання?
У гэтым артыкуле будуць разгледжаны асновы WhatsApp дызайн сістэмы.
Мы таксама разгледзім агульную архітэктуру WhatsApp, якую можна выкарыстоўваць для стварэння любога праграмнага забеспячэння для чата.
Такім чынам, без лішніх слоў, давайце паглядзім на дызайн сістэмы WhatsApp!
1. Асноўныя патрабаванні
WhatsApp - гэта тэхналогія, якая шырока маштабуецца, якой карыстаюцца многія людзі ва ўсім свеце. У выніку ён павінен быць добра спраектаваны, каб быць практычна заўсёды надзейным і функцыянальным.
У выніку вызначэнне крытычных патрэбаў сістэмы мае вырашальнае значэнне.
Вось мінімальныя патрабаванні да мессенджара WhatsApp:
- Здольны спрыяць ўзаемадзеянню адзін на адзін.
- Пацвярджэнне паведамлення і апошняе наведванне магчымыя (адпраўлена, дастаўлена і прачытана).
- Дазволіць скразное шыфраванне і падтрымку медыя (малюнкі/відэа).
Давайце даведаемся, якой магутнасці патрабуе наш неабходны сэрвіс.
2. Ацэнка магутнасці
Наша мэта - стварыць платформу, здольную апрацоўваць вялікую колькасць трафіку. Выкажам здагадку, што ў дзень адпраўляецца 10 мільярдаў SMS. У нас ёсць:
- Штодня 10 мільярдаў SMS адпраўляе мільярд чалавек.
- У пік трафіку (у секунду) 700,000 6 чалавек былі актыўнымі (у сярэднім у XNUMX разоў)
- Падчас пікавага выкарыстання ў секунду перадаецца 40 мільёнаў паведамленняў.
- Сярэдняя даўжыня паведамлення складае 160 сімвалаў: 10 Б * 160 = 1.6 ТБ даных генеруецца кожны дзень.
- Возьмем для прыкладу дзесяць гадоў службы: 10 * 1.6В * 365 ПБ
- Усё прыкладанне будзе складацца з мікрасэрвісаў, кожны з якіх будзе выконваць спецыялізаваную задачу. Выкажам здагадку, што адпраўка паведамлення займае 20 мілісекунд і што ёсць 100 адначасовых злучэнняў на сервер. У выніку неабходная меркаваная колькасць сервераў чата = (затрымка паведамленняў чата ў секунду)/ адначасовых злучэнняў на сервер = 40 млн * 20 мс / 100 = 8000 сервераў.
3. Архітэктура высокага ўзроўню
Гэтая сістэма пабудавана на двух асноўных сэрвісах. Напрыклад, сэрвіс чата і пераходны сэрвіс. Сэрвіс чата апрацоўвае ўвесь трафік, які ствараецца паведамленнямі карыстальнікаў у інтэрнэце. Адначасова часовы сэрвіс апрацоўвае трафік, калі карыстальнік знаходзіцца ў аўтаномным рэжыме.
Калі карыстальнік знаходзіцца ў сетцы, за дастаўку паведамленняў адказвае служба чата.
Ён будзе праверыць, ці знаходзіцца атрымальнік паведамлення ў Інтэрнэце ці не; калі атрымальнік знаходзіцца ў сетцы, гэты сэрвіс неадкладна даставіць паведамленне; калі атрымальнік не знаходзіцца ў сетцы, служба пераходу адправіць паведамленне, калі яны вернуцца ў сетку.
Часовы сэрвіс захоўвае асобную вобласць для захоўвання часова даступных даных да паўторнага падключэння карыстальніка ў аўтаномным рэжыме.
Праектаванне API высокага ўзроўню
Гэты сэрвіс мае два функцыянальных API высокага ўзроўню для адпраўкі і чытання паведамленняў. Сістэма можа быць рэалізавана з выкарыстаннем архітэктуры REST.
Параметры для адпраўкі паведамленняў
Гэты API будзе выкарыстоўвацца для перадачы паведамленняў паміж двума карыстальнікамі.
Параметры размовы
Гэты API выкарыстоўваецца для адлюстравання ланцужных чатаў. Лічыце, што гэта першае, што вы бачыце, калі адкрываеце WhatsApp. Мы хацелі б атрымаць толькі некалькі паведамленняў для аднаго карыстальніка ў адным запыце API. Каб справіцца з гэтым, неабходныя параметры зруху і колькасці паведамленняў.
Якія функцыі такіх функцый, як апошняе прагляд, адзінарная галочка і двайная галачка?
Важную ролю ў разгортванні гэтых паслуг адыгрывае служба пацверджання. Гэтыя функцыі былі распрацаваны, паколькі гэты сэрвіс працягвае генераваць і правяраць адказы на пацвярджэнне.
- Адзіночны цік: Калі паведамленне ад карыстальніка A дасягае карыстальніка B, сервер адпраўляе адзін галачку, якая пацвярджае, што паведамленне было перададзена.
- Двайная галачка: Пасля таго, як паведамленне сервера было адпраўлена карыстальніку B праз належнае злучэнне, карыстальнік B пацвердзіць атрыманне паведамлення на сервер. Затым сервер прадаставіць карыстальніку А яшчэ адно пацвярджэнне. У выніку з'явіцца дублікат галачкі.
- Сіні клешч: Карыстальнік B адправіць яшчэ адно пацвярджэнне на сервер пасля праверкі паведамлення. Затым сервер адправіць карыстальніку А дадатковае паведамленне з пацвярджэннем. Пасля гэтага на экране карыстальніка А з'явіцца блакітная галачка.
- Апошні раз яго бачылі: Механізм сэрцабіцця цалкам адказвае за апошнюю заўважаную функцыю. Кожныя 5 секунд сэрцабіцце перадаецца на сервер, які адсочвае апошні статус кожнага карыстальніка ў табліцы, да якой можа лёгка атрымаць доступ любы іншы карыстальнік.
4. Праектаванне асноўных функцый
Персаналізаванае ўзаемадзеянне
Гэта неабходная частка сэрвісу Чат. Карыстальнік можа проста адпраўляць паведамленні іншаму карыстальніку з дапамогай гэтага сэрвісу. Давайце паглядзім, як гэта працуе:
Дапусцім, Джэй хоча мець зносіны з Ааюш. Джэй звязаны з серверам чата, з якога ён атрымлівае паведамленне. Джэй атрымлівае пацвярджэнне ад сервера чата, што паведамленне было адпраўлена. Сервер чата зараз запытвае інфармацыю са сховішча даных аб серверы чата, да якога падключаны Aayush. Чат-сервер Джэй цяпер перадае паведамленне на сервер чата Ааюша, а Ааюш атрымлівае паведамленне праз механізм націскання. Цяпер Aayush адпраўляе пацвярджэнне на сервер чата Джэя, які паведамляе Джэй аб тым, што паведамленне было дастаўлена. Калі Ааюш прачытаў паведамленне яшчэ раз, Джэй атрымаў новае пацвярджэнне таго, што паведамленне было прачытана.
Статус актыўнасці карыстальнікаў
Апошні раз, калі чалавек быў актыўным, з'яўляецца звычайнай функцыяй мэсэнджараў.
Сістэма падтрымання сувязі паміж кліентам і серверам намаляваная на гэтай схеме. Вэб-сокеты выкарыстоўваліся для ўстанаўлення двухнакіраванага злучэння паміж серверам і кліентам. Гэтыя злучэнні адпраўляюць сэрцабіцце, якое выкарыстоўваецца для кантролю стану актыўнасці карыстальніка.
Поўная канфідэнцыяльнасць
Шыфраванне з канца ў канец з'яўляецца ключавой функцыяй, якая гарантуе, што толькі размаўляюць карыстальнікі могуць чытаць паведамленні. Адкрыты ключ выкарыстоўваецца ўсімі карыстальнікамі, якія ўдзельнічаюць у камунікацыі, і мае вырашальнае значэнне для захавання скразнога шыфравання. Выкажам здагадку, што на канале два карыстальнікі, Джэй і Ааюш, якія маюць зносіны адзін з адным.
Джэй мае адкрыты ключ Ааюша, а Ааюш — адкрыты ключ Джэй, а таксама іх неагульны прыватны ключ. У выніку, калі Джэй перадае паведамленне, ён шыфруе яго адкрытым ключом Ааюша, які можа быць расшыфраваны толькі прыватным ключом Ааюша.
Сапраўды гэтак жа Джэй зможа расшыфраваць толькі зносіны Ааюша. У выніку толькі Джэй і Айсу змогуць бачыць зносіны адзін аднаго, а сервер будзе проста функцыянаваць як шлюз ва ўсім працэсе.
5. Вузкія месцы
Кожная сістэма схільная да збояў. Для таго, каб кіраваць такім вялікім аб'ёмам трафіку, служба павінна заўсёды працаваць і безадмоўна, каб пазбегнуць вузкіх месцаў. Паколькі наш сэрвіс цалкам залежыць ад сервераў Chat і Transient, мы павінны вырашыць усе праблемы, якія ўзнікаюць у выніку іх працы.
Збой сервера чата: Гэта сэрца нашай сістэмы. Калі карыстальнікі знаходзяцца ў Інтэрнэце, ён адказвае за кіраванне і дастаўку паведамленняў. У выніку гэтая сістэма падтрымлівае сувязі са сваімі карыстальнікамі.
У выніку, калі гэты сэрвіс выйдзе з ладу, пацерпіць уся архітэктура. Ёсць два падыходу да кіравання збоем сервера чата. Адным з метадаў з'яўляецца перанос TCP-злучэнняў на іншы сервер, а іншы - дазволіць карыстальнікам аўтаматычна пачынаць злучэнне ў выпадку страты злучэння.
Збой пераходнага захоўвання: Іншы кампанент, схільны да збою, які ў канчатковым выніку можа пашкодзіць усю службу, - гэта пераходнае сховішча. Паведамленні па дарозе карыстальнікам у аўтаномным рэжыме губляюцца, калі гэтая служба не працуе.
Мы можам прадухіліць страту паведамленняў шляхам рэплікацыі часовага сховішча кожнага карыстальніка. У выніку, рэпліку можна выкарыстоўваць для апрацоўкі функцый кожны раз, калі карыстальнік вяртаецца ў Інтэрнэт. Калі першапачатковы сервер становіцца даступным, як арыгінальны, так і рэплікавы асобнікі часовага сховішча карыстальніка аб'ядноўваюцца ў адно сховішча.
6. Методыка аптымізацыі
латэнтнасьць: Каб забяспечыць бесперашкодны і палепшаны досвед працы з кліентамі, служба мессенджера павінна працаваць у рэжыме рэальнага часу. У выніку затрымку трэба паменшыць за кошт кэшавання часткі даных, да якіх часта звяртаюцца. Мы можам кэшаваць статус актыўнасці карыстальнікаў і апошнія размовы ў памяці з дапамогай размеркаванага кэша, такога як Redis.
Наяўнасць: Нам трэба, каб наш сэрвіс быў даступны большую частку часу. Наша сістэма павінна быць адмоваўстойлівай, таму мы можам захаваць некалькі копій часовых паведамленняў, каб любое страчанае паведамленне можна было хутка аднавіць з яго дублікатаў. У выніку даступнасць сістэмы не можа быць пастаўлена пад пагрозу.
заключэнне
Наша сістэма цяпер падтрымлівае толькі некалькі магчымасцяў, але мы можам лёгка пашырыць яе, каб дадаць групавыя чаты для распаўсюджвання паведамленняў некалькім асобам. Вы таксама можаце забяспечыць відэа- і тэлефонныя званкі. Гэтая сістэма таксама можа быць распрацавана так, каб карыстальнікі маглі публікаваць абнаўленні стану або апавяданні і чытаць адзін аднаго.
Я шмат працаваў, каб даць вам агляд дызайну сістэмы WhatsApp на высокім узроўні. Я спадзяюся, што вам спадабалася і вы будзеце выкарыстоўваць гэта з карысцю.
Пакінуць каментар