軟件系統設計方案


1.前言

本篇博客主要對工程實踐項目,進行軟件系統分析和設計,最終形成系統概念原型。

項目介紹:設計一個高並發的秒殺系統。該系統主要是針對庫存來設計的系統,用戶在規定時間內可以對商品進行搶購,同時系統要防止出現超賣和少賣等情況的出現。系統的主要功能就是記錄用戶購買的明細和對庫存及時響應做到減庫存等,實現大流量下的高並發場景。

2.項目設計方案

2.1前端設計

前端是一個系統中離用戶最近的部分,為用戶提供信息展示,交互邏輯等。前端的設計主要包括:秒殺詳情頁、查看商品列表、UI設計、和交互邏輯。

秒殺詳情頁:主要划分兩個展示區:活動場次信息區、活動商品列表區。活動場次信息區里可以點擊場次按鈕切換場次;活動商品列表區里可以點擊某個商品的按鈕查看商品詳情。

查看商品列表:主要包括商品圖片、商品名稱、廣告語、庫存信息、原價、活動價、秒殺按鈕。用戶可能直接點擊商品按鈕,這里會出現 3 種情況:

  1. 活動已開始,對於已登錄用戶來說,按鈕提示“立即搶購”,點擊后會跳轉到商品詳情頁;
  2. 活動已開始,對於未登錄用戶來說,按鈕提示“登錄后搶購”,點擊后會跳轉到登錄頁;  
  3. 活動未開始,按鈕則會提示“提醒我”,點擊后就會訂閱活動通知。

UI 設計:主要包含秒殺系統各個功能頁面的內容和布局,大致有 3 類:首頁入口、秒殺活動頁、商品詳情頁。

交互邏輯:主要包括頁面上各個部分對用戶行為的交互方式和響應結果,它是基於 UI 設計頁面來進行的。我們還是以首頁入口、秒殺活動頁、商品詳情頁來介紹。

首先來看首頁入口,它的交互邏輯是“點擊秒殺廣告位進入秒殺活動頁”。

秒殺活動頁,它存在四大交互邏輯,流程圖如下

  1. 當用戶進入活動頁,如果當前頁面顯示的就是他想要的場次信息,那么他就會參與其中。
  2. 活動場次切換,如果當前顯示頁面不是他想要的,用戶則會點擊切換場次,這就是用戶點擊切換,還有一種是自動切換,它需要設定定時任務判斷時間,到了時間則自動切換,切換后系統自動重新獲取活動場次信息。
  3. 接下來,為了找到自己想買的商品,用戶會點擊活動詳情區的商品,進入到商品詳情頁。
  4. 活動詳情區商品的按鈕。如果是活動已開始,未登錄用戶會提示“登錄后購買”,點擊則會跳轉登錄頁;如果是已登錄用戶,則會提示“立即搶購”,點擊后會跳轉到商品詳情頁。如果活動未開始,則會提示“提醒我”,點擊訂閱活動通知。

商品詳情頁上的交互邏輯主要有三類,流程圖為:

  1. 點擊配送區修改按鈕,選擇配送地區;
  2. 點擊規格按鈕,選擇商品對應規格;
  3. 點擊秒殺/購買按鈕。這里會出現兩類狀態,一類是活動進行中,一類是活動未進行。

2.2后端設計

2.2.1 接口設計

  • 秒殺活動信息列表接口
  • Push 訂閱接口
  • 商品活動信息接口
  • 秒殺搶購接口

秒殺活動信息列表接口:它主要返回每場活動信息,具體有開始時間、結束時間、商品列表;商品列表里的每個商品信息包括商品 ID、商品名稱、描述、圖片、原價、活動價、庫存狀態、訂閱人數以及判斷用戶是否登錄。

Push 訂閱接口,主要是傳入商品 ID ,返回已訂閱的人數。

商品活動信息接口,主要是傳入商品 ID 和配送區,返回商品活動信息和用戶是否登錄。其中商品活動信息有是否參加秒殺活動、秒殺活動開始時間和結束時間、活動價格多少、是否還有庫存、用戶是否登錄。

搶購接口,主要是傳入商品 ID,返回搶購結果。

除了上面的后端接口設計來對應前端的設計外,系統還需要管理后台,來對秒殺活動的專題、場次、商品等進行管理,為后端接口提供活動信息數據。

對於管理后台來說,主要負責增刪改查的操作,因此后台接口的設計主要如下所示。

功能 查詢接口 增加接口 修改接口 刪除接口 上線接口 下線接口 總計
專題管理 1 1 1 1 1 1 6
場次管理 1 1 1 1 1 1 6
商品管理 1 1 1 1 0 0 4

2.3軟件架構設計

