模块三 - 外包学生管理系统的架构文档
前言
本文是外包学生管理系统详细架构设计文档,用于指导后续的开发、测试和运维
修订历史
词汇表
Nginx: 高性能的 HTTP 和反向代理 web 服务器
Mysql: 关系型数据管理系统
学生管理:包括系统登录,账号分配和绑定,组织管理层级,信息查询等
课程管理:包括课程录入,选课功能,排课功能,教材选择
考试管理:分为试卷区域分割,平时成绩,评分判定
权限管理:不同角色权限,当前系统角色有学生教师,管理员,辅导员
1. 业务背景
随着学校规模得不断扩大,学生数量得增加,需要处理得信息也日趋增大。不仅花费大量得教师资源,处理效率也十分低下。
当前的问题:
数据量大问题: 学生信息管理数据信息量大修改不方便
工作效率低下问题: 对一系列管理数据进行分析时需要花费的时间长,工作效率不高
规范统一问题: 学生管理流程不够规范和统一
基于以上背景,需要引入学生信息管理系统,主要任务是统计学生各类信息进行日常管理,提高信息准确度以及日常管理的工作效率。
2. 约束和限制
1.必须在 2023.03.30 号完成
2.成本不能超过 100 万
3.数据库采用 Mysql
4.开发框架为 springboot
3. 总体架构
3.1 架构分析
3.1.1 高可用
学校内部系统,例如系统宕机可重启或停服一段时间后恢复,所以系统高可用没那么严格,所以系统拆分为学生子系统,课程子系统,权限子系统统一放在一个服务器部署即可。对于数据存储采用 mysql 一主一从,一定存储高可用,防止数据丢失
3.1.2 高性能
学校学生人数有限, MySQL 主从已经可以满足高性能要求
3.1.3 可拓展
a)区分不同子系统,职责分明,有改动需求可改动某一子系统单独上线。
b).可以添加其它子系统进行扩展。
c).后期某一子系统流量大的情况下可单独对该子系统进行增加机器
3.1.4 成本
正常需要 4 台机器,成本并不高
3.1.5 复杂度
复杂度并不高,拆分三个子系统,明确不同子系统职责
3.1.6 可维护性
开发框架为 springboot,很容易融入到当前运维体系,而且使用 Mysql 存储数据,可靠性有保证,运维有丰富的 Mysql 运维经验
3.1.7 业务场景
后期业务需求修改增加等可以分别针对不同子系统进行分别开发,业务场景更加清晰
3.1.8 安全
密码等敏感字段加密存储,手机号,身份证号等脱敏展示
3.2 总体架构
1)nginx 负载均衡到不同的子系统
2)学生管理系统分为学生子系统,课程子系统,权限子系统,考试子系统四个部分。
3)数据库使用的 Mysql,主备部署
4. 详细设计
系统主要应用于学校学生信息管理,总体任务是实现学生信息管理的系统化、规范化和自动化, 其主要任务是管理学生相关信息,如学籍、课程、成绩、奖惩
4.1 核心功能
4.1.1 学生管理
a).系统登录
b).账号分配
c).账号绑定
d).组织管理层级
e).文件上传/下载
f).信息查询
4.1.2 课程管理
a).课程录入
b).选课功能
c).排课功能
d).教材选择
4.1.3 考试管理
a).试卷区域分割
b).平时成绩
c).评分判定
4.1.4 权限管理
a).权限不同角色
b).注册、登录、修改自己的信息,但注册信息需要管理员审核通过
c).学生只能查看自己的成绩,教师可以修改学生的成绩
d).辅导员可以查看学生的信息,可以设置学生的奖惩信息
e).教师可以上传考试试题,学生可以做题
4.2 关键设计
1)Mysql 主备
数据备份,防止数据丢失
2)Nginx 负载均衡
设置 Nginx 配置中 Server 的 http 分别路由到不同子系统
4.3 设计规范
1)使用 Spring Boot 框架开发,持久化框架使用 Mybatis
2)MySQL 使用 Innodb 存储引擎
3)使用 HTTP 协议通信。接口数据采用 JSON 格式
4)数据库规范,表,字段,索引等
5. 质量设计
1).可测试性:后台管理系统可进行黑盒测试,各系统核心接口可模拟进行性能测试
2).可维护性:主流框架和 Mysql 主备对运维来说都是比较熟悉的。
3).可观测性:各子系统日志输出按照日期并且每天按照文件大小进行拆分,便于查看日志。
4).安全:前后端做好权限校验,加密,验签,黑名单,还有参数校验,例如 XSS 攻击
6. 演进规划
6.1 学生管理系统一期
课程子系统,权限子系统,学生子系统基本功能实现
6.2 学生管理系统二期
在一期基础上根据反馈进行优化,或者根据要求进行扩展相关功能开发
评论