Aplikasi perkongsian perjalanan, seperti Uber atau Lyft, melibatkan sistem dan proses kompleks yang menghubungkan penunggang dengan pemandu dengan lancar. Dalam blog ini, kami akan meneroka Reka Bentuk Tahap Rendah (LLD) aplikasi perkongsian perjalanan untuk memahami komponen, interaksi dan prinsip reka bentuk yang menggerakkan platform sedemikian.
Gambaran Keseluruhan Keperluan
Keperluan Fungsian:
-
Pendaftaran dan Log Masuk Pengguna: Penunggang dan pemandu mesti boleh mendaftar dan log masuk.
-
Tempahan Perjalanan: Penunggang seharusnya boleh menempah perjalanan dengan menyatakan lokasi pengambilan dan penghantaran.
-
Padanan Pemandu: Sistem harus menetapkan pemandu tersedia terdekat kepada penunggang.
-
Penjejakan Masa Nyata: Penunggang seharusnya dapat menjejaki lokasi pemandu dalam masa nyata.
-
Sistem Pembayaran: Penunggang boleh membayar untuk perjalanan mereka menggunakan kaedah yang berbeza.
-
Penilaian dan Ulasan: Penunggang dan pemandu seharusnya boleh menilai dan mengulas antara satu sama lain.
Keperluan Bukan Fungsian:
-
Skalabiliti: Sistem harus mengendalikan sejumlah besar pengguna secara serentak.
-
Kebolehpercayaan: Pastikan tempahan dan pembayaran tepat.
-
Kependaman Rendah: Kemas kini masa nyata hendaklah pantas dan lancar.
-
Toleransi Kesalahan: Tangani ranap sistem dengan anggun.
Komponen Utama dan Tanggungjawabnya
1. Perkhidmatan Pengguna
-
Tanggungjawab:
- Pendaftaran dan pengesahan pengguna.
- Kekalkan profil pengguna (Penunggang dan Pemandu).
-
Entiti Utama:
- Pengguna: Mengandungi butiran seperti ID pengguna, nama, e-mel, telefon, jenis (penunggang/pemandu), dll.
- Butiran Pemandu: Maklumat kenderaan, lesen, status ketersediaan.
2. Perkhidmatan Pengurusan Tunggangan
-
Tanggungjawab:
- Benarkan penunggang menempah tunggangan.
- Kekalkan kitaran hayat perjalanan (diminta, diterima, diselesaikan).
- Jejak status tunggangan.
-
Entiti Utama:
- Tunggangan: Mengandungi ID perjalanan, ID penunggang, ID pemandu, lokasi pengambilan dan penghantaran, status, tambang, dsb.
3. Perkhidmatan Pemadanan Pemandu
-
Tanggungjawab:
- Kenal pasti pemacu tersedia terdekat menggunakan data geolokasi.
- Tugaskan pemandu kepada penunggang.
-
Algoritma Utama:
-
Formula Haversine: Kira jarak antara dua lokasi menggunakan latitud dan longitud.
-
Barisan Keutamaan: Untuk mengekalkan pemandu tersedia terdekat yang disusun mengikut jarak.
4. Perkhidmatan Lokasi Masa Nyata
-
Tanggungjawab:
- Jejak lokasi masa nyata pemandu.
- Kongsi lokasi pemandu dengan penunggang semasa perjalanan.
-
Entiti Utama:
- Lokasi: Mengandungi ID pemandu, latitud, longitud, cap masa.
-
Teknologi:
- WebSocket atau MQTT untuk kemas kini masa nyata.
5. Perkhidmatan Pembayaran
-
Tanggungjawab:
- Kira tambang perjalanan berdasarkan jarak dan masa.
- Proses pembayaran melalui pelbagai kaedah (kad kredit, dompet, dll.).
- Kendalikan bayaran balik dan pembatalan.
-
Entiti Utama:
- Pembayaran: Mengandungi ID pembayaran, ID perjalanan, jumlah, status (berjaya/gagal).
-
Ciri Utama:
- Integrasi dengan gerbang pembayaran (cth. Stripe, PayPal).
6. Perkhidmatan Penilaian dan Semakan
-
Tanggungjawab:
- Benarkan penunggang dan pemandu menilai dan mengulas antara satu sama lain.
- Penilaian dan maklum balas kedai.
-
Entiti Utama:
- Penilaian: Mengandungi ID perjalanan, ID pengguna, ID pemandu, markah, ulasan.
7. Perkhidmatan Pemberitahuan
-
Tanggungjawab:
- Hantar pemberitahuan kepada penunggang dan pemandu (cth., permintaan perjalanan, kemas kini status).
-
Teknologi:
- Pemberitahuan tolak (Firebase Cloud Messaging atau Perkhidmatan Pemberitahuan Apple Push).
- Penyepaduan SMS dan e-mel.
Reka Bentuk Pangkalan Data
Jadual dan Perhubungan:
-
Jadual Pengguna:
- user_id (Kunci Utama)
- nama, e-mel, telefon, jenis (penunggang/pemandu), dsb.
-
Jadual Butiran Pemandu:
- id_pemandu (Pengguna rujukan Kunci Asing)
- info_kenderaan, nombor_lesen, status_tersedia.
-
Meja Tunggangan:
- ride_id (Kunci Utama)
- id_rider (Pengguna rujukan Kunci Asing)
- id_pemandu (Pengguna rujukan Kunci Asing)
- lokasi_pengambilan, lokasi_penghantaran, tambang, status.
-
Jadual Lokasi:
- id_lokasi (Kunci Utama)
- id_pemandu (Pengguna rujukan Kunci Asing)
- latitud, longitud, cap masa.
-
Jadual Pembayaran:
- id_bayaran (Kunci Utama)
- ride_id (Tunggangan merujuk Kunci Asing)
- jumlah, kaedah_pembayaran, status.
-
Jadual Penilaian:
- rating_id (Kunci Utama)
- ride_id (Tunggangan merujuk Kunci Asing)
- id_pengguna, markah, ulasan.
Rajah Jujukan: Tempah Perjalanan
Langkah-langkah:
- Penunggang meminta perjalanan dengan memasukkan lokasi pengambilan dan penghantaran.
- Perkhidmatan Pengurusan Ride mencipta permintaan perjalanan.
- Perkhidmatan Pemadanan Pemandu mengenal pasti pemandu tersedia terdekat dan menghantar permintaan.
- Pemandu menerima atau menolak tunggangan.
- Setelah diterima, penunggang menerima pengesahan dan penjejakan masa nyata bermula.
- Setelah perjalanan selesai, Perkhidmatan Pembayaran memproses tambang.
- Kedua-dua penunggang dan pemandu boleh menilai dan menyemak pengalaman.
Rajah Kelas
Kelas Utama:
-
Pengguna: Atribut termasuk user_id, nama, e-mel, telefon, jenis (Penunggang/Pemandu).
-
Tunggangan: Atribut termasuk ride_id, rider, driver, pickup_location, dropoff_location, tambang, status.
-
Pemandu: Memanjangkan Pengguna, dengan atribut tambahan seperti vehicle_info, license_nomber.
-
Pembayaran: Atribut termasuk id_bayaran, perjalanan, jumlah, kaedah_pembayaran, status.
-
Lokasi: Atribut termasuk pemandu, latitud, longitud, cap masa.
-
Penilaian: Atribut termasuk perjalanan, pengguna, skor, ulasan.
Timbunan Teknologi
Belakang:
-
Node.js dengan Express.js untuk membina API.
Hadapan:
-
React.js untuk pengalaman pengguna yang lancar.
Pangkalan Data:
-
MySQL atau PostgreSQL untuk storan data berstruktur.
-
Redis untuk menyimpan cache lokasi pemandu.
Komunikasi Masa Nyata:
-
WebSockets atau Firebase untuk kemas kini lokasi.
Gerbang Pembayaran:
- Integrasi dengan Stripe, PayPal atau perkhidmatan yang serupa.
Cabaran dan Penyelesaian
-
Skalabiliti:
- Gunakan seni bina perkhidmatan mikro untuk menskalakan komponen individu secara bebas.
-
Kemas Kini Masa Nyata:
- Gunakan WebSockets atau MQTT untuk mengurangkan kependaman untuk penjejakan langsung.
-
Ketersediaan Pemandu:
- Laksanakan sistem baris gilir untuk mengurus permintaan pemandu dengan berkesan.
-
Toleransi Kesalahan Sistem:
- Pastikan percubaan semula dan mekanisme sandaran untuk operasi kritikal (mis., pemprosesan pembayaran).
Atas ialah kandungan terperinci Reka Bentuk Aras Rendah (LLD) bagi Aplikasi Perkongsian Tunggangan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!