天天看點

一個日均百萬交易訂單系統的整體架構、業務流程及負載情況?

一個日均百萬交易訂單系統的整體架構、業務流程及負載情況?
一個日均百萬交易訂單系統的整體架構、業務流程及負載情況?

1、專欄主人公介紹

小猛:應屆畢業Java工程師,剛剛通過校招進入一家網際網路公司工作,一個職場新人,對很多技術都不是太熟悉,還需要有資深的工程師帶着,講解系統業務和架構,同時安排和布置任務給他

明哥:10年工作經驗的Java架構師,常年在國内各個一線網際網路公司工作,有豐富的網際網路公司的核心系統的設計、開發與運維經驗,目前獨立帶領一個團隊負責公司的訂單系統,小猛就是他團隊中的校招應屆生,由他親自帶。

說明:這個專欄會從較為真實的職場環境出發,以兩個主人公在工作中的一些對話作為核心的主體内容,帶着大家去熟悉一個電商訂單系統的架構以及各種技術痛點。

然後會由主人公之一的明哥帶着職場新人小猛去熟悉消息中間件技術,為他布置各種任務去完成系統中的一些架構優化的工作。

相信這樣的一種方式,會讓大家學習起來更有代入感,而且更加有趣味性。

2、一個訂單系統的業務流程

小猛從學校畢業後正式入職這家公司已經有1周了,在第一周裡,主要是熟悉一下公司的開發環境、開發規範,跟團隊裡的同僚熟悉熟悉,參加一下公司統一為新人提供的入職教育訓練,同時參加團隊的一些會議,熟悉一下工作方式。

一周過後,小猛就要開始正式接手一些實際的開發任務了。今天團隊leader明哥帶着小猛找了一個小會議室,打算給小猛進行為期幾天的1對1教育訓練

而教育訓練的目的,主要是讓小猛熟悉一下團隊負責的訂單系統的核心業務流程、整體架構設計以及目前系統面臨的一些技術上的難點和痛點。

明哥:小猛,今天我來給你講講咱們團隊負責的訂單系統的業務流程以及整體架構。

小猛:好的,明哥,沒問題,我會仔細聽做好筆記的。

接着明哥就開始在白闆上一邊畫圖,一邊講起公司訂單系統的業務流程。

明哥:訂單系統可以說是公司最核心的業務系統之一,因為使用者要在公司的APP中購買商品,首先會在APP中浏覽各種各樣的商品

接着就會将喜歡的商品加入到購物車中,然後下訂單進行支付後就可以購買這些商品了,你看我下面畫的這個圖:

一個日均百萬交易訂單系統的整體架構、業務流程及負載情況?

是以在這個電商購物的流程中,訂單系統是其中非常關鍵的一環,而我們團隊就是負責整個訂單系統的。

那訂單系統在下訂單這個核心的業務流程中,他自身的業務流程又是什麼樣的呢?

簡單來說,當使用者對購物車中選中的一批商品确認下單的時候,會先出來一個确認訂單的界面

使用者得先确認這個訂單中的商品、價格、運費無誤,而且在這個過程中可以選擇是否要使用優惠券、促銷活動的。

另外,使用者還應該在這個界面中确認自己的快遞方式,收件位址,是否要開發票以及發票的擡頭是什麼。

當使用者完成這些資訊确認之後,就可以确定下單。

此時我們的訂單系統最核心的一個環節就出現了,就是要根據APP端傳遞過來的種種資訊,完成訂單的建立,此時需要在資料庫中建立對應的訂單記錄,整個過程,就像下面這個圖一樣:

一個日均百萬交易訂單系統的整體架構、業務流程及負載情況?

接着當你正式确認下單之後,除了在資料庫中建立這個訂單之外,還會跳轉到支付界面,讓你通過選擇好的支付方式完成這個訂單的支付

比如跳轉到支付寶或者微信,讓你在支付寶或者微信中完成支付,看我下面的圖:

一個日均百萬交易訂單系統的整體架構、業務流程及負載情況?

在完成了支付之後,一般來說,支付寶或者微信之類的支付系統,會反過來回調我們的一個接口,通知我們本次支付已經成功。

