Pengenalan ringkas kepada diri saya sendiri: Saya telah menjadi pembangun web bebas selama lebih kurang 1.5 tahun. Saya tidak pernah mempertimbangkan untuk menulis HLD atau LLD. Sebaliknya, saya telah menumpukan pada membangunkan aplikasi berdasarkan keperluan khusus pelanggan saya. Semasa saya bercita-cita untuk beralih ke persekitaran korporat, saya tidak sabar-sabar untuk meningkatkan kemahiran saya dan memperoleh pengetahuan baharu.
Jadi, inilah percubaan saya untuk menulis HLD
Keperluan Pelanggan : Apl Sembang Berasaskan Web E2EE. Boleh diskalakan sehingga 1000 pengguna Serentak pada bila-bila masa.
Seni Bina Sistem
Apl ini kebanyakannya terdiri daripada Frontend(react), Backend(Nod), Pangkalan Data (Redis dan SQL).
-
FrontEnd:
- Ini Menguruskan perkara yang dilihat pengguna
- Mengendalikan Log Masuk Pengguna, Daftar Pengguna.
- Mengendalikan Menghantar dan Menerima mesej.
- Reka Bentuk Responsif.
-
BackEnd:
- Ini Mengurus perkara dan cara mesej dan log masuk dilakukan
- Bertanggungjawab mengurus Log Masuk/ Daftar
- Bertanggungjawab untuk Menyimpan Mesej dan Data Pengguna
- Mengendalikan Laluan Halaman
-
Pangkalan Data:
- Ini Menyimpan Mesej Disulitkan dan Data Pengguna/Maklumat Log Masuk
-
Pelayan WebSocket:
- Perkhidmatan khusus untuk komunikasi dua hala masa nyata antara pengguna.
-
Lapisan Caching (Pilihan):
- Gunakan Redis untuk menyimpan cache sementara pengguna aktif, baris gilir mesej atau status dalam talian untuk meningkatkan prestasi.
Aliran Tahap Tinggi
- Pengguna log masuk melalui bahagian hadapan → Bahagian belakang mengesahkan pengguna.
- Frontend mewujudkan sambungan WebSocket ke bahagian belakang untuk komunikasi masa nyata.
- Apabila pengguna menghantar mesej:
- Pelayan WebSocket menerimanya.
- Ia memproses dan mengarahkan mesej kepada penerima yang dimaksudkan.
- Halaman belakang menyimpan mesej dalam pangkalan data.
- Penerima menerima mesej dalam masa nyata melalui sambungan WebSocket.
Rajah Seni Bina
Aliran Data
-
Daftar Aliran
- Pengguna Mencipta Akaun
- Cincangan Awam dan Peribadi dijana Awam disimpan dalam pangkalan data bersama-sama dengan Maklumat pengguna.
- Setelah Berjaya:
- Mesej Kejayaan
- Ubah hala ke Log Masuk
-
Aliran Log Masuk
- Pengguna digesa untuk Log masuk dengan e-mel dan kata laluan.
- Yang disokong mengesahkan data apabila dimasukkan.
- Setelah Berjaya:
- Pengguna untuk diubah hala ke sembang
- Setelah Ditolak:
- Timbul timbul dimulakan memberitahu perkara yang salah.
-
Aliran Mesej Bilik
- Pengguna menyertai bilik:
- Frontend menghantar ID bilik ke bahagian belakang.
- acara joinRoom disunting ke bilik tertentu.
- Mesej di dalam bilik :
- Mesej Bilik Global tidak disulitkan setakat ini ia hanya dikongsi dan disimpan Dalam pangkalan data.
- Dihantarkan kepada semua peserta di dalam bilik dalam masa nyata.
-
Pengguna - Aliran Mesej Pengguna
- Halaman Depan :
- Halaman hadapan menyulitkan mesej menggunakan kunci awam penerima.
- Mesej Disulitkan dikongsi melalui soket ke hujung belakang.
- Bahagian Belakang :
- Menyimpan Mesej dalam PSQL
- Menghalakan mesej kepada pengguna menggunakan ID pengguna
- Penghujung hadapan penerima menyahsulit mesej
Alir Contoh Terperinci
Aliran Mesej Terus Masa Nyata
-
Hadapan:
- Pengguna menghantar mesej kepada pengguna lain melalui WebSocket.
- Mesej disulitkan dengan kunci awam penerima sebelum dihantar.
-
Belakang:
- Pelayan WebSocket menerima mesej yang disulitkan.
- Mesej disimpan dalam PostgreSQL dengan metadata (cth., pengirim, penerima, cap waktu).
- Halaman belakang mengarahkan mesej yang disulitkan ke sambungan WebSocket penerima.
-
Hadapan Penerima :
- Mesej yang disulitkan diterima melalui WebSocket.
- Kunci peribadi digunakan untuk menyahsulit mesej.
- Mesej plaintext dipaparkan dalam sembang.
Timbunan Teknologi
-
Hadapan:
- React: Untuk membina antara muka pengguna (tetingkap sembang, butang, kotak input).
- API Konteks atau Redux: Untuk mengurus keadaan apl (cth., pengguna semasa, sembang aktif).
- GSAP: Untuk animasi (cth., buih sembang meluncur masuk dengan lancar).
- WebSocket Client: Untuk mewujudkan sambungan masa nyata dengan bahagian belakang.
-
Backend:Node.js Express.js:
- Untuk mengendalikan API REST (untuk log masuk, pendaftaran, mengambil mesej).
- JWT (Token Web JSON): Untuk menjamin komunikasi dengan pengesahan berasaskan token.
- Passport.js: Untuk melaksanakan strategi pengesahan (cth., log masuk Google atau Facebook).
- Socket.IO: Untuk mengendalikan sambungan WebSocket untuk pemesejan masa nyata.
-
Pangkalan Data :
- PostgreSQL: Untuk menyimpan data berterusan seperti profil pengguna, mesej dan butiran bilik sembang.
- Redis (Pilihan): Untuk cache data masa nyata (cth., status pengguna aktif, mesej yang dihantar baru-baru ini).
-
Penghosan dan Penerapan:
- AWS (EC2, S3, RDS): Untuk mengehoskan bahagian belakang, menyimpan fail statik dan mengurus pangkalan data.
- Nginx atau AWS ELB (Load Balancer): Untuk mengagihkan trafik merentas pelayan bahagian belakang.
Keperluan Bukan Fungsian (NFR)
-
Prestasi:
- Sasarkan kependaman mesej masa nyata di bawah 100ms.
- Pastikan operasi baca/tulis yang konsisten untuk 1,000 pengguna.
-
Skalabiliti:
- Backend harus mengendalikan bilangan pengguna yang semakin meningkat dengan menskala secara mendatar (cth., gunakan Redis dan AWS ELB).
- Sokong 10,000 sambungan WebSocket aktif setiap pelayan.
-
Ketersediaan:
- Pastikan 99.9% masa beroperasi dengan sandaran dan pemulihan bencana.
-
Keselamatan:
- Gunakan E2EE untuk pemesejan peribadi.
- Gunakan HTTPS untuk semua data dalam transit.
- Pastikan data dalam keadaan rehat disulitkan dalam PostgresSQL.
Membungkus
Membina Aplikasi Pemesejan Disulitkan Hujung-ke-Hujung yang berskala dan selamat memerlukan keseimbangan yang bijak antara prestasi, kebolehgunaan dan keselamatan. Melalui Reka Bentuk Tahap Tinggi ini, saya berhasrat untuk menunjukkan seni bina dan aliran sistem pemesejan moden yang mampu mengendalikan komunikasi masa nyata sambil memastikan privasi pengguna.
Projek ini bukan sahaja mempamerkan kemahiran teknikal utama seperti React untuk frontend, Node.js untuk backend dan PostgreSQL/Redis untuk pengurusan data, tetapi juga menyerlahkan kepentingan mereka bentuk untuk skala dan kebolehpercayaan.
Jika anda seorang pembangun atau peminat yang berminat untuk mencipta sistem yang mantap atau meneroka lebih lanjut tentang seni bina komunikasi masa nyata, saya harap artikel ini memberikan cerapan yang berharga.
Saya ingin mendengar pendapat atau maklum balas anda! Jangan ragu untuk berhubung, berkongsi idea anda atau bertanya soalan di bahagian komen. Mari terus belajar dan membina!
Nantikan LLD saya juga !
Setiap projek adalah satu langkah yang lebih dekat untuk menguasai kemahiran pembangunan perisian. Yang ini mengajar saya kepentingan mengimbangi kefungsian dengan kebolehskalaan dan saya berharap untuk membina sistem yang lebih kompleks pada masa hadapan!
Atas ialah kandungan terperinci Apl Pemesejan Disulitkan Hujung ke Hujung: Reka Bentuk dan Seni Bina Peringkat Tinggi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!
Kenyataan:Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn