Selamat datang, rakan pengembara, ke dunia Reka Bentuk Sistem WhatsApp yang indah dan huru-hara! Artikel ini bukan sahaja akan mendedahkan seni bina peringkat tinggi (HLD) dan peringkat rendah (LLD) WhatsApp tetapi juga memberikan sedikit jenaka (kerana reka bentuk sistem tidak semestinya membosankan!) dan melukis beberapa rajah kepada anda (kerana kami semua carta alir cinta).
Jadi sandarkan diri, dapatkan secawan kopi dan mari kita memulakan perjalanan di mana pelayan, pangkalan data dan protokol pemesejan bersatu untuk membawa berbilion-bilion mesej ke telefon anda.
Jadual Kandungan:
- Seni Bina Aras Tinggi (HLD)
- Seni Bina Aras Rendah (LLD)
- Carta Aliran: Wira Reka Bentuk
- Pecahan Komponen Teras
- Mengapa Komponen Ini?
- Fakta Keseronokan dan Pengoptimuman Khusus WhatsApp
1. Seni Bina Aras Tinggi (HLD): Gambaran Besar
Bayangkan WhatsApp sebagai simfoni yang disusun dengan baik, tetapi bukannya biola, kami mempunyai pelayan, dan bukannya cello, kami mempunyai pangkalan data. Pada tahap yang tinggi, kami sedang mereka bentuk sistem yang menyokong:
- Berbilion pengguna
- Pemesejan masa nyata
- Perkongsian multimedia
- Penyulitan hujung ke hujung
- Ketersediaan tinggi dan kependaman rendah (tiada siapa yang suka menunggu "menaip...")
Gambaran Keseluruhan HLD:
Dalam HLD, kami berfikir seperti seorang arkitek. Anda belum mengambil berat tentang bentuk setiap tingkap lagi—anda cuma mahu memastikan rumah itu tidak runtuh.
Pada pandangan 30,000 kaki, seni bina WhatsApp terdiri daripada:
-
Aplikasi Pelanggan (iOS, Android, Web)
- Gerbang API
-
Pengimbang Beban (mengimbangi kekacauan berjuta-juta mesej)
-
Pelayan Aplikasi (di mana keajaiban berlaku)
-
Lapisan Pangkalan Data (kerana data perlu tinggal di suatu tempat)
-
Storan Fail (untuk GIF kucing tersebut)
-
Baris Gilir Mesej (Sistem seperti Kafka untuk pemesejan masa nyata)
-
Pelayan Pemberitahuan (perlu memberitahu anda apabila orang yang anda suka membalas)
Elemen Teras HLD:
-
Aplikasi Pelanggan:
WhatsApp berfungsi pada apl mudah alih (iOS/Android), web dan desktop, semuanya bersambung ke pelayan hujung belakang yang sama. Pelanggan bertanggungjawab untuk UI/UX, menghantar/menerima mesej, penyulitan/penyahsulitan (kami akan melakukannya) dan menyambung semula apabila Wi-Fi anda memutuskan untuk berehat sebentar.
-
Gerbang API:
Ini ialah orang tengah yang mengendalikan permintaan daripada pelanggan dan memajukan mereka kepada perkhidmatan bahagian belakang yang sesuai. Gateway API menyemak sama ada anda disahkan dengan betul, mencatat permintaan mesej anda dan menghantar anda ke pelayan yang betul.
-
Pengimbang Beban:
Dengan berjuta-juta pengguna dalam talian, anda memerlukan konduktor orkestra (atau dua) untuk memastikan tiada pelayan yang terperangkap. Pengimbang beban mengedarkan permintaan merentasi banyak pelayan aplikasi, yang menghalang beban berlebihan dan menjadikan sesuatu sangat pantas.
-
Pelayan Aplikasi:
Budak-budak jahat ini adalah otak WhatsApp. Mereka memproses mesej, mengurus sesi pengguna dan melakukan penyulitan. Kuncinya di sini ialah kebolehskalaan; jika lebih ramai pengguna menyertai, kami menambah lebih banyak pelayan.
-
Lapisan Pangkalan Data:
Ke mana perginya semua mesej dan media anda? Di sinilah pangkalan data masuk:
-
Pangkalan Data NoSQL (Cassandra): Untuk menyimpan data berskala besar seperti profil pengguna, sejarah mesej, dsb.
-
Pangkalan Data SQL: Dalam kes yang jarang berlaku, di mana data hubungan diperlukan (seperti rekod kewangan).
-
Storan Fail:
Semua foto, video dan nota suara anda disimpan dalam sistem storan fail teragih berskala. Fikirkan S3 (tetapi WhatsApp mungkin membina sesuatu yang disesuaikan—kerana ia hebat seperti itu).
-
Baris Gilir Mesej (Kafka/Redis):
Untuk pemesejan masa nyata, WhatsApp menggunakan baris gilir mesej untuk mengendalikan penghantaran mesej merentas pelayan yang berbeza. Jika pengguna berada di luar talian, mesej itu disimpan dalam baris gilir sehingga mereka kembali.
-
Pelayan Pemberitahuan:
Apabila skrin telefon anda dimatikan, WhatsApp menghantar pemberitahuan melalui perkhidmatan seperti APN (Perkhidmatan Pemberitahuan Apple Push) dan Pemesejan Awan Firebase untuk Android.
Carta Aliran HLD:
Berikut ialah carta alir asas untuk menggambarkan interaksi antara pelanggan, perkhidmatan hujung belakang dan pangkalan data dalam WhatsApp:
+---------------+ +--------------+
Client (Mobile) -->| API Gateway |---> LB ---> | Application |
(Client (Web)) --> | (Rate limiting)| | Servers |
+---------------+ +--------------+
| |
| |
V V
+-------------+ +--------------+
| Message | | Notification |
| Queues | | Servers |
+-------------+ +--------------+
|
V
+---------------+
| Databases | (Cassandra, File Storage)
+---------------+
Salin selepas log masuk
Salin selepas log masuk
2. Seni Bina Aras Rendah (LLD): Butiran Nitty-Gritty
Dalam LLD, kami menumpukan pada pelaksanaan dan butiran teknikal komponen individu. Di sinilah kita menyelami lebih dalam algoritma, pembahagian pangkalan data, kaedah penyulitan dan protokol rangkaian.
Konsep Utama dalam LLD:
-
Sistem Penghantaran Mesej:
- WhatsApp menggunakan protokol XMPP untuk penghantaran mesej masa nyata. Ini ialah protokol yang ringan dan cekap yang mengendalikan pemesejan satu-satu dan kumpulan.
- Mesej disimpan sementara jika penerima berada di luar talian dan dihantar sebaik sahaja mereka masuk dalam talian.
-
Penyulitan Hujung-ke-Hujung:
Penyulitan hujung ke hujung WhatsApp adalah berdasarkan Protokol Isyarat. Ideanya mudah tetapi genius:
- Setiap mesej mempunyai kunci penyulitan uniknya sendiri.
- Baik WhatsApp atau mana-mana pihak ketiga tidak boleh membaca mesej anda kerana hanya pengirim dan penerima yang memegang kekunci yang diperlukan.
Jika WhatsApp adalah novel pengintip, mesej itu akan merosakkan diri sendiri jika orang yang salah cuba membacanya!
-
Storan dan Replikasi Data:
-
Cassandra (pangkalan data NoSQL) digunakan untuk menyimpan mesej sembang. kenapa? Ia diedarkan, sangat tersedia dan boleh mengendalikan replikasi merentas berbilang pusat data. Cassandra memastikan bahawa walaupun pelayan ranap (yang berlaku apabila pelayan memutuskan bahawa mereka perlu tidur sebentar), data itu tidak hilang.
- Fail media (seperti gambar dan video) disimpan secara berasingan daripada mesej teks, selalunya dalam sistem storan fail berasaskan awan.
-
Mengendalikan Pengguna Luar Talian:
- Jika anda menghantar mesej dan penerima berada di luar talian, mesej itu akan beratur menggunakan sistem seperti Kafka/Redis. Ia seperti meninggalkan nota di pintu seseorang apabila mereka tiada di rumah, kecuali nota itu disimpan dengan selamat dalam baris gilir.
-
Perkongsian Pangkalan Data:
- Dengan berjuta-juta pengguna, WhatsApp tidak boleh menyimpan data semua orang dalam satu pangkalan data gergasi. Itu sama seperti cuba memasukkan semua orang di dunia ke dalam satu lif.
- Sebaliknya, WhatsApp memecahkan pangkalan data. Sharding adalah seperti membahagikan lif kepada seratus yang lebih kecil, masing-masing bertanggungjawab ke atas kumpulan penggunanya sendiri.
Carta Aliran LLD:
Berikut ialah carta alir LLD yang dipermudahkan yang memfokuskan pada pemesejan masa nyata dan baris gilir mesej:
+---------------+ +--------------+
Client (Mobile) -->| API Gateway |---> LB ---> | Application |
(Client (Web)) --> | (Rate limiting)| | Servers |
+---------------+ +--------------+
| |
| |
V V
+-------------+ +--------------+
| Message | | Notification |
| Queues | | Servers |
+-------------+ +--------------+
|
V
+---------------+
| Databases | (Cassandra, File Storage)
+---------------+
Salin selepas log masuk
Salin selepas log masuk
3. Carta Aliran: Wira Reka Bentuk Kami
Mari tambahkan beberapa rajah untuk menjadikan perkara itu sangat jelas. Bayangkan carta alir sebagai pelan tindakan arkitek; ia membantu kami memahami sistem secara visual.
Aliran Penghantaran Mesej:
+------------------+ Send Message +-------------------+
| Client App |---------------->| API Gateway |
+------------------+ +-------------------+
| |
| Authenticate User |
V V
+----------------+ +------------------+
| Message Queue | <--Store Msg---| Application |
| (Kafka/Redis) | | Servers (XMPP) |
+----------------+ +------------------+
| |
| Offline/Store Msg |
|------------------------------->
V
+-------------+
| Database | (Sharded Cassandra, File Storage)
+-------------+
Salin selepas log masuk
Aliran Pengambilan Mesej:
Client (Mobile App)
|
V
API Gateway ---> Authenticate ---> Forward to Application Server
|
V
Load Balancer ---> Routes to Least Busy Server
|
V
Message Queue ---> Holds the message if the user is offline
|
V
Database ---> Saves the message for future retrieval
Salin selepas log masuk
4. Pecahan Komponen Teras
Mari kita pecahkan beberapa komponen kritikal dengan lebih terperinci:
-
XMPP: Protokol pemesejan yang digunakan untuk menghantar dan menerima mesej masa nyata.
-
Kafka/Redis: Bertanggungjawab untuk beratur mesej apabila penerima berada di luar talian.
-
Cassandra: Pangkalan data NoSQL yang menyimpan mesej, data pengguna dan sejarah sembang.
-
Protokol Isyarat: Menguasakan penyulitan hujung ke hujung untuk privasi mesej.
-
Sharding: Membahagikan pangkalan data kepada bahagian yang lebih kecil dan lebih mudah diurus untuk mengendalikan berjuta-juta pengguna.
5. Mengapa Komponen Ini?
Kenapa Cassandra?
- Oleh kerana WhatsApp memerlukan ketersediaan yang tinggi, kependaman rendah dan keupayaan untuk mengendalikan pangkalan data yang diedarkan di beberapa lokasi, Cassandra sangat sesuai. Selain itu, ia direka untuk tidak pernah turun, dan WhatsApp menyukai kebolehpercayaan itu.
Mengapa XMPP?
- XMPP adalah ringan, cekap dan direka bentuk untuk pemesejan masa nyata. Sesuai untuk sistem yang anda tidak mampu untuk terlambat—seperti memberitahu rakan anda tentang filem bermula dalam masa 5 minit.
Kenapa Kafka/Redis?
- Baris gilir mesej memastikan tiada mesej yang hilang, walaupun penerima sedang bercuti di zon tanpa Wi-Fi. Kafka dan Redis boleh dipercayai, pantas dan berskala.
Mengapa Protokol Isyarat untuk Penyulitan?
- WhatsApp tidak mahu membaca mesej anda (saya berjanji). Dengan penyulitan hujung ke hujung, mereka secara fizikal tidak dapat membacanya kerana hanya anda dan penerima anda yang mempunyai kunci.
6. Fakta Keseronokan dan Pengoptimuman Khusus WhatsApp
-
Sokongan Berbilang peranti: WhatsApp membenarkan pengguna menggunakan akaun yang sama pada berbilang peranti. Ini memerlukan pengurusan sesi yang teliti dan penyegerakan mesej.
-
Storan Media yang Cekap: WhatsApp mengoptimumkan storan media dengan menyahduplikasi fail media yang sama yang dikongsi merentas sembang yang berbeza (kerana kita semua mempunyai seorang rakan yang menghantar meme yang sama kepada setiap kumpulan).
Kesimpulan: Menyatukan Semuanya
Jadi begitulah—lawatan melalui reka bentuk sistem WhatsApp! Kami telah meneroka seni bina peringkat tinggi (HLD), mendalami reka bentuk peringkat rendah (LLD), dan juga melontarkan beberapa jenaka untuk menjadikan perjalanan itu menyeronokkan. Daripada protokol XMPP kepada baris gilir Kafka, pangkalan data Cassandra dan penyulitan Isyarat, WhatsApp ialah karya agung pemesejan masa nyata berskala yang memastikan sembang kumpulan kami hidup dan bermula!
Atas ialah kandungan terperinci Reka Bentuk Sistem WhatsApp: Perjalanan Melucukan Melalui Seni Bina Aras Tinggi dan Aras Rendah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!