設(shè)計(jì)概述
通達(dá)是某上市公司全資投資成立的一家物流快遞公司酥诽,目前需要開(kāi)發(fā)一套同城快遞系統(tǒng)。該系統(tǒng)分為用戶端皱埠、快遞員端肮帐、服務(wù)端幾個(gè)部分,可以由用戶自助下單边器,搶單成功的快遞員會(huì)負(fù)責(zé)上門完成用戶的遞送需求训枢。
公司現(xiàn)有開(kāi)發(fā)人員20人,系統(tǒng)預(yù)計(jì)在兩個(gè)月后上線忘巧。
功能概述
- 用戶可以在用戶端APP自助下單并支付
- 快遞員端APP每隔30秒上報(bào)一次位置信息
- 用戶支付成功后恒界,系統(tǒng)會(huì)將訂單推送給距離用戶5km以內(nèi)的所有快遞員
- 快遞員可以搶單,搶到單的快遞員將會(huì)由系統(tǒng)下發(fā)用戶的取件地址
- 系統(tǒng)將得到配單的快遞員信息發(fā)送給用戶砚嘴,用戶可以查看該快遞員的位置十酣、聯(lián)系方式
- 快遞員取件后在快遞員端APP標(biāo)注訂單狀態(tài)為已收件
- 快件運(yùn)送過(guò)程中,用戶可以持續(xù)查看快遞員的位置际长、聯(lián)系方式
- 快遞員將快件送達(dá)后在快遞員端APP標(biāo)注訂單狀態(tài)為已送達(dá)
- 用戶可以查詢?nèi)齻€(gè)月內(nèi)的歷史訂單
非功能性需求
- 系統(tǒng)預(yù)計(jì)上線后三個(gè)月日訂單超過(guò)1萬(wàn)耸采,一年后日訂單超過(guò)50萬(wàn)
- 支持接入第三方支付
- 數(shù)據(jù)使用加密傳輸
- 用戶單次查詢響應(yīng)時(shí)間<500ms,95%響應(yīng)時(shí)間<1000ms工育,單機(jī)TPS>20
- 下單響應(yīng)時(shí)間<500ms虾宇,95%響應(yīng)時(shí)間<1000ms,單機(jī)TPS>20
- 系統(tǒng)核心可用性目標(biāo)99.99%
系統(tǒng)關(guān)鍵用例圖
系統(tǒng)整體架構(gòu)和部署
架構(gòu)技術(shù)分析:
- 快遞員的位置信息是一個(gè)近實(shí)時(shí)數(shù)據(jù)翅娶,并發(fā)讀寫(xiě)壓力較大文留,使用MySQL會(huì)嚴(yán)重影響性能好唯,并且位置數(shù)據(jù)沒(méi)有必要進(jìn)行持久化竭沫,因此使用Redis集群以KV方式存儲(chǔ)快遞員位置燥翅,其中Key是快遞員的ID,Value是序列化的位置數(shù)據(jù)蜕提,并且新版的Redis已經(jīng)有Geo組件可以直接支持基于位置信息的計(jì)算森书。
- 訂單信息的查詢性能同樣使用Redis緩存進(jìn)行優(yōu)化,這一批Redis服務(wù)器可以與負(fù)責(zé)位置信息的Redis服務(wù)器分開(kāi)部署谎势。
- 支付服務(wù)調(diào)用第三方支付接口完成訂單支付凛膏。
- 訂單服務(wù)在下單時(shí)會(huì)向位置計(jì)算服務(wù)發(fā)送用戶的地址,位置計(jì)算服務(wù)計(jì)算出所有距離用戶5km以內(nèi)的快遞員ID脏榆,并將這些ID發(fā)送給消息隊(duì)列猖毫,由推送服務(wù)拉取后異步通知各快遞員。
- 搶單是一個(gè)類似于秒殺的操作须喂,需要在網(wǎng)關(guān)和搶單服務(wù)側(cè)進(jìn)行一定的限流措施吁断,直接由搶單服務(wù)來(lái)處理并發(fā)請(qǐng)求,并將真正搶到單的快遞員ID寫(xiě)入訂單中坞生。
- 用戶查詢訂單信息仔役,使用Redis集群進(jìn)行性能優(yōu)化。
- MySQL中存儲(chǔ)所有的快遞員信息(聯(lián)系方式)是己、以及近三個(gè)月內(nèi)的所有訂單信息又兵,三個(gè)月以上的訂單遷移至ElasticSearch進(jìn)行離線存儲(chǔ)。
下單搶單場(chǎng)景動(dòng)態(tài)模型
業(yè)務(wù)活動(dòng)圖
服務(wù)器時(shí)序圖
備注:在下單搶單這個(gè)場(chǎng)景中卒废,涉及到用戶沛厨、快遞員、系統(tǒng)三個(gè)角色摔认,用戶提交訂單并支付成功后逆皮,系統(tǒng)會(huì)生成該筆訂單并計(jì)入數(shù)據(jù)庫(kù),然后調(diào)用位置計(jì)算服務(wù)篩選出快遞員级野,并推送搶單通知页屠;快遞員搶單成功后,系統(tǒng)將快遞員信息蓖柔、用戶信息更新到訂單辰企,并將訂單推送給快遞員,同時(shí)用戶端的訂單詳情也會(huì)顯示快遞員的信息况鸣。
訂單狀態(tài)圖
備注:考慮訂單出現(xiàn)異常的情況牢贸,包括支付失敗、無(wú)法聯(lián)系上用戶取件镐捧、配送失敗潜索,另外訂單還應(yīng)當(dāng)有取消和刪除狀態(tài)臭增。