當我們收到支付成功的通知之後,就需要安排給使用者進行配送發貨。除此之外,我們的訂單系統需要負責給使用者發放優惠券一類的東西。

因為一般電商APP都經常會做一些鼓勵使用者購買的活動,比如你購買之後送一些優惠券,下次購買可以抵用5塊錢,或者給你發一個幾塊錢的現金紅包。

此外,還會給你發送一個push推送,通知你支付成功準備發貨,這個推送很多時候是通過短信通知的。

我們看下面的圖,在下面的圖中就有支付完訂單之後要做的一些事情:

一個日均百萬交易訂單系統的整體架構、業務流程及負載情況?

明哥說到這裡,休息了一下,問道:怎麼樣小猛,對上面說的訂單系統的核心業務流程都搞明白了嗎?

小猛:嗯嗯,差不多明白了,因為平時就經常會用一些電商APP去進行購物,是以對整個業務流程結合自己平時的使用體驗,還是很容易搞懂的。

3、訂單系統的非核心業務流程

明哥點點頭:好的,看來上面的核心業務流程沒什麼問題了。但是一個訂單系統可不光是這麼簡單的一些業務而已

實際上訂單系統在運作的過程中可能會跟底層的營銷系統、購物車系統、商品系統、配送系統等大量的系統進行複雜的互動。當然,現在你不用一下子都搞的那麼清楚,一步一步來。

現在給你講講訂單系統在運作時的一些非核心業務流程。

首先訂單系統在完成核心的下單業務流程之後,使用者一定會查詢自己的訂單,那麼訂單系統務必要提供對應的訂單查詢功能。

我們看下面的圖,在這個圖裡畫出了訂單系統需要具備的一個功能子產品

下單子產品主要是用于建立訂單,異步子產品主要是在支付成功之後發優惠券、紅包和推送,查詢子產品主要是提供訂單的查詢。

一個日均百萬交易訂單系統的整體架構、業務流程及負載情況?

另外,當使用者查詢到一個訂單清單之後,有時肯定會因為各種原因想要退貨,這個是不可避免的。

是以在訂單系統中也得提供退貨功能,在下面的圖中我們加入退貨子產品。

一個日均百萬交易訂單系統的整體架構、業務流程及負載情況?

此外,訂單系統除了自己要提供的功能子產品之外,還需要跟公司以外的第三方公司的一些系統進行對接。

比如你想要檢視訂單的配送狀态,那麼就需要訂單系統從第三方物流公司的系統中進行查詢,才能讓你看到。

是以在下面的圖中,我們還得加入訂單系統跟第三方系統的對接。

一個日均百萬交易訂單系統的整體架構、業務流程及負載情況?

然後你應該知道,訂單資料是一個公司的核心資料,很多時候公司内部的其他團隊,比如大資料團隊可能就需要擷取訂單資料進行分析,然後提供交易資料報表給公司的高層上司去看。

是以下面的圖裡,我畫出來了訂單的資料庫以及第三方團隊需要擷取訂單資料的一個業務場景。

一個日均百萬交易訂單系統的整體架構、業務流程及負載情況?

最後就是在類似雙11、秒殺等大促場景下,可能大量的使用者會蹲點守在手機前,等待一些特價促銷的商品開賣之後進行搶購,此時可能會對訂單系統會産生一個流量洪峰,甚至影響正常的一些下單功能。

是以對于訂單系統,往往要提供一個專門用于抗雙11、秒殺等活動的大促子產品,專門用于處理特殊活動下的高并發下單場景,這個子產品也得加上:

一個日均百萬交易訂單系統的整體架構、業務流程及負載情況?

講到這裡,明哥再次休息了一下,問道:

怎麼樣小猛,訂單系統包含的一些功能子產品,核心業務流程,以及一些非核心的業務流程和功能子產品,大體都了解清楚了嗎?

這些東西可是重中之重,因為後續我們要對訂單系統進行架構改造,需要引入包括MQ、Elasticsearch、分庫分表等大量的技術。