軟件架構設計風格有很多,比如三層架構、MVC架構和MVVM架構以及DDD(Domain Drive Design,領域驅動設計).

本項目主要采用三層架構來設計,將系統分為表現層,業務邏輯層和數據層。

表現層

表現層是指用戶可以通過哪些方式使用系統功能。秒殺系統的主要使用者有:消費者、管理員。其中消費者可以通過電腦 Web 端、手機 Web 端、手機 App 端獲取秒殺的活動信息、商品信息;管理員可以從電腦 Web 端訪問管理后台管理秒殺活動。

邏輯層

邏輯層主要是和業務邏輯相關,系統的前端功能主要包括有用戶登錄、查看活動、訂閱通知、查看商品、搶購、下單等;管理后台的功能主要包括有專題管理、場次管理、商品管理、庫存管理、價格管理、限購管理等。

數據層

數據層是指系統的業務邏輯需要處理哪些數據。秒殺系統的數據包括配置數據和用戶數據,其中配置數據主要是活動信息和商品信息,用戶數據主要是用戶訂單和用戶信息。

2.4 項目設計總結

本系統主要的應用場景是商品的秒殺,具有用戶量大、高並發的特點,因此頁面需要采用前后端分離、動靜數據分離的方式,靜態資源和靜態數據由 CDN(Content Delivery Network,內容分發網絡)和前端緩存,盡量減少對后端的壓力。

管理后台基本上是增刪改查的操作,接口設計最好符合 RESTFul 風格,查詢接口支持批量查詢和單個查詢等。

項目初步采用三層架構設計,但是一個良好的軟件必然是經過好的軟件設計,並不斷重構、迭代的,因此在后面的過程中打算對項目進行DDD領域驅動設計。

系統整體的設計圖如下:

 3.視圖

3.1分解視圖

分解視圖用軟件模塊勾划出系統結構,往往會通過不同抽象層級的軟件模塊形成層次化的結構。秒殺系統可以分解成商品管理、活動管理、搶購下單管理、數據庫管理和后台管理,分解視圖如下:

 

 3.2依賴視圖

依賴視圖展現了軟件模塊之間的依賴關系。比如一個軟件模塊A調用了另一個軟件模塊B,那么我們說軟件模塊A直接依賴軟件模塊B。如果一個軟件模塊依賴另一個軟件模塊產生的數據,那么這兩個軟件模塊也具有一定的依賴關系。根據分解視圖的五大模塊之間的關系,相應的依賴視圖如下。

 

 3.3泛化視圖

 泛化視圖展現了軟件模塊之間的一般化或具體化的關系,典型的例子就是面向對象分析和設計方法中類之間的繼承關系。值得注意的是,采用對象組合替代繼承關系,並不會改變類之間的泛化特征。因此泛化是指軟件模塊之間的一般化或具體化的關系,不能局限於繼承概念的應用。

泛化視圖有助於描述軟件的抽象層次,從而便於軟件的擴展和維護。比如通過對象組合或繼承很容易形成新的軟件模塊與原有的軟件架構兼容。

系統的泛化視圖如下:

 

3.4執行視圖

執行視圖展示了系統運行時的時序結構特點,比如流程圖、時序圖等。執行視圖中的每一個執行實體,一般稱為組件(Component),都是不同於其他組件的執行實體。如果有相同或相似的執行實體那么就把它們合並成一個。系統流程圖如下:

 3.5實現視圖

實現視圖是描述軟件架構與源文件之間的映射關系。一般我們通過目錄和源文件的命名來對應軟件架構中的包、類等靜態結構單元,這樣典型的實現視圖就可以由軟件項目的源文件目錄樹來呈現。

實現視圖有助於碼農在海量源代碼文件中找到具體的某個軟件單元的實現。實現視圖與軟件架構的靜態結構之間映射關系越是對應的一致性高,越有利於軟件的維護,因此實現視圖是一種非常關鍵的架構視圖。

本系統的實現視圖如下:

 項目總覽實現視圖:

Controller層實現視圖:

 

Dao層實現視圖:

 

 

Service層實現視圖:

 

Error錯誤處理和Response響應實現視圖:

 

前端頁面實現視圖:

 

測試:

 

3.6部署視圖

部署視圖是將執行實體和計算機資源建立映射關系。這里的執行實體的粒度要與所部署的計算機資源相匹配,比如以進程作為執行實體那么對應的計算機資源就是主機,這時應該描述進程對應主機所組成的網絡拓撲結構,這樣可以清晰地呈現進程間的網絡通信和部署環境的網絡結構特點。當然也可以用細粒度的執行實體對應處理器、存儲器等。部署視圖有助於設計人員分析一個設計的質量屬性,比如軟件處理網絡高並發的能力、軟件對處理器的計算需求等。

