日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

聽說你會架構設計?來,弄一個公交&地鐵乘車系統

來源: 責編: 時間:2023-10-10 18:32:22 326觀看
導讀1. 引言1.1 上班通勤的日常“叮鈴鈴”,“叮鈴鈴”,早上七八點,你還在溫暖的被窩里和鬧鐘“斗智斗勇”。突然,你意識到已經快遲到了,于是像個閃電俠一樣沖進衛生間,速洗漱,急穿衣,左手抄起手機,右手拿起面包,邊穿衣邊啃早餐。這

1. 引言

1.1 上班通勤的日常

“叮鈴鈴”,“叮鈴鈴”,早上七八點,你還在溫暖的被窩里和鬧鐘“斗智斗勇”。cgJ28資訊網——每日最新資訊28at.com

突然,你意識到已經快遲到了,于是像個閃電俠一樣沖進衛生間,速洗漱,急穿衣,左手抄起手機,右手拿起面包,邊穿衣邊啃早餐。cgJ28資訊網——每日最新資訊28at.com

這個時候,通勤的老難題又擺在了你面前:要不要吃完這口面包、刷牙和洗臉,還是先沖出門趕車?cgJ28資訊網——每日最新資訊28at.com

好不容易做出了一個艱難的決定——放下面包,快步沖出門。你拿出手機,點開了熟悉的地鐵乘車 App 或公交地鐵乘車碼小程序。cgJ28資訊網——每日最新資訊28at.com

然后,一張二維碼在屏幕上亮了起來,這可是你每天通勤的“敲門磚”。cgJ28資訊網——每日最新資訊28at.com

你快步走到地鐵站,將手機二維碼掃描在閘機上,"嗖"的一聲,閘機打開,你輕松通過,不再需要排隊買票,不再被早高峰的擁擠鬧心。cgJ28資訊網——每日最新資訊28at.com

你走進地鐵車廂,擠到了一個角落,拿出手機,開始計劃一天的工作。cgJ28資訊網——每日最新資訊28at.com

1.2 公交&地鐵乘車系統

正如上文所說,人們只需要一臺手機,一個二維碼就可以完成上班通勤的所有事項。cgJ28資訊網——每日最新資訊28at.com

那這個便捷的公交或地鐵乘車系統是如何設計的呢?它背后的技術和架構是怎樣支撐著你我每天的通勤生活呢?cgJ28資訊網——每日最新資訊28at.com

今天讓我們一起揭開這個現代都市打工人通勤小能手的面紗,深入探討乘車系統的設計與實現。cgJ28資訊網——每日最新資訊28at.com

在這個文章中,小?將帶你走進乘車系統的世界,一探究竟,看看它是如何在短短幾年內從科幻電影中走出來,成為我們日常生活不可或缺的一部分。cgJ28資訊網——每日最新資訊28at.com

2. 需求設計

2.1 功能需求

圖片圖片cgJ28資訊網——每日最新資訊28at.com

  • 用戶注冊和登錄: 用戶可以通過手機應用或小程序注冊賬號,并使用賬號登錄系統。
  • 路線查詢: 用戶可以查詢地鐵的線路和站點信息,包括發車時間、車票價格等。
  • 獲取乘車二維碼: 系統根據用戶的信息生成乘車二維碼。
  • 獲取地鐵實時位置: 用戶可以查詢地鐵的實時位置,并查看地鐵離當前站臺還有多久到達。
  • 乘車掃描和自動支付: 用戶在入站和出站時通過掃描二維碼來完成乘車,系統根據乘車里程自動計算費用并進行支付。
  • 交易記錄查詢: 用戶可以查詢自己的交易歷史記錄,包括乘車時間、金額、線路等信息。

2.2 乘車系統的非功能需求

乘車系統的用戶量非常大,據《中國主要城市通勤檢測報告-2023》數據顯示,一線城市每天乘公交&地鐵上班的的人數普遍超過千萬,平均通勤時間在 45-60 分鐘,并集中在早高峰和晚高峰時段。cgJ28資訊網——每日最新資訊28at.com

