01 一個(gè)真實(shí)電商訂單系統(tǒng)的整體架構(gòu)、業(yè)務(wù)流程及負(fù)載情況

一個(gè)真實(shí)電商訂單系統(tǒng)的整體架構(gòu)、業(yè)務(wù)流程及負(fù)載情況
正文開始:
1、專欄主人公介紹
小猛:應(yīng)屆畢業(yè)Java工程師,剛剛通過校招進(jìn)入一家互聯(lián)網(wǎng)公司工作,一個(gè)職場(chǎng)新人,對(duì)很多技術(shù)都不是太熟悉,還需要有資深的工程師帶著,講解系統(tǒng)業(yè)務(wù)和架構(gòu),同時(shí)安排和布置任務(wù)給他
明哥:10年工作經(jīng)驗(yàn)的Java架構(gòu)師,常年在國內(nèi)各個(gè)一線互聯(lián)網(wǎng)公司工作,有豐富的互聯(lián)網(wǎng)公司的核心系統(tǒng)的設(shè)計(jì)、開發(fā)與運(yùn)維經(jīng)驗(yàn),目前獨(dú)立帶領(lǐng)一個(gè)團(tuán)隊(duì)負(fù)責(zé)公司的訂單系統(tǒng),小猛就是他團(tuán)隊(duì)中的校招應(yīng)屆生,由他親自帶。
說明:這個(gè)專欄會(huì)從較為真實(shí)的職場(chǎng)環(huán)境出發(fā),以兩個(gè)主人公在工作中的一些對(duì)話作為核心的主體內(nèi)容,帶著大家去熟悉一個(gè)電商訂單系統(tǒng)的架構(gòu)以及各種技術(shù)痛點(diǎn)。
然后會(huì)由主人公之一的明哥帶著職場(chǎng)新人小猛去熟悉消息中間件技術(shù),為他布置各種任務(wù)去完成系統(tǒng)中的一些架構(gòu)優(yōu)化的工作。
相信這樣的一種方式,會(huì)讓大家學(xué)習(xí)起來更有代入感,而且更加有趣味性。
2、一個(gè)訂單系統(tǒng)的業(yè)務(wù)流程
小猛從學(xué)校畢業(yè)后正式入職這家公司已經(jīng)有1周了,在第一周里,主要是熟悉一下公司的開發(fā)環(huán)境、開發(fā)規(guī)范,跟團(tuán)隊(duì)里的同事熟悉熟悉,參加一下公司統(tǒng)一為新人提供的入職培訓(xùn),同時(shí)參加團(tuán)隊(duì)的一些會(huì)議,熟悉一下工作方式。
一周過后,小猛就要開始正式接手一些實(shí)際的開發(fā)任務(wù)了。今天團(tuán)隊(duì)leader明哥帶著小猛找了一個(gè)小會(huì)議室,打算給小猛進(jìn)行為期幾天的1對(duì)1培訓(xùn)
而培訓(xùn)的目的,主要是讓小猛熟悉一下團(tuán)隊(duì)負(fù)責(zé)的訂單系統(tǒng)的核心業(yè)務(wù)流程、整體架構(gòu)設(shè)計(jì)以及當(dāng)前系統(tǒng)面臨的一些技術(shù)上的難點(diǎn)和痛點(diǎn)。
明哥:小猛,今天我來給你講講咱們團(tuán)隊(duì)負(fù)責(zé)的訂單系統(tǒng)的業(yè)務(wù)流程以及整體架構(gòu)。
小猛:好的,明哥,沒問題,我會(huì)仔細(xì)聽做好筆記的。
接著明哥就開始在白板上一邊畫圖,一邊講起公司訂單系統(tǒng)的業(yè)務(wù)流程。
明哥:訂單系統(tǒng)可以說是公司最核心的業(yè)務(wù)系統(tǒng)之一,因?yàn)橛脩粢诠镜腁PP中購買商品,首先會(huì)在APP中瀏覽各種各樣的商品
接著就會(huì)將喜歡的商品加入到購物車中,然后下訂單進(jìn)行支付后就可以購買這些商品了,你看我下面畫的這個(gè)圖:

所以在這個(gè)電商購物的流程中,訂單系統(tǒng)是其中非常關(guān)鍵的一環(huán),而我們團(tuán)隊(duì)就是負(fù)責(zé)整個(gè)訂單系統(tǒng)的。
那訂單系統(tǒng)在下訂單這個(gè)核心的業(yè)務(wù)流程中,他自身的業(yè)務(wù)流程又是什么樣的呢?
簡單來說,當(dāng)用戶對(duì)購物車中選中的一批商品確認(rèn)下單的時(shí)候,會(huì)先出來一個(gè)確認(rèn)訂單的界面
用戶得先確認(rèn)這個(gè)訂單中的商品、價(jià)格、運(yùn)費(fèi)無誤,而且在這個(gè)過程中可以選擇是否要使用優(yōu)惠券、促銷活動(dòng)的。
另外,用戶還應(yīng)該在這個(gè)界面中確認(rèn)自己的快遞方式,收件地址,是否要開發(fā)票以及發(fā)票的抬頭是什么。
當(dāng)用戶完成這些信息確認(rèn)之后,就可以確定下單。
此時(shí)我們的訂單系統(tǒng)最核心的一個(gè)環(huán)節(jié)就出現(xiàn)了,就是要根據(jù)APP端傳遞過來的種種信息,完成訂單的創(chuàng)建,此時(shí)需要在數(shù)據(jù)庫中創(chuàng)建對(duì)應(yīng)的訂單記錄,整個(gè)過程,就像下面這個(gè)圖一樣:

接著當(dāng)你正式確認(rèn)下單之后,除了在數(shù)據(jù)庫中創(chuàng)建這個(gè)訂單之外,還會(huì)跳轉(zhuǎn)到支付界面,讓你通過選擇好的支付方式完成這個(gè)訂單的支付
比如跳轉(zhuǎn)到支付寶或者微信,讓你在支付寶或者微信中完成支付,看我下面的圖:

在完成了支付之后,一般來說,支付寶或者微信之類的支付系統(tǒng),會(huì)反過來回調(diào)我們的一個(gè)接口,通知我們本次支付已經(jīng)成功。
當(dāng)我們收到支付成功的通知之后,就需要安排給用戶進(jìn)行配送發(fā)貨。除此之外,我們的訂單系統(tǒng)需要負(fù)責(zé)給用戶發(fā)放優(yōu)惠券一類的東西。
因?yàn)橐话汶娚藺PP都經(jīng)常會(huì)做一些鼓勵(lì)用戶購買的活動(dòng),比如你購買之后送一些優(yōu)惠券,下次購買可以抵用5塊錢,或者給你發(fā)一個(gè)幾塊錢的現(xiàn)金紅包。
此外,還會(huì)給你發(fā)送一個(gè)push推送,通知你支付成功準(zhǔn)備發(fā)貨,這個(gè)推送很多時(shí)候是通過短信通知的。
我們看下面的圖,在下面的圖中就有支付完訂單之后要做的一些事情:

明哥說到這里,休息了一下,問道:怎么樣小猛,對(duì)上面說的訂單系統(tǒng)的核心業(yè)務(wù)流程都搞明白了嗎?
小猛:嗯嗯,差不多明白了,因?yàn)槠綍r(shí)就經(jīng)常會(huì)用一些電商APP去進(jìn)行購物,所以對(duì)整個(gè)業(yè)務(wù)流程結(jié)合自己平時(shí)的使用體驗(yàn),還是很容易搞懂的。
3、訂單系統(tǒng)的非核心業(yè)務(wù)流程
明哥點(diǎn)點(diǎn)頭:好的,看來上面的核心業(yè)務(wù)流程沒什么問題了。但是一個(gè)訂單系統(tǒng)可不光是這么簡單的一些業(yè)務(wù)而已
實(shí)際上訂單系統(tǒng)在運(yùn)行的過程中可能會(huì)跟底層的營銷系統(tǒng)、購物車系統(tǒng)、商品系統(tǒng)、配送系統(tǒng)等大量的系統(tǒng)進(jìn)行復(fù)雜的交互。當(dāng)然,現(xiàn)在你不用一下子都搞的那么清楚,一步一步來。
現(xiàn)在給你講講訂單系統(tǒng)在運(yùn)行時(shí)的一些非核心業(yè)務(wù)流程。
首先訂單系統(tǒng)在完成核心的下單業(yè)務(wù)流程之后,用戶一定會(huì)查詢自己的訂單,那么訂單系統(tǒng)務(wù)必要提供對(duì)應(yīng)的訂單查詢功能。
我們看下面的圖,在這個(gè)圖里畫出了訂單系統(tǒng)需要具備的一個(gè)功能模塊
下單模塊主要是用于創(chuàng)建訂單,異步模塊主要是在支付成功之后發(fā)優(yōu)惠券、紅包和推送,查詢模塊主要是提供訂單的查詢。

