Гарчиг[Нуух][Үзүүлэх]
WhatsApp бол хэрэглэгчид хоорондоо мессеж солилцох боломжийг олгодог нийгмийн мессежийн програм юм.
Та WhatsApp хэрхэн ажилладаг талаар бодож үзсэн үү?
Үүнийг бий болгох, ажиллуулах үндэс суурь нь юу вэ?
Энэ нийтлэлд WhatsApp-ийн үндсийг авч үзэх болно системийн дизайн.
Мөн бид ямар ч төрлийн чатын программыг бүтээхэд ашиглаж болох WhatsApp-ын ерөнхий архитектурыг үзэх болно.
Тиймээс, олон зүйл нуршилгүйгээр WhatsApp-ийн системийн дизайныг харцгаая!
1. Гол шаардлага
WhatsApp бол дэлхийн өнцөг булан бүрт олон хүн ашигладаг маш өргөн цар хүрээтэй технологи юм. Үүний үр дүнд, энэ нь үргэлж найдвартай, ажиллагаатай байхын тулд сайтар боловсруулсан байх ёстой.
Үүний үр дүнд системийн чухал хэрэгцээг тодорхойлох нь маш чухал юм.
Эдгээр нь WhatsApp мессенжерт тавигдах хамгийн бага шаардлага юм:
- Ганцаарчилсан харилцааг хөнгөвчлөх чадвартай.
- Мессежийг хүлээн зөвшөөрч, хамгийн сүүлд үзсэн нь хоёулаа боломжтой (Илгээсэн, Хүргэгдсэн, Уншсан).
- Төгсгөлд нь шифрлэлт болон медиа дэмжлэгийг (зураг/видео) зөвшөөрөх.
Бидний шаардлагатай үйлчилгээ хэр их хүчин чадал шаарддагийг олж мэдье.
2. Чадавхийг тооцох
Бидний зорилго бол их хэмжээний урсгалыг зохицуулах чадвартай платформыг бий болгох явдал юм. Өдөрт 10 тэрбум SMS илгээдэг гэж бодъё. Бидэнд байна:
- Өдөр бүр нэг тэрбум хүн 10 тэрбум SMS илгээдэг.
- Замын хөдөлгөөний оргил үед (секундэд) 700,000 хүн идэвхтэй байсан (дунджаар 6X)
- Ашиглалтын оргил үед секундэд 40 сая мессеж дамждаг.
- Мессежийн дундаж урт нь 160 тэмдэгт: 10B * 160 = 1.6TB өгөгдөл өдөр бүр үүсдэг.
- Арван жилийн үйлчилгээг жишээ болгон авч үзье: 10 * 1.6B * 365 PB
- Аппликейшн бүхэлдээ микро үйлчилгээнүүдээс бүрдэх бөгөөд тус бүр нь тусгайлсан ажлыг гүйцэтгэх болно. Мессеж илгээхэд 20 миллисекунд шаардлагатай бөгөөд сервер бүрт 100 зэрэгцээ холболт байдаг гэж бодъё. Үүний үр дүнд, шаардлагатай чат серверүүдийн хүлээгдэж буй тоо = (секундэд чатын мессежийн хоцролт)/ нэг серверийн зэрэгцээ холболтууд = 40 сая * 20 мс / 100 = 8000 сервер.
3. Өндөр түвшний архитектур
Энэ систем нь хоёр үндсэн үйлчилгээн дээр суурилагдсан. Жишээлбэл, чат үйлчилгээ, түр зуурын үйлчилгээ. Энэхүү чат үйлчилгээ нь хэрэглэгчдийн онлайн мессежээр үүсгэсэн бүх урсгалыг зохицуулдаг. Үүний зэрэгцээ түр үйлчилгээ нь хэрэглэгч офлайн үед замын хөдөлгөөнийг зохицуулдаг.
Хэрэв хэрэглэгч онлайн байгаа бол чат үйлчилгээ нь мессежийг дамжуулах үүрэгтэй.
Энэ нь мессеж хүлээн авагч онлайн байгаа эсэхийг шалгах болно; хэрэв хүлээн авагч онлайн байгаа бол энэ үйлчилгээ нь мессежийг шууд хүргэх болно; хэрэв хүлээн авагч онлайн биш бол шилжилтийн үйлчилгээ тэднийг онлайнаар буцаж ирэхэд мессеж илгээх болно.
Түр зуурын үйлчилгээ нь офлайн хэрэглэгч дахин холбогдох хүртэл түр зуур хандах боломжтой өгөгдлийг хадгалах тусдаа хадгалах газар хадгалдаг.
Өндөр түвшний API зохион бүтээх
Энэ үйлчилгээ нь мессеж илгээх, унших өндөр түвшний хоёр API-тай. Системийг REST архитектур ашиглан хэрэгжүүлж болно.
Мессеж илгээх параметрүүд
Энэ API нь хоёр хэрэглэгчийн хооронд мессеж дамжуулахад ашиглагдана.
Харилцааны параметрүүд
Энэ API нь урсгалтай чатуудыг харуулахад ашиглагддаг. WhatsApp-ыг нээхэд хамгийн түрүүнд үүнийг анхаарч үзээрэй. Бид ганцхан API асуулгад нэг хэрэглэгчийн цөөн хэдэн мессежийг авахыг хүсэж байна. Үүнийг зохицуулахын тулд офсет болон мессежийн тооны параметрүүд шаардлагатай.
Сүүлд үзсэн, ганц тэмдэг, давхар тэмдэг зэрэг функцууд ямар үүрэг гүйцэтгэдэг вэ?
Эдгээр үйлчилгээг нэвтрүүлэхэд чухал үүрэг бол хүлээн зөвшөөрөх үйлчилгээ юм. Энэхүү үйлчилгээ нь хүлээн зөвшөөрлийн хариултыг үүсгэж, баталгаажуулсаар байгаа тул эдгээр функцийг хөгжүүлсэн.
- Ганц цохилт: Хэрэглэгч А-аас ирсэн мессеж В хэрэглэгч рүү очиход сервер нь мессежийг дамжуулсан гэдгийг хүлээн зөвшөөрсөн ганц тэмдэг илгээнэ.
- Давхар тэмдэг: Зөв холболтоор серверийн мессежийг В хэрэглэгч рүү илгээсний дараа В хэрэглэгч сервер рүү мессеж хүлээн авснаа хүлээн зөвшөөрнө. Дараа нь сервер А хэрэглэгчийг өөр хүлээн зөвшөөрөлтөөр хангана. Үүний үр дүнд давхардсан тэмдэг гарч ирнэ.
- Цэнхэр хачиг: В хэрэглэгч мессежийг шалгасны дараа серверт дахин мэдэгдэл илгээнэ. Дараа нь сервер А хэрэглэгчийг хүлээн зөвшөөрсөн нэмэлт мессеж илгээх болно. Үүний дараа А хэрэглэгчийн дэлгэц дээр цэнхэр тэмдэг гарч ирнэ.
- Хамгийн сүүлд харсан: Зүрхний цохилтын механизм нь хамгийн сүүлд харагдах онцлогийг бүхэлд нь хариуцдаг. 5 секунд тутамд зүрхний цохилт сервер рүү дамждаг бөгөөд энэ нь хэрэглэгч бүрийн хамгийн сүүлд харсан статусыг бусад хэрэглэгчдэд хялбархан хандах боломжтой хүснэгтэд хадгалдаг.
4. Гол шинж чанаруудыг төлөвлөх
Хувь хүний харилцан үйлчлэл
Энэ бол чат үйлчилгээний зайлшгүй хэсэг юм. Хэрэглэгч энэ үйлчилгээг ашиглан өөр хэрэглэгч рүү мессеж илгээх боломжтой. Энэ хэрхэн ажилладагийг харцгаая:
Жэй Аюуштай харилцахыг хүсч байна гэж бодъё. Жэй мессеж хүлээн авдаг чатын сервертэй холбогдсон байна. Жэй чатын серверээс мессеж илгээсэн гэсэн баталгааг хүлээн авсан. Чатын сервер нь одоо Аайушийн холбогдсон чатын серверийн талаарх мэдээллийг мэдээллийн сангаас авахыг хүсч байна. Жэйгийн чатын сервер нь Аайушийн чатын сервер рүү мессежийг дамжуулж, Аайуш нь түлхэх механизмаар мессежийг хүлээн авдаг. Aayush одоо Жэйгийн чатын сервер рүү хүлээн зөвшөөрч байгаа бөгөөд энэ нь Жэйд мессежийг хүргэсэн тухай мэдэгдэх болно. Хэрэв Аюуш мессежийг дахин уншвал Жэйд мессежийг уншсан гэсэн шинэхэн мэдэгдэл ирсэн.
Хэрэглэгчийн үйл ажиллагааны төлөв
Хамгийн сүүлд хүн идэвхтэй байсан нь мессенжерийн байнгын шинж чанар юм.
Үйлчлүүлэгч болон серверийн хоорондох холболтыг хадгалах системийг энэ диаграммд дүрсэлсэн болно. Веб залгууруудыг сервер болон үйлчлүүлэгчийн хооронд хоёр чиглэлтэй холболтыг бий болгоход ашигласан. Эдгээр холболтууд нь зүрхний цохилтыг илгээдэг бөгөөд энэ нь хэрэглэгчийн үйл ажиллагааны төлөвийг хянахад ашиглагддаг.
Төгсгөлийн нууцлал
Төгсгөл хоорондын шифрлэлт нь зөвхөн харилцан ярилцаж буй хэрэглэгчид харилцааг унших боломжтой болгодог гол онцлог юм. Нийтийн түлхүүрийг харилцаанд оролцож буй бүх хэрэглэгчдийн дунд хуваалцдаг бөгөөд энэ нь Төгсгөлийн шифрлэлтийг тогтвортой байлгахад чухал үүрэгтэй. Тус суваг дээр Jay, Aayush гэсэн хоёр хэрэглэгч хоорондоо харилцдаг гэж бодъё.
Жэйд Аюушийн нийтийн түлхүүр, Аюуш нь Жэйгийн нийтийн түлхүүр болон тэдний хуваалцдаггүй хувийн түлхүүртэй. Үүний үр дүнд Жэй мессежийг дамжуулахдаа Ааюушийн нийтийн түлхүүрээр шифрлэдэг бөгөөд үүнийг зөвхөн Аюушийн хувийн түлхүүрээр тайлж болно.
Үүний нэгэн адил Жэй зөвхөн Аюушийн харилцааны кодыг тайлах боломжтой болно. Үүний үр дүнд зөвхөн Жэй, Айсүх нар бие биенийхээ харилцааг харах боломжтой болох бөгөөд сервер нь бүх үйл явцад зөвхөн гарц болж ажиллах болно.
5. Саад бэрхшээл
Аливаа систем доголдолд өртөмтгий байдаг. Ийм их хэмжээний замын хөдөлгөөнийг зохицуулахын тулд үйлчилгээ нь саад тотгор учруулахгүйн тулд байнга ажиллаж, алдаа гаргахгүй байх ёстой. Манай үйлчилгээ бүхэлдээ Чат болон Түр зуурын серверүүд дээр тулгуурладаг тул бид тэдгээрийн үйл ажиллагаанаас үүссэн бүх асуудлыг шийдэх ёстой.
Чат серверийн доголдол: Энэ бол манай системийн зүрх юм. Хэрэглэгч онлайн байх үед энэ нь мессежийг удирдах, дамжуулах үүрэгтэй. Үүний үр дүнд энэ систем нь хэрэглэгчидтэйгээ холбоосыг хадгалж байдаг.
Үүний үр дүнд энэ үйлчилгээ бүтэлгүйтвэл архитектур бүхэлдээ хохирно. Чат серверийн доголдлыг удирдах хоёр арга байдаг. Нэг арга нь TCP холболтыг өөр сервер рүү шилжүүлэх бол өөр нэг арга нь холболт тасарсан тохиолдолд хэрэглэгчдэд автоматаар холболт эхлүүлэх боломжийг олгох явдал юм.
Түр зуурын хадгалалтын бүтэлгүйтэл: Үйлчилгээг бүхэлд нь гэмтээж болох өөр нэг бүтэлгүйтэл нь түр зуурын хадгалалт юм. Хэрэв энэ үйлчилгээ амжилтгүй болвол офлайн хэрэглэгчид рүү чиглэсэн зурвасууд алга болно.
Бид хэрэглэгч бүрийн түр санах ойг хуулбарлах замаар мессеж алдагдахаас сэргийлж чадна. Үүний үр дүнд хэрэглэгч онлайнаар буцаж ирэх бүрт функцийг боловсруулахад хуулбарыг ашиглаж болно. Хэрэв анхны серверт хандах боломжтой бол хэрэглэгчийн түр хадгалах сангийн эх болон хуулбарын аль аль нь нэг дэлгүүрт нэгтгэгдэнэ.
6. Оновчлолын техник
Лавлагаа: Үйлчлүүлэгчдэд саадгүй, сайжруулсан туршлагыг хүргэхийн тулд мессенжерийн үйлчилгээ бодит цаг хугацаанд байх ёстой. Үүний үр дүнд байнга ханддаг өгөгдлийн зарим хэсгийг кэшлэх замаар хоцролтыг багасгах шаардлагатай. Бид Redis гэх мэт тархсан кэшийг ашиглан санах ойд хэрэглэгчийн үйл ажиллагааны байдал болон сүүлийн үеийн харилцан яриаг кэшлэх боломжтой.
бэлэн байдал: Манай үйлчилгээ ихэнх тохиолдолд бэлэн байх шаардлагатай. Манай систем алдааг тэсвэрлэх чадвартай байх ёстой бөгөөд ингэснээр алдагдсан мессежийг давхардсанаас нь хурдан сэргээх боломжтой болохын тулд бид түр зуурын мессежийн хэд хэдэн хуулбарыг хадгалах боломжтой. Үүний үр дүнд системийн хүртээмжийг эрсдэлд оруулах боломжгүй юм.
Дүгнэлт
Манай систем одоо хэдхэн боломжуудыг дэмждэг боловч бид үүнийг хялбархан өргөжүүлж, хэд хэдэн хүмүүст мессеж түгээх групп чатуудыг нэмж болно. Та мөн видео болон утасны дуудлага хийх боломжтой. Энэ системийг хэрэглэгчид статусын шинэчлэлт эсвэл өгүүлэмжийг нийтэлж, бие биенээ унших боломжтой байхаар хөгжүүлж болно.
WhatsApp системийн дизайны талаар өндөр түвшний тоймыг танд өгөхийн тулд би шаргуу ажилласан. Танд таалагдсан бөгөөд үүнийг сайн ашиглах болно гэж найдаж байна.
хариу үлдээх