火車售票后台開發需求分析和概念模型
1.前言
本項目是立足於目前12306火車售票系統,對售票系統從數據庫的設計、接口實現,到與前端交互等,逐步分析,盡可能優化,以便提供一個高性能、高並發的售票系統。
2.項目簡介
題目基本要求
- 參考12306站點進行售票系統建模設計,盡可能接近覆蓋真實線上系統,實現的功能有但不限於:
- 用戶信息注冊
- 查詢余票: 根據時間,車次,站點區間,座次(一等座,二等座,硬卧,硬座…)查詢余票
- 售票: 支持一次購買同一車次的多張車票(多人),支持訂單30分鍾內鎖定,超時釋放。支付接口可以mock。
- 退票: 支持一個用戶賬戶下的批量退票
- 改簽: 同一用戶一張車票只能改簽一次
- 所有讀寫接口延遲要求 <= 500ms
- 單機支持到500qps的並發請求
3.需求分析
- 用戶可以注冊賬號並登錄12306客戶端軟件;
- 用戶可以查看自己的相關信息,包括待出行訂單、歷史訂單等;
- 用戶還可以查看自己未支付的訂單,和正在搶票的訂單;
- 用戶可以通過多種條件進行查詢車票情況,比如起始站點、目的站點、時間和購票類型(高鐵和學生票)這些信息來查詢車次有無余票;
- 不僅可以查詢余票,用戶還可以通過出發地+目的地+時間查詢相關的車次但是不顯示余票、通過車次+時間查詢該車次經過的車站和到達的時間、通過車站+時間查詢當天在車站停留的車次
- 用戶查詢余票之后可以選擇還有余票的車次,選擇車位和乘車人然后支付票價進行購票
- 用戶通過選擇沒有余票的車次來進行候補票
- 用戶可以退票或者改簽
4.人員分工
為了方便開展項目,我們對項目進行了粗略的分工,根據業務的邏輯進行了一定的拆分,不同的業務可能會運行在不同的服務器上。每個業務都至少有兩個人參與,杜絕獨立實現項目,促進團隊合作。
- 個人信息,包括了歷史記錄、登錄、注冊、實名驗證
- 查詢車次,包括通過出發地起+目的地+時間查詢相關的車次但是不顯示余票、通過車次+時間查詢該車次經過的車站和到達的時間、通過車站+時間查詢當天在車站停留的車次
- 查詢余票,購票、改簽
- 候補、退票、支付
5.用例建模
6.業務建模
7.數據建模
為了達到高並發的效果,我們采用二級緩存,將所有與車票相關,查詢頻率較高的數據都放在redis中存儲,數據會定時同步到mysql數據庫中。
8.總結
本文主要對12306進行概念模型分析,對其各功能模塊逐步設計,對工程實踐的實現有了更好的把握。