另外,當(dāng)用戶查詢到一個(gè)訂單列表之后,有時(shí)肯定會(huì)因?yàn)楦鞣N原因想要退貨,這個(gè)是不可避免的。
因此在訂單系統(tǒng)中也得提供退貨功能,在下面的圖中我們加入退貨模塊。

此外,訂單系統(tǒng)除了自己要提供的功能模塊之外,還需要跟公司以外的第三方公司的一些系統(tǒng)進(jìn)行對(duì)接。
比如你想要查看訂單的配送狀態(tài),那么就需要訂單系統(tǒng)從第三方物流公司的系統(tǒng)中進(jìn)行查詢,才能讓你看到。
因此在下面的圖中,我們還得加入訂單系統(tǒng)跟第三方系統(tǒng)的對(duì)接。

然后你應(yīng)該知道,訂單數(shù)據(jù)是一個(gè)公司的核心數(shù)據(jù),很多時(shí)候公司內(nèi)部的其他團(tuán)隊(duì),比如大數(shù)據(jù)團(tuán)隊(duì)可能就需要獲取訂單數(shù)據(jù)進(jìn)行分析,然后提供交易數(shù)據(jù)報(bào)表給公司的高層領(lǐng)導(dǎo)去看。
所以下面的圖里,我畫出來了訂單的數(shù)據(jù)庫以及第三方團(tuán)隊(duì)需要獲取訂單數(shù)據(jù)的一個(gè)業(yè)務(wù)場(chǎng)景。

最后就是在類似雙11、秒殺等大促場(chǎng)景下,可能大量的用戶會(huì)蹲點(diǎn)守在手機(jī)前,等待一些特價(jià)促銷的商品開賣之后進(jìn)行搶購,此時(shí)可能會(huì)對(duì)訂單系統(tǒng)會(huì)產(chǎn)生一個(gè)流量洪峰,甚至影響正常的一些下單功能。
因此對(duì)于訂單系統(tǒng),往往要提供一個(gè)專門用于抗雙11、秒殺等活動(dòng)的大促模塊,專門用于處理特殊活動(dòng)下的高并發(fā)下單場(chǎng)景,這個(gè)模塊也得加上:

講到這里,明哥再次休息了一下,問道:
怎么樣小猛,訂單系統(tǒng)包含的一些功能模塊,核心業(yè)務(wù)流程,以及一些非核心的業(yè)務(wù)流程和功能模塊,大體都了解清楚了嗎?
這些東西可是重中之重,因?yàn)楹罄m(xù)我們要對(duì)訂單系統(tǒng)進(jìn)行架構(gòu)改造,需要引入包括MQ、Elasticsearch、分庫分表等大量的技術(shù)。
略微停頓了一下,明哥繼續(xù)說道:當(dāng)然,對(duì)你而言,我主要會(huì)安排你負(fù)責(zé)一部分基于MQ(消息中間件)技術(shù)的訂單架構(gòu)改造,暫時(shí)不會(huì)讓你涉及其他的一些技術(shù)。
而對(duì)于MQ技術(shù),幾乎在上面這張圖里所有的功能模塊,都需要用MQ技術(shù)進(jìn)行一定的架構(gòu)改造。
小猛:明哥,你放心,聽你講完這套訂單系統(tǒng)的業(yè)務(wù)流程和整體架構(gòu)之后,我覺得非常的有意思,而且基本全部都聽明白了,也一定會(huì)竭盡所能去學(xué)習(xí)MQ技術(shù)的相關(guān)知識(shí),去做好我負(fù)責(zé)的那部分架構(gòu)改造的!
明哥:好小伙子,態(tài)度很不錯(cuò),但是可別高興太早了,下面我來給你說說咱們的訂單系統(tǒng)的線上環(huán)境的生產(chǎn)負(fù)載情況。要知道,我們公司可是有一定的業(yè)務(wù)量的,系統(tǒng)的整體負(fù)載和壓力可不小,要做好這個(gè)事,還是有一定的難度的!
4、訂單系統(tǒng)的真實(shí)生產(chǎn)負(fù)載情況
明哥:首先給你說一下,咱們公司是一個(gè)新興的互聯(lián)網(wǎng)公司,從創(chuàng)立到現(xiàn)在發(fā)展也沒幾年
但是在我們公司的這個(gè)垂直電商領(lǐng)域里,我們算是這個(gè)小領(lǐng)域的NO.1,做的非常不錯(cuò)。到目前為止,我們公司大概積累的注冊(cè)用戶有幾千萬的數(shù)量。
當(dāng)然,不是每個(gè)注冊(cè)用戶都會(huì)天天來逛你的APP。真的天天逛你的APP的,基本上得是死忠粉絲了。大部分人也就是每隔幾天會(huì)來APP里逛一逛,可能有時(shí)候會(huì)下一個(gè)訂單。
所以現(xiàn)在根據(jù)統(tǒng)計(jì)來看,每天我們APP活躍的用戶數(shù)量是一兩百萬的樣子,這個(gè)其實(shí)也不算少了,雖說我們是創(chuàng)業(yè)公司,但是也達(dá)到百萬日活的體量了。然后每天新增的訂單數(shù)量,目前大概是幾十萬的樣子。
我估計(jì)隨著公司發(fā)展,可能很快就會(huì)達(dá)到每日百萬量級(jí)的訂單數(shù)量,當(dāng)然,在一些雙11、618等大促活動(dòng)的時(shí)候,我們現(xiàn)在的訂單系統(tǒng)就可以達(dá)到單日百萬訂單的量級(jí)了,所以我們的系統(tǒng)壓力還是比較大的。
因此我們先在下面的圖中加入訂單系統(tǒng)當(dāng)前每日的訂單數(shù)量。

