導讀:電商業務與我們的生活息息相關,大家可能對電商多少也有一些了解,事實上,即使是一個最小化的電商系統,也依然是非常複雜的。
所以,我們先花一點時間,一起以一個創業公司的CTO的視角,設計一個最小化的電商系統,并以此理清電商系統的架構。讓大家對電商系統的業務邏輯、系統架構、核心業務流程有一個基本的認知。
作者:李玥
來源:華章科技
新公司很快就成立了,你成了新公司的CTO。關于改變世界,目前唯一能确定的是,首先要做一個電商系統。具體要做成什麼樣,目前還不清楚。你需要與老闆讨論業務需求。
故事發展到這裡,作為程序員的你是不是有一種似曾相識的感覺?現實就是,需求永遠不明确,永遠在變化,唯一不變的隻有變化。優秀的程序員适應變化,并且擁抱變化。在需求還不太明确的情況下,比較可行的方案就是,首先搭建不太會發生變化的核心系統,然後盡量簡單地實現一個最小化的系統,後續再逐步叠代和完善。
01 設計電商系統的核心流程接下來,我們一起設計這個電商的核心系統。
遵照軟件工程的一般規律,我們先從需求階段開始。那麼,需求分析應該如何做呢?理想情況下,系統分析師或産品經理應該負責完成需求分析的任務。但是,現實中絕大多數情況下,你得到的所謂的“需求”,很有可能就是一兩句話。需求分析的工作最終往往是由開發者完成的。
很多項目交付以後,仍需要不斷地進行修改和變更,用戶不滿意,開發者也很痛苦,造成這個問題的根本原因其實就是缺失了需求分析的步驟。所以,為了後續工作能夠順利開展,每位開發者都應該掌握一些用于需求分析的方法。
那麼,開發者進行需求分析時應該做些什麼呢?這裡先不介紹那些做需求分析的方法和理論,隻告訴你最重要、最關鍵的一個點:不要一上來就設計功能,而是先明确下面這兩個問題的答案。
這兩個問題的答案,我們稱之為業務需求。那麼,對于我們将要設計的電商系統,其業務需求又是什麼呢?如果大家很熟悉電商的業務,那麼回答這兩個問題應該很容易。
第一個問題,電商系統是給哪些人用的?首先是買東西的人,即“用戶”;其次是賣東西的人,即“運營”;還有一個非常重要的角色就是出錢的人,即“管理者”(請記住,在設計任何一個系統的時候,管理者的意見都是非常重要的)。綜上所述,電商系統是面向用戶、運營和管理者開發的。
第二個問題,用戶、運營和管理者使用電商系統分别想要解決什麼問題?這個也很容易回答,用戶為了買東西,運營為了賣東西,管理者需要通過系統了解自己所得的收益。
這兩個問題的答案,或者說業務需求,稍加細化後,可以用圖1-1進行清晰的表述。
▲圖1-1 電商系統用例圖
圖1-1在UML(統一建模語言)中稱為用例圖(Use Case),是我們進行需求分析的時候所要畫的第一張圖。用例圖可用于回答業務需求中的兩個關鍵問題,即這個系統給誰用?他們用這個系統是為了解決什麼問題?
一般來說,業務需求與我們要設計的系統關系不大。為什麼這麼說呢?因為我們将圖1-1中的用例,放在傳統的商業企業(比如,一個小雜貨鋪、一個線下實體商場或商店,或者一個做電視購物的公司)中也是适用的,所以,做業務需求的主要目的是理清楚業務場景是怎樣的。
下面就來分析電商系統的業務流程。很顯然,電商系統最主要的業務流程,一定是購物流程。購物流程很簡單,具體流程如圖1-2所示。
所有電商的購物流程幾乎都是如此,下面就來分析一下這個流程。
▲圖1-2 電商系統購物流程圖
流程從用戶選購商品開始,用戶首先在App中浏覽商品,找到心儀的商品之後,把商品添加到購物車,選完商品之後,打開購物車,提交訂單。下單結算之後,用戶就可以支付了。支付成功後,運營人員會為已經支付的訂單發貨,為用戶郵寄相應的商品。最後,用戶收到商品并确認收貨。至此,一個完整的購物流程就結束了。
02 根據流程劃分功能模塊接下來,我們再進一步細化電商購物的業務流程,看一下電商系統是如何實現該流程的。圖1-3所示的是細化之後的電商系統購物流程時序圖(Sequence Diagram)。
▲圖1-3 電商系統購物流程時序圖
下面就來詳細講解圖1-3所示的時序圖中的各個步驟。
這個流程涉及5大功能模塊,即商品、購物車、訂單、支付和庫存,這5大模塊就是一個電商系統中的核心功能模塊。
當然,僅有這5個模塊是不夠的,因為我們隻分析了“購物”這個最主要的流程,并沒有完全涵蓋業務需求中的全部用例,比如,運營人員進貨、管理者查看報表等還沒有覆蓋到。
相比購物流程,剩下的幾個用例和流程都相對簡單一些,我們可以采用同樣的方法來分析其他的功能模塊。這裡将省略分析過程,直接給出我們所要實現的電商系統的功能模塊劃分(如圖1-4所示)。
▲圖1-4 電商系統功能模塊劃分
圖1-4使用了UML中的包圖(Package Diagram)來表示電商系統的功能模塊。
整個系統按照功能,可以劃分為10個模塊,除了購物流程中涉及的商品、訂單、購物車、支付和庫存這5個模塊之外,還補充了促銷、用戶、賬戶、搜索推薦和報表這5個模塊,這些都是構建一個電商系統必不可少的功能模塊。下面就來逐一說明每個模塊需要實現的功能。
這裡需要特别說明的是,促銷模塊是電商系統中最複雜的一個模塊。各種優惠券、滿減、返現等促銷規則,每一條都非常複雜,再加上這些規則往往還要疊加計算,有時甚至會複雜到連制定促銷規則的人都算不清楚。
所有電商公司無一例外都曾因為促銷規則制定失誤,導緻商品實際售價遠低于成本價,使公司受到一定程度的損失。盡管如此,五花八門的促銷活動依然是提升銷量最有效的手段,因此需要充分利用。
作為電商系統的設計者,我們需要把促銷規則的變化和複雜性控制在促銷模塊内部,不能因為一個促銷模塊而導緻整個電商系統都變得非常複雜,否則設計和實現将會很難。
一種可行的做法是,把促銷模塊與其他模塊的接口設計得相對簡單和固定,這樣系統的其他模塊就不會因為新的促銷規則改變而随之進行改變。
在創建訂單時,訂單模塊需要把商品和價格信息傳給促銷模塊,促銷模塊返回一個可以使用的促銷列表,用戶選擇對應的促銷和優惠,訂單模塊把商品、價格、促銷優惠等信息,再次傳給促銷模塊,促銷模塊再返回促銷之後的價格。在最終生成的訂單中,系統隻需要記錄訂單使用了哪幾種促銷規則,以及最終的促銷價格就可以了。
這樣,無論促銷模塊如何變化,訂單和其他模塊的業務邏輯都不需要随之改變。
至此,我們就完成了一個電商系統的概要設計,大家對電商系統應該也有了一個初步的了解。
03 小結下面就來回顧一下一個電商系統的設計中所包含的核心要點。
首先,電商系統面向的角色是:用戶、運營人員和管理者。這三個角色對電商系統的需求是:用戶通過系統來購物,運營人員負責商品的銷售,管理者關注系統中的經營數據。
電商系統最核心的流程是用戶購物的流程,購物流程從用戶浏覽選購商品開始,加購、下單、支付、運營人員發貨、用戶确認收貨,至此電商系統的購物流程結束。
細化這個流程之後,我們可以分析出支撐這個流程的核心功能模塊:商品、訂單、購物車、支付和庫存。除此之外,一個完整的電商系統還包括促銷、用戶、賬戶、搜索推薦和報表這些必備的功能模塊。
作為一名開發者,在做需求分析的時候,需要把握的一個要點是:不要一上來就設計功能,而是要先理清業務需求。這也是本文反複強調的兩個問題:這個系統是給哪些人用的?他們分别用這個系統來解決什麼問題?這樣就可以确保做出來的系統大體上不會偏離用戶的預期。
最後,在講解系統功能模塊劃分的時候,介紹了一個能夠有效降低系統複雜度的設計經驗。那就是,如果系統業務是複雜而多變的,那麼請盡量識别出這部分複雜業務的邊界,将複雜業務控制在一個模塊内部,從而避免将這種複雜度擴散到整個系統中去。
關于作者:李玥,美團基礎技術部高級技術專家,極客時間《後端存儲實戰課》《消息隊列高手課》等專欄作者。曾在浪潮集團、當當網、京東零售等公司任職。從事互聯網電商行業基礎架構領域的架構設計和研發工作多年,曾多次參與雙十一和618電商大促。專注于分布式存儲、雲原生架構下的服務治理、分布式消息和實時計算等技術領域,緻力于推進基礎架構技術的創新與開源。
本文摘編自《電商存儲系統實戰:架構設計與海量數據處理》,經出版方授權發布。(ISBN:978-7-111-69741-1)
延伸閱讀《電商存儲系統實戰》
推薦語:基于實戰案例系統講解電商系統的存儲設計,詳細分析不同規模存儲系統的構建方法。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!