Bootstrap

架构实战营 模块三作业

前言

本文是學生管理系統業務架構設計文檔,用於指導子系統開發、測試,與網關、數據庫維運。

詞彙表

nginx: 負責反向代理請求到各個子系統

springboot: 入門檻低且強大的 web 應用服務搭建的框架

RESTful: 一種 http request 的設計風格

actuator: springboot 提供的套件,幫助監控管理應用程式。

1. 業務背景

隨著學校規模不斷擴大,學生數量增加,需要處理的信息也日趨增大,手動維護這些信息不僅增加教師工作量,效率也很低,因此帶來幾個明顯的系統問題:

  • 學生信息量大,修改不便。

  • 對一系列數據分析花費時間長

  • 缺乏系統化、規範化、自動化的管理

基於以上背景,我們需要根據業務需求進行合適的子系統切分,以提升整體的管理效率。

2. 約束和限制

  • 反向代理採用 nginx

  • 數據庫採用 MySQL

  • 至少能支撐 1 萬名的學生信息管理

  • 所有數據不可丟

3. 總體架構

3.1 架構分析

3.1.1 可擴展

將學生管理系統拆成三個子系統,當學生子系統或課程子系統故障時,不會互相影響,未來若要擴充業務,也能較容易的新增子系統去支持新業務。

當特定子系統的請求數量大到單一個服務器無法支撐時,也可以用冗余的方式增加單一子系統的實體,以支撐更大量的請求

3.1.2 高性能

目前需求只需要支撐 1 萬名學生管理,除了選課期間與期末評分,平時同時上線使用的人應該不多,所以不需要要求非常高的性能,若是選課期間請求量大增,可以透過臨時增加相關子系統的服務器台支援暫時的大量請求。

3.1.3 高可用

校方要求數據絕對不可丟,所以透過主備機制儲存學生管理系統相關數據,即使一台數據庫故障,還是可以從另一台數據庫做復原。

3.1.4 成本

基本需要六台服務器,nginx 一台,三個子系統各一台,數據庫主備共兩台。

3.1.5 安全

權限管理子系統與數據庫必須保證帳號密碼有一定強度的加密保護,不容易被破解,進而修改或獲得學生信息、破壞系統。

3.2 總體架構

4. 詳細架構

4.1 核心功能

名詞說明: 授權信息 為登入成功後,權限子系統返回給客戶端,以便操作其他系同時,作為判別是否授權的信息。

4.1.1 系統登入

4.1.2 權限控管

依用戶角色提供對應的權限功能

以學生子系統為例,此流程也直接套用至課程子系統。

4.1.3 選課

4.1.4 統計課程成績

4.2 關鍵設計

4.2.1 數據存儲高可用

使用主備兩台數據庫服務器,數據複製採用同步複製的方式,只有在兩台數據庫服務器都寫成功時才會返回成功,這樣可以保證數據有兩份,當一台故障時,還能從另一台復原。

4.2.2 系統可擴展

依核心業務將學生管理系統拆分為學生子系統、課程子系統、權限子系統,未來若有新的業務,可以很容易的新增一個子系統,並融入現有架構。

4.3 設計規範

  • 子系統採用 springboot 框架開發

  • 子系統導入 springboot actuator 以便運維監控應用

  • 子系統間用 RESTful API 溝通,數據傳輸格式為 JSON。

  • 單一帳號不允許同時多人登入

  • MySQL 使用 InnoDB 儲存引擎

5. 質量設計

5.1 可測試性

業務功能皆以 RESTful API 實現,透過 Postman 或 RESTful client 即可測試。

5.2 可維護性

開放 jmx 連接,並提供相關 operation,以應付系統特殊狀況可做關鍵狀態的修改。

5.3 可觀測性

使用 springboot actuator 提供接口查看系統關鍵設定與狀態

5.3 成本

  • 團隊都熟悉 Springboot 跟 MySQL,迭代開發可按業務優先級順序進行。

  • 硬件最小需要 6 台服務器,未來在依上線運行狀況擴容。

  • 未使用到付費產品,所以不需要額外授權經費。

5.4 安全

  • 帳號密碼能阻擋暴力破解的攻擊

  • 數據庫儲存的密碼與學生重要信息不為明碼

6. 演進規劃

6.1 學生管理系統一期

6.1.1 權限控制

  • 所有的用戶帳號與權限只能由開發團隊手動建置到數據庫中

  • 學生按實際組織管理層級劃分

6.1.2 學生管理

  • 透過登入系統的帳號不同,而獲得不同的權限。

  • 能夠查詢課程信息

6.1.3 課程管理

  • 提供管理者課程錄入、選擇教材

  • 提供學生選課、排課

6.2 學生管理系統二期

6.2.1 權限控制

提供介面設置,讓管理者可以生成教師帳號並分配管理權限。

6.2.2 學生管理

  • 提供作業、課堂筆記的文件上傳/下載

  • 提供學生帳號綁定,以便實現帳號自助找回。

6.2.3 考試管理

  • 提供自動試卷區域分割

  • 提供教師評分功能