架構(gòu)師訓(xùn)練營(yíng)大作業(yè) 架構(gòu)設(shè)計(jì)文檔

設(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è)月后上線忘巧。

功能概述

  1. 用戶可以在用戶端APP自助下單并支付
  2. 快遞員端APP每隔30秒上報(bào)一次位置信息
  3. 用戶支付成功后恒界,系統(tǒng)會(huì)將訂單推送給距離用戶5km以內(nèi)的所有快遞員
  4. 快遞員可以搶單,搶到單的快遞員將會(huì)由系統(tǒng)下發(fā)用戶的取件地址
  5. 系統(tǒng)將得到配單的快遞員信息發(fā)送給用戶砚嘴,用戶可以查看該快遞員的位置十酣、聯(lián)系方式
  6. 快遞員取件后在快遞員端APP標(biāo)注訂單狀態(tài)為已收件
  7. 快件運(yùn)送過(guò)程中,用戶可以持續(xù)查看快遞員的位置际长、聯(lián)系方式
  8. 快遞員將快件送達(dá)后在快遞員端APP標(biāo)注訂單狀態(tài)為已送達(dá)
  9. 用戶可以查詢?nèi)齻€(gè)月內(nèi)的歷史訂單

非功能性需求

  1. 系統(tǒng)預(yù)計(jì)上線后三個(gè)月日訂單超過(guò)1萬(wàn)耸采,一年后日訂單超過(guò)50萬(wàn)
  2. 支持接入第三方支付
  3. 數(shù)據(jù)使用加密傳輸
  4. 用戶單次查詢響應(yīng)時(shí)間<500ms,95%響應(yīng)時(shí)間<1000ms工育,單機(jī)TPS>20
  5. 下單響應(yīng)時(shí)間<500ms虾宇,95%響應(yīng)時(shí)間<1000ms,單機(jī)TPS>20
  6. 系統(tǒng)核心可用性目標(biāo)99.99%

系統(tǒng)關(guān)鍵用例圖

系統(tǒng)關(guān)鍵用例圖

系統(tǒng)整體架構(gòu)和部署

系統(tǒng)部署圖

架構(gòu)技術(shù)分析:

  1. 快遞員的位置信息是一個(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ì)算森书。
  2. 訂單信息的查詢性能同樣使用Redis緩存進(jìn)行優(yōu)化,這一批Redis服務(wù)器可以與負(fù)責(zé)位置信息的Redis服務(wù)器分開(kāi)部署谎势。
  3. 支付服務(wù)調(diào)用第三方支付接口完成訂單支付凛膏。
  4. 訂單服務(wù)在下單時(shí)會(huì)向位置計(jì)算服務(wù)發(fā)送用戶的地址,位置計(jì)算服務(wù)計(jì)算出所有距離用戶5km以內(nèi)的快遞員ID脏榆,并將這些ID發(fā)送給消息隊(duì)列猖毫,由推送服務(wù)拉取后異步通知各快遞員。
  5. 搶單是一個(gè)類似于秒殺的操作须喂,需要在網(wǎng)關(guān)和搶單服務(wù)側(cè)進(jìn)行一定的限流措施吁断,直接由搶單服務(wù)來(lái)處理并發(fā)請(qǐng)求,并將真正搶到單的快遞員ID寫(xiě)入訂單中坞生。
  6. 用戶查詢訂單信息仔役,使用Redis集群進(jìn)行性能優(yōu)化。
  7. MySQL中存儲(chǔ)所有的快遞員信息(聯(lián)系方式)是己、以及近三個(gè)月內(nèi)的所有訂單信息又兵,三個(gè)月以上的訂單遷移至ElasticSearch進(jìn)行離線存儲(chǔ)。

下單搶單場(chǎng)景動(dòng)態(tài)模型

業(yè)務(wù)活動(dòng)圖

下單搶單場(chǎng)景活動(dòng)圖

服務(wù)器時(shí)序圖

服務(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)圖

訂單狀態(tài)圖

備注:考慮訂單出現(xiàn)異常的情況牢贸,包括支付失敗、無(wú)法聯(lián)系上用戶取件镐捧、配送失敗潜索,另外訂單還應(yīng)當(dāng)有取消和刪除狀態(tài)臭增。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市竹习,隨后出現(xiàn)的幾起案子誊抛,更是在濱河造成了極大的恐慌,老刑警劉巖整陌,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拗窃,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡泌辫,警方通過(guò)查閱死者的電腦和手機(jī)随夸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)震放,“玉大人宾毒,你說(shuō)我怎么就攤上這事〉钏欤” “怎么了诈铛?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)勉躺。 經(jīng)常有香客問(wèn)我癌瘾,道長(zhǎng),這世上最難降的妖魔是什么饵溅? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任妨退,我火速辦了婚禮,結(jié)果婚禮上蜕企,老公的妹妹穿的比我還像新娘咬荷。我一直安慰自己,他們只是感情好轻掩,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布幸乒。 她就那樣靜靜地躺著,像睡著了一般唇牧。 火紅的嫁衣襯著肌膚如雪罕扎。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天丐重,我揣著相機(jī)與錄音腔召,去河邊找鬼。 笑死扮惦,一個(gè)胖子當(dāng)著我的面吹牛臀蛛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼浊仆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼客峭!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起抡柿,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤舔琅,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后沙绝,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體搏明,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鼠锈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年闪檬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片购笆。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡粗悯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出同欠,到底是詐尸還是另有隱情样傍,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布铺遂,位于F島的核電站衫哥,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏襟锐。R本人自食惡果不足惜撤逢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望粮坞。 院中可真熱鬧蚊荣,春花似錦、人聲如沸莫杈。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)筝闹。三九已至媳叨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間关顷,已是汗流浹背糊秆。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留解寝,地道東北人扩然。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像聋伦,于是被迫代替她去往敵國(guó)和親夫偶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子界睁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351