Мазмуну[Жашыруу][Көрсөтүү]
WhatsApp - бул колдонуучуларга бири-бири менен билдирүүлөрдү алмашууга мүмкүндүк берген социалдык билдирүү программасы.
WhatsApp кантип иштээрин ойлонуп көрдүңүз беле?
Анын түзүлүшү жана иштеши кандай концепциялардан турат?
Бул макалада WhatsAppтын негиздери талкууланат системалык дизайн.
Биз ошондой эле WhatsAppтын жалпы архитектурасын карап чыгабыз, аны каалаган чатта программалык камсыздоону түзүүгө болот.
Андыктан, келгиле, келгиле, WhatsAppтын системалык дизайнын карап көрөлү!
1. Негизги талаптар
WhatsApp - бул дүйнө жүзү боюнча көптөгөн адамдар тарабынан колдонулган масштабдуу технология. Натыйжада, ал иш жүзүндө дайыма ишенимдүү жана иштеши үчүн жакшы иштелип чыккан болушу керек.
Натыйжада, системанын маанилүү муктаждыктарын аныктоо өтө маанилүү болуп саналат.
Бул WhatsApp мессенджерине минималдуу талаптар:
- Бири-бири менен өз ара аракеттенүүнү жеңилдетүүгө жөндөмдүү.
- Билдирүүнү тастыктоо жана акыркы жолу көрүүгө болот (Жөнөтүлгөн, Жеткирилген жана Окулган).
- Үчтөн аягына чейин шифрлөө жана медиа колдоого уруксат берүү (сүрөттөр/видеолор).
Келгиле, биздин керектүү кызматыбыз канчалык кубаттуулукту талап кыларын билели.
2. Мүмкүнчүлүктү баалоо
Биздин максат - чоң көлөмдөгү трафикти башкарууга жөндөмдүү платформа түзүү. Күнүнө 10 миллиард SMS жөнөтүлөт дейли. Бизде бар:
- Күн сайын бир миллиард адам 10 миллиард SMS жөнөтөт.
- Трафиктин эң жогорку чегинде (секундасына) 700,000 6 адам активдүү болгон (орточо XNUMXX)
- Колдонуунун эң жогорку чегинде секундасына 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 сурамында бир колдонуучу үчүн бир нече билдирүүлөрдү алгыбыз келет. Муну чечүү үчүн, офсет жана билдирүүлөрдүн санынын параметрлери керек.
Акыркы жолу көрүлгөн, жалгыз белги жана кош белги сыяктуу функциялардын функциялары кандай?
Бул кызматтарды жайылтууда маанилүү ролду таануу кызматы саналат. Бул кызмат ырастоо жоопторун жаратып, текшерүүнү улантып жаткандыктан, бул функциялар иштелип чыккан.
- Бир кене: Колдонуучу Адан келген билдирүү В колдонуучуга жеткенде, сервер билдирүү жөнөтүлгөнүн ырастаган бир белгини жөнөтөт.
- Кош белги: Сервердин билдирүүсү B Колдонуучусуна туура туташуу аркылуу жөнөтүлгөндөн кийин, B Колдонуучусу кабарды серверге алганын ырастайт. Андан кийин сервер А колдонуучусуна дагы бир ырастоо берет. Натыйжада, дубликат белгиси пайда болот.
- Көк кене: Колдонуучу B билдирүүнү текшергенден кийин серверге дагы бир ырастоо жөнөтөт. Андан кийин сервер А колдонуучуга кошумча ырастоо билдирүүсүн жөнөтөт. Андан кийин А колдонуучунун экранында көк белги пайда болот.
- Акыркы жолу көрүлдү: Жүрөк согушу механизми акыркы көргөн өзгөчөлүк үчүн толугу менен жооп берет. Ар бир 5 секунд сайын жүрөктүн согушу серверге жөнөтүлүп турат, ал ар бир колдонуучунун акыркы көргөн статусун каалаган башка колдонуучу оңой ала турган таблицада көзөмөлдөйт.
4. Негизги функцияларды долбоорлоо
Жекелештирилген өз ара аракеттенүү
Бул Чат кызматынын керектүү бөлүгү. Колдонуучу бул кызматты колдонуу менен башка колдонуучуга жөн гана билдирүүлөрдү жөнөтө алат. Келгиле, бул кантип иштээрин карап көрөлү:
Джей Аайуш менен сүйлөшкүсү келет деп ойлойлу. Джей билдирүүнү алган чат серверине туташтырылган. Джей чат серверинен билдирүү жөнөтүлгөнү тууралуу тастыктоо алат. Чат сервери азыр маалымат дүкөнүнөн Аайуш туташкан чат сервери тууралуу маалыматты сурап жатат. Эми Джейдин чат сервери билдирүүнү Аайуштун чат серверине өткөрүп берет, ал эми Аайуш билдирүүнү түртүү механизми аркылуу алат. Аайуш азыр Джейдин чат серверине тастыктоо катын жөнөтөт, ал Джейге билдирүү жеткирилгенин кабарлайт. Эгер Аюуш билдирүүнү дагы бир жолу окуса, Джейге билдирүүнүн окулганын жаңы моюнга алды.
Колдонуучунун аракетинин абалы
Адам акыркы жолу активдүү болгон - мессенджерлердин үзгүлтүксүз өзгөчөлүгү.
Кардар менен сервердин ортосундагы байланышты камсыз кылуу системасы бул диаграммада сүрөттөлгөн. Веб розеткалары сервер менен кардар ортосунда эки багыттуу байланышты орнотуу үчүн колдонулган. Бул байланыштар колдонуучунун аракетинин абалын көзөмөлдөө үчүн колдонулган жүрөктүн согушун жөнөтөт.
Түптөн аягына чейин купуялуулук
Үчтөн аягына чейин шифрлөө баарлашкан колдонуучулар гана байланыштарды окуй ала турган негизги өзгөчөлүк болуп саналат. Ачык ачкыч байланышка катышкан бардык колдонуучулардын ортосунда бөлүшүлөт жана End-to-End шифрлөө үчүн маанилүү болуп саналат. Каналда Jay жана Aayush аттуу эки колдонуучу бар деп ойлойлу, алар бири-бири менен баарлашышат.
Джейде Аюуштун ачык ачкычы бар, ал эми Аюушта Джейдин ачык ачкычы, ошондой эле алардын бөлүшүлбөгөн купуя ачкычы бар. Натыйжада, Джей билдирүү жөнөткөндө, аны Аайуштун ачык ачкычы менен шифрлейт, аны Аайуштун купуя ачкычы менен гана чечүүгө болот.
Анын сыңарындай, Джей да Аюуштун байланышын чечмелей алат. Натыйжада, Джей менен Айсух гана бири-биринин байланыштарын көрө алышат жана сервер бүт процессте шлюз катары гана иштейт.
5. Тоскоолдуктар
Ар бир система иштебей калышы мүмкүн. Мындай чоң көлөмдөгү трафикти башкаруу үчүн, кызмат тоскоолдуктарды болтурбоо үчүн ар дайым иштеп, каталарга чыдамдуу болушу керек. Биздин кызмат толугу менен Chat жана Transient серверлерине көз каранды болгондуктан, биз алардын иштешинен келип чыккан бардык маселелерди чечишибиз керек.
Чат серверинин иштебей калышы: Бул биздин системанын жүрөгү. Колдонуучулар онлайн болгондо, ал билдирүүлөрдү башкаруу жана жеткирүү үчүн жооптуу. Натыйжада, бул система өзүнүн колдонуучулары менен байланыштарды сактап турат.
Натыйжада, бул кызмат иштебей калса, бүт архитектура жабыркайт. Чат серверинин иштебей калышын башкаруунун эки жолу бар. Бир ыкма TCP байланыштарын башка серверге которуу, ал эми экинчиси туташуулар үзүлгөн учурда колдонуучуларга автоматтык түрдө туташууларды баштоого мүмкүндүк берүү.
Убактылуу сактагычтын бузулушу: Бүткүл кызматка зыян келтириши мүмкүн болгон дагы бир бузулууга дуушар болгон дагы бир компонент убактылуу сактагыч болуп саналат. Бул кызмат иштебей калса, оффлайн колдонуучуларга жолдонгон билдирүүлөр жоголот.
Биз ар бир колдонуучунун убактылуу сактагычын репликациялоо менен билдирүүнүн жоголушун алдын алабыз. Натыйжада, репликаны колдонуучу онлайн режимине кайткан сайын функцияларды иштетүү үчүн колдонсо болот. Түпнуска сервер жеткиликтүү болуп калса, колдонуучунун убактылуу сактагычынын түпнуска да, реплика да бир дүкөнгө бириктирилет.
6. Оптималдаштыруу ыкмалары
кечигүү: Кардардын үзгүлтүксүз жана жакшыртылган тажрыйбасын жеткирүү үчүн, мессенжер кызматы реалдуу убакыт режиминде болушу керек. Натыйжада, күтүү убактысын көбүнчө кирүүчү маалыматтардын бир бөлүгүн кэштөө менен кыскартуу керек. Биз Redis сыяктуу бөлүштүрүлгөн кэштин жардамы менен колдонуучунун активдүүлүгүн жана акыркы сүйлөшүүлөрдү эстутумда кэштей алабыз.
болушу: Бизге кызматыбыз көпчүлүк учурда жеткиликтүү болушу үчүн керек. Биздин система каталарга чыдамдуу болушу керек, ошентип биз транзитордук билдирүүлөрдүн бир нече көчүрмөсүн сактай алабыз, андыктан ар кандай жоголгон билдирүү анын дубликаттарынан тез калыбына келтирилет. Натыйжада, системанын жеткиликтүүлүгүнө коркунуч туудурбайт.
жыйынтыктоо
Биздин система азыр бир нече гана мүмкүнчүлүктөрдү колдойт, бирок биз аны оңой эле кеңейтип, бир нече адамдарга билдирүүлөрдү таратуу үчүн топтук чаттарды кошо алабыз. Сиз ошондой эле видео жана телефон чалуу мүмкүнчүлүктөрүн бере аласыз. Бул система ошондой эле колдонуучулар статус жаңыртууларын же баяндарды жарыялап, бири-бирин окуй тургандай иштелип чыгышы мүмкүн.
Мен сизге WhatsApp тутумунун дизайнын жогорку деңгээлдеги сереп менен камсыз кылуу үчүн көп эмгектендим. Бул сизге жакты жана аны жакшы пайдаланасыз деп ишенем.
Таштап Жооп