所以,設計一個熱點數據分布非均勻、人群分布非均勻的乘車系統時,需要考慮如下幾點:cgJ28資訊網——每日最新資訊28at.com

  • 用戶分布不均勻,一線城市的乘車系統用戶,超出普通城市幾個數量級。
  • 時間分布不均勻,乘車系統的設計初衷是方便上下班通勤,所以早晚高峰的用戶數會高出其它時間段幾個數量級。
  • 高并發: 考慮到公交車/地鐵系統可能同時有大量的用戶在高峰時段使用,系統需要具備高并發處理能力。
  • 高性能: 為了提供快速的查詢和支付服務,系統需要具備高性能,響應時間應盡可能短。
  • 可擴展性: 隨著用戶數量的增加,系統應該容易擴展,以滿足未來的需求。
  • 可用性: 系統需要保證24/7的可用性,隨時提供服務。
  • 安全和隱私保護: 系統需要確保用戶數據的安全和隱私,包括支付信息和個人信息的保護。

3. 概要設計

3.1 核心組件

圖片圖片cgJ28資訊網——每日最新資訊28at.com

  • 前端應用: 開發手機 App 和小程序,提供用戶注冊、登錄、查詢等功能。
  • 后端服務: 設計后端服務,包括用戶管理、路線查詢、二維碼管理、訂單處理、支付系統等。
  • 數據庫: 使用關系型數據庫 MySQL 集群存儲用戶信息、路線信息、交易記錄等數據。
  • 推送系統: 將乘車后的支付結果,通過在線和離線兩種方式推送給用戶手機上。
  • 負載均衡和消息隊列: 考慮使用負載均衡和消息隊列技術來提高系統性能。

3.2 乘車流程

1)用戶手機與后臺系統的交互

交互時序圖如下:cgJ28資訊網——每日最新資訊28at.com

圖片圖片cgJ28資訊網——每日最新資訊28at.com

1. 用戶注冊和登錄: 用戶首先需要在手機應用上注冊并登錄系統,提供個人信息,包括用戶名、手機號碼、支付方式等。cgJ28資訊網——每日最新資訊28at.com

2. 查詢乘車信息: 用戶可以使用手機應用查詢公交車/地鐵的路線和票價信息,用戶可以根據自己的出行需求選擇合適的線路。cgJ28資訊網——每日最新資訊28at.com

3. 生成乘車二維碼: 用戶登錄后,系統會生成一個用于乘車的二維碼,這個二維碼可以在用戶手機上隨時查看。這個二維碼是城市公交系統的通用乘車二維碼,同時該碼關聯到用戶的賬戶和付款方式,用戶可以隨時使用它乘坐任何一輛公交車或地鐵。cgJ28資訊網——每日最新資訊28at.com

2)用戶手機與公交車的交互

交互 UML 狀態圖如下:cgJ28資訊網——每日最新資訊28at.com

圖片圖片cgJ28資訊網——每日最新資訊28at.com

  1. 用戶進站掃碼: 當用戶進入地鐵站時,他們將手機上的乘車碼掃描在進站設備上。這個設備將掃描到的乘車碼發送給后臺系統。
  2. 進站數據處理: 后臺系統接收到進站信息后,會驗證乘車碼的有效性,檢查用戶是否有進站記錄,并記錄下進站的時間和地點。
  3. 用戶出站掃碼: 用戶在乘車結束后,將手機上的乘車碼掃描在出站設備上。
  4. 出站數據處理: 后臺系統接收到出站信息后,會驗證乘車碼的有效性,檢查用戶是否有對應的進站記錄,并記錄下出站的時間和地點。

3)后臺系統的處理

  1. 乘車費用計算: 基于用戶的進站和出站地點以及乘車規則,后臺系統計算乘車費用。這個費用可以根據不同的城市和運營商有所不同。
  2. 費用記錄和扣款: 系統記錄下乘車費用,并從用戶的付款方式(例如,支付寶或微信錢包)中扣除費用。
  3. 乘車記錄存儲: 所有的乘車記錄,包括進站、出站、費用等信息,被存儲在乘車記錄表中,以便用戶查看和服務提供商進行結算。
  4. 通知用戶: 如果有需要,系統可以向用戶發送通知,告知他們的乘車費用已被扣除。
  5. 數據庫交互: 在整個過程中,系統需要與數據庫交互來存儲和檢索用戶信息、乘車記錄、費用信息等數據。

3. 詳細設計

3.1 數據庫設計

  • 用戶信息表(User),包括用戶ID、手機號、密碼、支付方式、創建時間等。
  • 二維碼表 (QRCode),包括二維碼ID、用戶ID、城市ID、生成時間、有效期及二維碼數據等。
  • 車輛&地鐵車次表 (Vehicle),包括車輛ID、車牌或地鐵列車號、車型(公交、地鐵)、掃描設備序列號等。
  • 乘車記錄表 (TripRecord),包括記錄ID、用戶ID、車輛ID、上下車時間、起止站點等。
  • 支付記錄表 (PaymentRecord),包括支付ID、乘車記錄ID、交易時間、交易金額、支付方式、支付狀態等。