系統的部署視圖如下。

3.7工作分配視圖

工作分配視圖將系統分解成可獨立完成的工作任務,以便分配給各項目團隊和成員。工作分配視圖有利於跟蹤不同項目團隊和成員的工作任務的進度,也有利於在個項目團隊和成員之間合理地分配和調整項目資源,甚至在項目計划階段工作分配視圖對於進度規划、項目評估和經費預算都能起到有益的作用。

系統的工作分配視圖如下。

 4.數據庫設計

數據架構通常用 E-R 圖(Entity Relationship Diagram,實體-聯系圖)表示,我們通常用它來表示數據對象與屬性、用戶之間的關系。

秒殺系統主要有兩大主要數據:活動信息、商品信息和訂單信息。

包含的類和屬性有:

  • 用戶:用戶id,賬號,密碼,郵箱,電話,地址信息等
  • 商家:商家id,商家名稱,商品數量,商品價格等
  • 秒殺商品:商品id,秒殺價格,庫存數量,秒殺開始時間,秒殺結束時間
  • 訂單信息:用戶id,商品id,收獲地址id,商品數量,商品單價,訂單創建時間,支付時間

我們將這些數據繪制成 E-R 圖,如下圖所示:

在數據庫中進行相關表的設計,對概念模型進行具體實現和表示。相關的數據表如下所示:

  user:買家用戶表 

屬性說明:

uid username password email phone address
用戶id 用戶名 密碼 郵箱 電話 地址信息

 

sellers:商家信息表

屬性說明:

seller_id seller_name count price
商家id 商家名稱 庫存數量 價格

product:商品信息表

id goods_id miaosha_price stock_count start_date end_date
商家id 商品id 秒殺價格 庫存數量 秒殺開始時間 秒殺結束時間

orderitem:訂單信息表

item_id user_id goods_id goods_count goods_price create_time pay_date
訂單id 用戶id 商品id 數量 單價 訂單創建時間 支付時間

miaosha_order:秒殺訂單表

id user_id order_id goods_id
秒殺訂單id 用戶id 訂單id 商品id

5.系統運行環境和技術選型

5.1系統運行環境

瀏覽器:包括IE瀏覽器、chrome瀏覽器、Firefox瀏覽器、Safari瀏覽器等;

操作系統:安卓、蘋果手機、windows XP、windows7、windows8、windows10、Linux系統等。

5.2技術選型說明

本系統是實現一個支持大流量高並發的秒殺系統的設計,並部署到雲端運行,運用分布式對系統進行性能優化,實現一定的安全策略保證系統的安全等,具體包括:

1.硬件部署配置:雲端部署,線程池優化、keepalive優化

2.實現代碼及中間件優化,實現查詢優化、redis緩存優化、本地緩存優化、lua緩存優化,cdn優化,交易優化等

3.實現系統過載保護,做到防刷限流和對流量高並發時的相應處理等

4.運用分布式進行會話優化,動靜分離優化等

項目開發運用到的技術有:

后端:SpringBoot2.0、MyBatis等;

前端:Bootstrap、Thymeleaf;

中間件:Redis、RabbitMQ等;

數據庫:Mysql、Redis;

服務器:阿里雲ECS

6.系統概念原型的核心工作機制

概念原型是一種虛擬的、理想化的軟件產品形式。

  概念原型 = 用例 + 數據模型

在本實踐項目中,有買家用戶user用例和商家seller用例;數據模型有:買家用戶表、商家信息表、商品信息表、訂單信息表和秒殺訂單表。因此,概念模型的工作過程可以概括為如下:

  商家創建秒殺活動信息,對相關商品設置秒殺開始結束時間和秒殺價格以及商品數量;用戶需要注冊登錄系統后,再對感興趣的秒殺商品進行查看信息,如果還有庫存的情況下,用戶可以對商品進行搶購,同時數據庫中的相關商品庫存會做出及時的改變。用戶創建訂單后,需要在規定的時間內進行付款操作,否則,庫存中的商品會還原對應的數量。用戶付款后,商家會核實訂單信息,然后將商品發貨給用戶。

7.總結

以上內容結合工程實踐項目,對秒殺系統設計方案中所蘊含的軟件結構特點進行分析,比如軟件架構風格與策略等。並采用不同的視圖來描述項目的軟件系統概念原型,比如分解視圖、依賴視圖、泛化視圖、執行視圖、實現視圖、部署視圖、工作分配視圖等,同時對數據庫做出設計,最后說明了系統運行環境和技術選型,舉例說明了系統概念原型的核心工作機制。

8.參考資料

https://gitee.com/mengning997/se

http://blog.sina.com.cn/s/blog_ec1f61c60102virk.html

end~

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM