架构训练营 - 学生管理系统详细架构文档
前言
本文是外包学生管理系统详细架构设计文档,用于指导后续的开发、测试和运维
词汇表
1. 业务背景
学生管理系统主要应用于学校学生信息管理,总体任务是实现学生信息管理的系统化、规范
化和自动化,其主要任务是管理学生相关信息,如学籍、课程、成绩、奖惩。
2. 约束和限制
数据不要全部丢失
业务复杂,拆分成子系统
项目开发人员都熟悉 Java
3. 总体架构
Rank:
Nginx 负责 request routing and load balancer。
学生子系统,课程子系统,权限子系统 负责业务处理
MySQL 是负责数据存储。
Role:
Nginx 配置 Nginx 做任务分解
子系统
学生子系统处理 https://hostname/student/
课程子系统处理 https://hostname/curriculum/
权限子系统处理 https://hostname/admin/
MySQL
存储在校学生数据
已毕业的学生数据移库(但需要保存)。
Relation
Nginx 是反向代理服务器
业务服务器通过 JDBC 与 MySQL 交互
MySQL 主从
采用 MySQL 主从同步。
直接用 MySQL 的主从复制来实现数据复制
主机宕机后,手动启用 MySQL 从服务器
3.1 架构分析
高可用:学生管理系统容忍度比较高,一次访问失败,可以刷新或者等服务重启。它的业务不需要高可用
高性能:学生管理系统是面向在校学生和老师访问的。假设一共有 3w 人,一天每人访问一次。qps = 3w/86400 < 1. 高峰时刻预估是平时的 5 倍,qps ~ 2 次每秒。所以高性能不是主要考虑因素
高扩展:在学校有很多系,每个学院可能会有自己的需求,所以高扩展需要考虑。所以咱们的系统分成了三个子系统。如果业务需求需要进一步扩展,可以再次拆分
3.2 总体架构
4. 详细设计
4.1 核心功能
用户登录
信息查询
选课
4.2 关键设计
登录 ID 如何设计
可以由以下几个部分组成
ID 类别 老师/本科/研究生
入职/入学年份
所在系的编号
班级
序列号
比如某学校本科,2021 级,计算机学院,8 班,班级序号 11,他的学号可以设计为 3 2021 06 08 11
对于已毕业的学生信息存储,可以移库。
安全性:此系统可以仅学校内网访问
4.3 设计规范
客户端与服务子系统之间用 JSON 格式传递数据
5. 质量设计
可维护性:会开发一个运营后台系统方便管理
6. 演进规划
可以把每个子系统容器化,上云。
如果接下来业务增加的话,可以继续增加新的子系统
评论