以上是一些在公交車&地鐵乘車系統中需要設計的數據庫表及其字段的基本信息,后續可根據具體需求和系統規模,還可以進一步優化表結構和字段設計,以滿足性能和擴展性要求。cgJ28資訊網——每日最新資訊28at.com

詳細設計除了要設計出表結構以外,我們還針對兩個核心問題進行討論:cgJ28資訊網——每日最新資訊28at.com

  • 最短路線查詢
  • 乘車二維碼管理

3.2 最短路線查詢

根據交通部門給的公交&地鐵路線,我們可以繪制如下站點圖:cgJ28資訊網——每日最新資訊28at.com

圖片圖片cgJ28資訊網——每日最新資訊28at.com

假設圖中的站點有 A-F,涉及到的交通工具有地鐵 1 號線和 2 路公交,用戶的起點和終點分別為 A、F 點。我們可以使用 Dijkstra 算法來求兩點之間的最短路徑,具體步驟為:cgJ28資訊網——每日最新資訊28at.com

步驟cgJ28資訊網——每日最新資訊28at.com

已遍歷集合cgJ28資訊網——每日最新資訊28at.com

未遍歷集合cgJ28資訊網——每日最新資訊28at.com

1cgJ28資訊網——每日最新資訊28at.com

選入A,此時最短路徑 A->A = 0,再以 A 為中間點,開始尋找下一個鄰近節點cgJ28資訊網——每日最新資訊28at.com

{B、C、D、E、F},其中與 A 相鄰的節點有 B 和 C,AB=6,AC=3。接下來,選取較短的路徑節點 C 開始遍歷cgJ28資訊網——每日最新資訊28at.com

2cgJ28資訊網——每日最新資訊28at.com

選取C,A->C=3,此時已遍歷集合為{A、C},以 A 和 C 為中間點,開始尋找下一個鄰近節點cgJ28資訊網——每日最新資訊28at.com

{B、D、E、F},其中與 A、C 相鄰的節點有 B 和 D,AB=6,ACD=3+4=7。接下來,選取較短的路徑節點 B 開始遍歷cgJ28資訊網——每日最新資訊28at.com

3cgJ28資訊網——每日最新資訊28at.com

選取B,A->B=6,此時已遍歷集合為{A、C、B},A 相鄰的節點已經遍歷結束,開始尋找和 B、C 相近的節點cgJ28資訊網——每日最新資訊28at.com

{D、E、F},其中與 B、C 相鄰的節點有 D,節點 D 在之前已經有了一個距離記錄(7),現在新的可選路徑是 ABD=6+5=11。顯然第一個路徑更短,于是將 D 的最近距離 7 加入到集合中cgJ28資訊網——每日最新資訊28at.com

4cgJ28資訊網——每日最新資訊28at.com

選取D,A->D=7,此時已遍歷集合為{A、C、B、D},尋找 D 相鄰的節點cgJ28資訊網——每日最新資訊28at.com

{E、F},其中 DE=2,DF=3,選取最近路徑的節點 E 加入集合cgJ28資訊網——每日最新資訊28at.com

5cgJ28資訊網——每日最新資訊28at.com

選取 E,A->E=7+2=9,此時已遍歷集合為{A、C、B、D、E},繼續尋找 D 和 E 相近的節點cgJ28資訊網——每日最新資訊28at.com

{F},其中 DF=3,DEF=2+5=7,于是F的最近距離為7+3=10.cgJ28資訊網——每日最新資訊28at.com

6cgJ28資訊網——每日最新資訊28at.com

選取F,A->F=10,此時遍歷集合為{A、C、B、D、E、F}cgJ28資訊網——每日最新資訊28at.com

所有節點已遍歷結束,從 A 點出發,它們的最近距離分別為{A=0,C=3,B=6,D=7,E=9,F=10}cgJ28資訊網——每日最新資訊28at.com

在用戶查詢路線之前,交通部門會把公交 & 地鐵的站點經緯度信息輸入到路線管理系統,并根據二維的空間經緯度編碼存儲對應的站點信息。cgJ28資訊網——每日最新資訊28at.com

