Mundarija[Yashirish][Show]
WhatsApp - bu foydalanuvchilarga bir-biri bilan xabar almashish imkonini beruvchi ijtimoiy xabar almashish dasturi.
WhatsApp qanday ishlashini hech o'ylab ko'rganmisiz?
Uning yaratilishi va ishlashiga qanday tushunchalar asos bo'ladi?
Ushbu maqola WhatsApp asoslarini ko'rib chiqadi tizim dizayni.
Shuningdek, biz WhatsApp-ning umumiy arxitekturasini ko'rib chiqamiz, undan har qanday chat dasturini yaratish uchun foydalanish mumkin.
Shunday ekan, keling, boshqa gaplarni uzatmasdan WhatsApp’ning tizim dizaynini ko‘rib chiqaylik!
1. Asosiy talablar
WhatsApp - bu butun dunyo bo'ylab ko'plab odamlar tomonidan qo'llaniladigan yuqori darajada kengaytiriladigan texnologiya. Natijada, u deyarli har doim ishonchli va ishlashi uchun yaxshi mo'ljallangan bo'lishi kerak.
Natijada, tizimning muhim ehtiyojlarini aniqlash juda muhimdir.
Bular WhatsApp messenjeri uchun minimal talablar:
- Yakkama-yakka o'zaro munosabatlarni osonlashtirishga qodir.
- Xabarni tasdiqlash va oxirgi marta koʻrish mumkin (yuborilgan, yetkazib berilgan va oʻqilgan).
- Oxir-oqibat shifrlash va media yordamiga ruxsat bering (tasvirlar/videolar).
Keling, kerakli xizmatimiz qancha quvvat talab qilishini bilib olaylik.
2. Imkoniyatlarni baholash
Bizning maqsadimiz katta miqdordagi trafikni boshqarishga qodir platformani yaratishdir. Kuniga 10 milliard SMS yuboriladi deb hisoblang. Bizda bor:
- Har kuni bir milliard odam tomonidan 10 milliard SMS yuboriladi.
- Eng yuqori tirbandlikda (sekundiga) 700,000 6 kishi faol edi (o'rtacha XNUMX marta)
- Maksimal foydalanish vaqtida soniyada 40 million xabar uzatiladi.
- Xabarning o'rtacha uzunligi 160 belgidan iborat: har kuni 10B * 160 = 1.6 TB ma'lumot ishlab chiqariladi.
- Misol tariqasida o'n yillik xizmatni oling: 10 * 1.6B * 365 PB
- Butun ilova mikroservislardan iborat bo'lib, ularning har biri maxsus vazifani bajaradi. Xabarni yuborish 20 millisekundni oladi va har bir serverda 100 ta bir vaqtda ulanish mavjud deb hisoblang. Natijada, kutilayotgan chat serverlari soni talab qilinadi = (sekundiga chat xabarlari kechikishi)/ bir serverga bir vaqtda ulanishlar = 40M * 20ms / 100 = 8000 server.
3. Yuqori darajadagi arxitektura
Ushbu tizim ikkita asosiy xizmatga asoslangan. Masalan, chat xizmati va vaqtinchalik xizmat. Chat xizmati foydalanuvchilarning onlayn xabarlari tomonidan yaratilgan barcha trafikni boshqaradi. Shu bilan birga, vaqtinchalik xizmat foydalanuvchi oflayn bo'lganda trafikni boshqaradi.
Agar foydalanuvchi onlayn bo'lsa, chat xizmati xabarlarni yetkazib berish uchun javobgardir.
U xabarni qabul qiluvchining onlayn yoki yo'qligini tekshiradi; agar qabul qiluvchi onlayn bo'lsa, ushbu xizmat xabarni darhol yetkazib beradi; agar qabul qiluvchi onlayn bo'lmasa, o'tish xizmati ularga onlayn qaytganida xabar yuboradi.
Vaqtinchalik xizmat oflayn foydalanuvchi qayta ulanmaguncha vaqtincha foydalanish mumkin bo'lgan ma'lumotlarni saqlash uchun alohida saqlash joyini saqlaydi.
Yuqori darajadagi API-larni loyihalash
Ushbu xizmat xabarlarni jo'natish va o'qish uchun ikkita yuqori darajadagi ishlaydigan API-ga ega. Tizim REST arxitekturasi yordamida amalga oshirilishi mumkin.
Xabarlarni yuborish parametrlari
Ushbu API ikki foydalanuvchi o'rtasida xabarlarni uzatish uchun ishlatiladi.
Suhbat parametrlari
Ushbu API tarmoqli suhbatlarni ko'rsatish uchun ishlatiladi. WhatsAppni ochganingizda birinchi bo'lib buni ko'rib chiqing. Bitta API so‘rovida bir foydalanuvchi uchun faqat bir nechta xabar olishni xohlaymiz. Buni hal qilish uchun ofset va xabarlar soni parametrlari kerak.
Oxirgi marta ko'rilgan, bitta belgi va ikkita belgi kabi funktsiyalar qanday funktsiyalardan iborat?
Ushbu xizmatlarni qo'llashda muhim rolni tasdiqlash xizmati. Bu xizmat tasdiq javoblarini yaratish va tekshirishda davom etgani uchun bu funksiyalar ishlab chiqilgan.
- Yagona belgi: A foydalanuvchidan kelgan xabar B foydalanuvchisiga yetib borsa, server xabar uzatilganligini tasdiqlovchi bitta belgini yuboradi.
- Ikki marta belgi: Server xabari to'g'ri ulanish orqali B foydalanuvchisiga yuborilgandan so'ng, foydalanuvchi B serverga xabarni olganligini tasdiqlaydi. Keyin server A foydalanuvchisiga boshqa tasdiqnomani taqdim etadi. Natijada, takroriy belgi paydo bo'ladi.
- Moviy belgi: B foydalanuvchisi xabarni tekshirgandan so'ng serverga yana bir tasdiq xabarini yuboradi. Keyin server A foydalanuvchisiga qo'shimcha tasdiq xabarini yuboradi. Shundan so'ng foydalanuvchi A ekranida ko'k belgi paydo bo'ladi.
- Oxirgi ko'rilgan: Yurak urishi mexanizmi oxirgi ko'rilgan xususiyat uchun to'liq javobgardir. Har 5 soniyada yurak urishi serverga uzatiladi, u har bir foydalanuvchining oxirgi ko'rgan holatini istalgan boshqa foydalanuvchi kirishi mumkin bo'lgan jadvalda kuzatib boradi.
4. Asosiy xususiyatlarni loyihalash
Shaxsiylashtirilgan shovqin
Bu Chat xizmatining zaruriy qismidir. Foydalanuvchi ushbu xizmatdan foydalangan holda boshqa foydalanuvchiga xabar yuborishi mumkin. Keling, bu qanday ishlashini ko'rib chiqaylik:
Tasavvur qiling, Jey Aayush bilan muloqot qilishni xohlaydi. Jey xabarni qabul qiladigan chat serveriga ulangan. Jey chat serveridan xabar yuborilganligi haqidagi tasdiqni oladi. Chat serveri hozir maʼlumotlar doʻkonidan Aayush ulangan chat serveri haqida maʼlumot soʻramoqda. Endi Jeyning chat serveri xabarni Aayushning chat serveriga uzatadi va Aayush xabarni push mexanizmi orqali oladi. Endi Aayush Jeyning chat serveriga tasdiq xatini yuboradi, u Jeyga xabar yetkazilganligi haqida xabar beradi. Agar Aayush xabarni yana bir bor o'qisa, Jeyga xabar o'qilganligi haqidagi yangi tasdiq keldi.
Foydalanuvchi faoliyati holati
Biror kishining oxirgi marta faol bo'lganligi tezkor xabarchilarning odatiy xususiyatidir.
Mijoz va server o'rtasidagi aloqani ta'minlash tizimi ushbu diagrammada tasvirlangan. Veb-rozetkalar server va mijoz o'rtasida ikki tomonlama aloqani o'rnatish uchun ishlatilgan. Ushbu ulanishlar yurak urishlarini yuboradi, ular foydalanuvchining faollik holatini kuzatish uchun ishlatiladi.
Maxfiylik
Oxir-oqibat shifrlash asosiy xususiyat bo'lib, faqat suhbatdosh foydalanuvchilar xabarlarni o'qiy olishini ta'minlaydi. Ochiq kalit aloqada ishtirok etgan barcha foydalanuvchilar o'rtasida taqsimlanadi va End-to-End shifrlashni davom ettirish uchun juda muhimdir. Faraz qilaylik, kanalda bir-biri bilan muloqot qiladigan ikki foydalanuvchi, Jey va Aayush bor.
Jeyda Aayushning ochiq kaliti bor, Aayushda esa Jeyning ochiq kaliti hamda ularning umumiy bo'lmagan shaxsiy kaliti bor. Natijada, Jey xabarni uzatganda, uni Aayushning ochiq kaliti bilan shifrlaydi, uni faqat Aayushning shaxsiy kaliti bilan dekodlash mumkin.
Xuddi shunday, Jey faqat Aayushning muloqotini dekodlay oladi. Natijada, faqat Jey va Aaysuh bir-birlarining aloqalarini ko'rishlari mumkin bo'ladi va server butun jarayonda faqat shlyuz sifatida ishlaydi.
5. To'siqlar
Har bir tizim noto'g'ri ishlashga moyil. Bunday katta hajmdagi trafikni boshqarish uchun xizmat to'siqlarga yo'l qo'ymaslik uchun doimo ishlashi va nosozliklarga chidamli bo'lishi kerak. Bizning xizmatimiz butunlay Chat va Transient serverlariga bog'liq bo'lgani uchun biz ularning ishlashidan kelib chiqadigan barcha muammolarni hal qilishimiz kerak.
Chat serverining ishlamay qolishi: Bu bizning tizimimizning yuragi. Foydalanuvchilar onlayn bo'lganda, u xabarlarni boshqarish va yetkazib berish uchun javobgardir. Natijada, ushbu tizim o'z foydalanuvchilari bilan aloqalarni saqlab turadi.
Natijada, agar bu xizmat muvaffaqiyatsiz bo'lsa, butun arxitektura zarar ko'radi. Suhbat serverining ishdan chiqishini boshqarishning ikkita usuli mavjud. Bir usul TCP ulanishlarini boshqa serverga o'tkazish bo'lsa, ikkinchisi ulanish yo'qolgan taqdirda foydalanuvchilarga ulanishni avtomatik ravishda boshlash imkonini beradi.
Vaqtinchalik saqlashning ishlamay qolishi: Oxir-oqibat butun xizmatga zarar etkazishi mumkin bo'lgan nosozliklarga moyil bo'lgan yana bir komponent vaqtinchalik saqlashdir. Agar ushbu xizmat ishlamay qolsa, oflayn foydalanuvchilarga yuborilgan xabarlar yo'qoladi.
Biz har bir foydalanuvchining vaqtinchalik xotirasini takrorlash orqali xabar yo'qotilishining oldini olishimiz mumkin. Natijada, foydalanuvchi onlayn rejimga qaytganida, replika funksiyalarni qayta ishlash uchun ishlatilishi mumkin. Agar asl serverga kirish mumkin bo'lsa, foydalanuvchining vaqtinchalik xotirasining asl nusxasi ham, nusxasi ham bitta do'konga birlashtiriladi.
6. Optimallashtirish texnikasi
Kechikish: Mijozlarning uzluksiz va takomillashtirilgan tajribasini taqdim etish uchun messenjer xizmati real vaqtda bo'lishi kerak. Natijada, tez-tez foydalaniladigan ma'lumotlarning bir qismini keshlash orqali kechikishni kamaytirish kerak. Biz Redis kabi taqsimlangan kesh yordamida foydalanuvchi faolligi holatini va oxirgi suhbatlarni xotirada keshlashimiz mumkin.
imkoniyat: Ko'pincha xizmatimiz mavjud bo'lishi uchun bizga kerak. Bizning tizimimiz xatolarga chidamli bo'lishi kerak, shuning uchun biz o'tkinchi xabarlarning bir nechta nusxalarini saqlashimiz mumkin, shunda yo'qolgan har qanday xabar uning dublikatlaridan tezda tiklanishi mumkin. Natijada, tizimning mavjudligi xavf ostida qolishi mumkin emas.
Xulosa
Bizning tizimimiz endi faqat bir nechta imkoniyatlarni qo'llab-quvvatlaydi, biroq biz uni bir nechta shaxslarga xabarlarni tarqatish uchun guruh suhbatlarini qo'shish uchun osongina kengaytira olamiz. Shuningdek, video va telefon qo'ng'iroqlari imkoniyatlarini taqdim etishingiz mumkin. Ushbu tizim, shuningdek, foydalanuvchilar status yangilanishlari yoki hikoyalarni nashr etishlari va bir-birlarini o'qishlari mumkin bo'lgan tarzda ishlab chiqilishi mumkin.
Men sizga WhatsApp tizimi dizayni haqida yuqori darajadagi umumiy ma'lumot berish uchun ko'p harakat qildim. Umid qilamanki, sizga yoqdi va undan yaxshi foydalanasiz.
Leave a Reply