再說說這個(gè)QPS,也就是系統(tǒng)每秒的查詢數(shù)量,這個(gè)指標(biāo)是說訂單系統(tǒng)所有的核心以及非核心功能模塊加起來,每秒鐘有多少請(qǐng)求量。
對(duì)我們來說,在往常每天的高峰期,大概最多會(huì)達(dá)到每秒2000左右的訪問量,不算太大。
但是如果要是有那種特價(jià)商品限時(shí)秒殺的活動(dòng),那可能就會(huì)達(dá)到每秒1萬以上的訪問壓力了。
因此我們繼續(xù)在下面的圖中,加入系統(tǒng)每秒的請(qǐng)求壓力。

這就是我們這個(gè)訂單系統(tǒng)的整體壓力了,你可以看到,壓力主要在兩方面:
一方面是訂單系統(tǒng)日益增長的數(shù)據(jù)量
一方面是在大促活動(dòng)時(shí)每秒上萬的訪問壓力
因此我們當(dāng)前訂單系統(tǒng)的整體架構(gòu)是比較簡單的,我們僅僅是讓開發(fā)好的系統(tǒng)直接連接一臺(tái)數(shù)據(jù)庫服務(wù)器,所有的數(shù)據(jù)都是存儲(chǔ)在里面的。
然后也是由這臺(tái)數(shù)據(jù)庫服務(wù)器去抗所有的訪問壓力,所以現(xiàn)在訂單系統(tǒng)經(jīng)常會(huì)在一些大促活動(dòng)的時(shí)候出現(xiàn)不穩(wěn)定的情況。
因?yàn)殡S著數(shù)據(jù)庫中的訂單數(shù)據(jù)越來越多,數(shù)據(jù)庫的讀寫性能就會(huì)越來越差,尤其在大促活動(dòng)高峰期的時(shí)候,數(shù)據(jù)庫訪問壓力劇增,讀寫性能會(huì)進(jìn)一步下降,經(jīng)常出現(xiàn)請(qǐng)求過慢,請(qǐng)求超時(shí)等問題。
所以,咱們團(tuán)隊(duì)的任務(wù),就是要盡快在訂單系統(tǒng)的架構(gòu)中引入更多的技術(shù),進(jìn)行大量的架構(gòu)優(yōu)化,讓我們的訂單系統(tǒng)逐步逐步的趨向于穩(wěn)定。
小猛在聽完明哥今天的講解之后,認(rèn)真的做了大量的筆記,打算今晚回家之后再反復(fù)消化,對(duì)系統(tǒng)的情況盡快熟悉了解。
一想到自己剛畢業(yè)就可以進(jìn)入一個(gè)創(chuàng)業(yè)型互聯(lián)網(wǎng)公司的核心技術(shù)團(tuán)隊(duì),對(duì)有挑戰(zhàn)的一個(gè)系統(tǒng)去做大量的優(yōu)化工作,讓系統(tǒng)變得越來越穩(wěn)定,就覺得非常的興奮和憧憬。
小猛對(duì)明哥說:放心吧老大,我一定會(huì)全力以赴的!
?End
專欄版權(quán)歸公眾號(hào)儒猿技術(shù)窩所有
未經(jīng)許可不得傳播,如有侵權(quán)將追究法律責(zé)任