略微停頓了一下,明哥繼續說道:當然,對你而言,我主要會安排你負責一部分基于MQ(消息中間件)技術的訂單架構改造,暫時不會讓你涉及其他的一些技術。

而對于MQ技術,幾乎在上面這張圖裡所有的功能子產品,都需要用MQ技術進行一定的架構改造。

小猛:明哥,你放心,聽你講完這套訂單系統的業務流程和整體架構之後,我覺得非常的有意思,而且基本全部都聽明白了,也一定會竭盡所能去學習MQ技術的相關知識,去做好我負責的那部分架構改造的!

明哥:好小夥子,态度很不錯,但是可别高興太早了,下面我來給你說說咱們的訂單系統的線上環境的生産負載情況。要知道,我們公司可是有一定的業務量的,系統的整體負載和壓力可不小,要做好這個事,還是有一定的難度的!

4、訂單系統的真實生産負載情況

明哥:首先給你說一下,咱們公司是一個新興的網際網路公司,從創立到現在發展也沒幾年

但是在我們公司的這個垂直電商領域裡,我們算是這個小領域的NO.1,做的非常不錯。到目前為止,我們公司大概積累的注冊使用者有幾千萬的數量。

當然,不是每個注冊使用者都會天天來逛你的APP。真的天天逛你的APP的,基本上得是死忠粉絲了。大部分人也就是每隔幾天會來APP裡逛一逛,可能有時候會下一個訂單。

是以現在根據統計來看,每天我們APP活躍的使用者數量是一兩百萬的樣子,這個其實也不算少了,雖說我們是創業公司,但是也達到百萬日活的體量了。然後每天新增的訂單數量,目前大概是幾十萬的樣子。

我估計随着公司發展,可能很快就會達到每日百萬量級的訂單數量,當然,在一些雙11、618等大促活動的時候,我們現在的訂單系統就可以達到單日百萬訂單的量級了,是以我們的系統壓力還是比較大的。

是以我們先在下面的圖中加入訂單系統目前每日的訂單數量。

一個日均百萬交易訂單系統的整體架構、業務流程及負載情況?

再說說這個QPS,也就是系統每秒的查詢數量,這個名額是說訂單系統所有的核心以及非核心功能子產品加起來,每秒鐘有多少請求量。

對我們來說,在往常每天的高峰期,大概最多會達到每秒2000左右的通路量,不算太大。

但是如果要是有那種特價商品限時秒殺的活動,那可能就會達到每秒1萬以上的通路壓力了。

是以我們繼續在下面的圖中,加入系統每秒的請求壓力。

一個日均百萬交易訂單系統的整體架構、業務流程及負載情況?

這就是我們這個訂單系統的整體壓力了,你可以看到,壓力主要在兩方面:

  • 一方面是訂單系統日益增長的資料量
  • 一方面是在大促活動時每秒上萬的通路壓力

是以我們目前訂單系統的整體架構是比較簡單的,我們僅僅是讓開發好的系統直接連接配接一台資料庫伺服器,所有的資料都是存儲在裡面的。

然後也是由這台資料庫伺服器去抗所有的通路壓力,是以現在訂單系統經常會在一些大促活動的時候出現不穩定的情況。

因為随着資料庫中的訂單資料越來越多,資料庫的讀寫性能就會越來越差,尤其在大促活動高峰期的時候,資料庫通路壓力劇增,讀寫性能會進一步下降,經常出現請求過慢,請求逾時等問題。

是以,咱們團隊的任務,就是要盡快在訂單系統的架構中引入更多的技術,進行大量的架構優化,讓我們的訂單系統逐漸逐漸的趨向于穩定。

小猛在聽完明哥今天的講解之後,認真的做了大量的筆記,打算今晚回家之後再反複消化,對系統的情況盡快熟悉了解。

一想到自己剛畢業就可以進入一個創業型網際網路公司的核心技術團隊,對有挑戰的一個系統去做大量的優化工作,讓系統變得越來越穩定,就覺得非常的興奮和憧憬。

小猛對明哥說:放心吧老大,我一定全力以赴!

END

一個日均百萬交易訂單系統的整體架構、業務流程及負載情況?