我們設定西經為負,南緯為負,所以地球上的經度范圍就是[-180, 180],緯度范圍就是[-90,90]。如果以本初子午線、赤道為界,地球可以分成 4 個部分。cgJ28資訊網——每日最新資訊28at.com

以下是該功能用戶和系統之間的交互、二維碼信息存儲、以及高并發請求處理的詳細說明:cgJ28資訊網——每日最新資訊28at.com

  1. 用戶與系統交互: 用戶首先在手機 App 上登錄,系統會驗證用戶的身份和付款方式。一旦驗證成功,系統根據用戶的身份信息和付款方式,動態生成一個 QR 碼,這個 QR 碼包含了用戶的標識信息和相關的乘車參數。
  2. 二維碼信息存儲: 生成的二維碼信息需要在后臺進行存儲和關聯。通常,這些信息會存儲在一個專門的數據庫表中,該表包含以下字段:
  • 二維碼ID:主鍵ID,唯一標識一個二維碼。
  • 用戶ID:與乘車碼關聯的用戶唯一標識。
  • 二維碼數據:QR碼的內容,包括用戶信息和乘車參數。
  • 生成時間:二維碼生成的時間戳,用于后續的驗證和管理。
  • 有效期限:二維碼的有效期,通常會設置一個時間限制,以保證安全性。
  1. 高并發請求處理: 在高并發情況下,大量的用戶會同時生成和掃描二維碼,因此需要一些策略來處理這些請求:
  • 負載均衡: 后臺系統可以采用負載均衡技術,將請求分散到多個服務器上,以分擔服務器的負載。
  • 緩存優化: 二維碼的生成是相對耗時的操作,可以采用 Redis 來緩存已生成的二維碼,避免重復生成。
  • 限制頻率: 為了防止濫用,可以限制每個用戶生成二維碼的頻率,例如,每分鐘只允許生成 5  次,這可以通過限流的方式來實現。

總之,通過 QR 碼技術生成乘車碼,后臺系統需要具備高并發處理的能力,包括負載均衡、緩存和頻率限制等策略,以確保用戶能夠快速獲得有效的乘車二維碼。cgJ28資訊網——每日最新資訊28at.com

同時,二維碼信息需要被安全地存儲和管理,比如:加密存儲以保護用戶的隱私和付款信息。cgJ28資訊網——每日最新資訊28at.com

不清楚如何限流的,可以看我之前的這篇文章:若我問到高可用,閣下又該如何應對呢?cgJ28資訊網——每日最新資訊28at.com

4. 乘車系統的發展

4.1 其它設計

除此之外,公交車或地鐵的定位和到站時間計算可能還涉及定位設備、GPS 系統、NoSQL 數據庫、用戶 TCP 連接管理系統等核心組件,并通過實時數據采集、位置處理、到站時間計算和信息推送等流程來為用戶提供準確的乘車信息。cgJ28資訊網——每日最新資訊28at.com

同時,自動支付也是為了方便用戶的重要功能,可以通過與第三方支付平臺的集成來實現。cgJ28資訊網——每日最新資訊28at.com

4.2 未來發展

公交車/地鐵乘車系統的未來發展可以包括以下方向:cgJ28資訊網——每日最新資訊28at.com

  • 智能化乘車: 引入智能設備,如人臉自動識別乘客、人臉扣款等。
  • 大數據分析: 利用大數據技術分析乘車數據,提供更好的服務。

在設計和發展過程中,也要不斷考慮用戶體驗、性能和安全,確保系統能夠滿足不斷增長的需求。cgJ28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-12752-0.html聽說你會架構設計?來,弄一個公交&地鐵乘車系統

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 深入了解歸并排序:原理、性能分析與 Java 實現

下一篇: 500 多個純 CSS 實現的 Loading 效果,炫酷!

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 武夷山市| 公主岭市| 东丽区| 岗巴县| 南汇区| 集贤县| 泸定县| 丰原市| 广州市| 泊头市| 寻甸| 民权县| 河东区| 山阳县| 深泽县| 奉贤区| 上饶县| 蓬安县| 阿合奇县| 布尔津县| 南昌县| 奈曼旗| 定襄县| 博乐市| 司法| 霍城县| 岳阳县| 县级市| 即墨市| 亳州市| 阿克| 盈江县| 莱芜市| 新昌县| 会同县| 杭锦旗| 贞丰县| 伊宁市| 鹤山市| 长汀县| 岚皋县|