模块三作业
前言
本文是学生管理系统的详细架构设计文档,用于指导学生管理系统后续的开发、测试和运维。
词汇表
Nginx:负载均衡,用于将请求转发给后端的业务服务器
MySQL:用于存储业务数据的数据库
1. 业务背景
随着学校的规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。不仅花费大量的教师资源, 处理效率也十分低下。
为提高学生管理的管理水平,优化资源,尽可能降低管理成本成为学生管理的新课题,学生管理系统是从 学生管理现状出发,根据学生管理的新要求进行开发设计的,它需要解决学生信息管理数据信息量大修改 不方便,对一系列数据进行分析时花费时间长等问题,帮助学生管理人员有效管理学生信息。
因此学生信息管理系统可以通过系统规范化地管理、科学性统计和快速查询、修改、增加、删除等,提高 信息的准确度以及日常管理的工作效率。
本系统主要是应用于学生各类信息的管理,总体任务是实现学生信息关系的系统化、规范化、自动化,其 主要任务是统计学生各类信息进行日常管理,如查询、修改、增加、删除、以及学生选课、成绩的查询等 功能设计的管理系统。
2. 约束和限制
核心接口 TPS/QPS 要求至少 200,非核心接口至少 100
数据采用 Oracle
总成本不能超过 50 万
必须在 2021.08.30 号完成
3. 总体架构
3.1 架构分析
3.1.1 高可用
对应学生管理系统学生和课程的数据将影响到学生的学习成绩和毕业相关的问题,如果数据丢失将会造成非常严重的后果。但是系统如果不可用,学生可以推迟选课。因此学生数据的存储需要保证高可用,业务系统则无需过多保证高可用。
3.1.2 高性能
本校学生和老师的数量总数在 2 万左右,因此对系统的性能要求不高,核心接口的 TPS/QPS 要求 200 以上,非核心接口 100 以上
3.1.3 可扩展
业务系统比较复杂,需要考虑系统的可扩展性,将系统分为学习子系统、课程子系统和权限子系统三个系统
3.1.4 安全与成本
系统需要通过权限校验来限制学生和老师的访问内容,不允许学生访问限制内容和修改学习成绩,不允许老师访问其他非本课程学生的信息。
3.2 总体架构
如上图,系统分层学生子系统、课程子系统和权限子系统,通过 Nginx 将请求转发给三个子系统。三个子系统共用一套数据库存储,数据库存储采用主备的架构。
Nginx 作为外网入口,提供三个子系统的路由能力
三个系统分别部署在三台服务器上,与 Nginx 及 MySQL 在同一内网,之间通过内网通信
三个系统共用一个数据库,从主数据库读写数据
主备数据库分别部署在 2 台机器上,通过数据复制来备份
4. 详细设计
4.1 核心功能
4.1.1 学生选课流程
4.1.2 教师管理学生流程
4.2 关键设计
权限校验
学生子系统和课程子系统对所有访问的接口都要调用权限子系统进行权限校验,以免用户越权访问信息。
登录鉴权
使用 jwt 对接口进行登录鉴权,权限子系统需要给登录的用户颁发 jwt token,调用其他系统接口是需要把 token 回传给服务端
4.3 设计规范
前端使用 vue 开发
三个子系统使用 Spring Boot + Netty 开发
客户端与服务端通过 HTTPS 传输,采用 JSON 传输数据
MySQL 使用 Innodb 存储引擎,主备通过 binlog 备份
三个子系统分别创建独立的数据库
5. 质量设计
5.1 可测性
三个子系统要能独立对接口进行测试
5.2 可维护性
需要提供管理员角色,通过管理员角色来维护教师的账号
5.3 成本
整体成本控制到 50 万以内
6. 演进规划
[必选,可以是演进规划,也可以是项目计划,需要描述每个里程碑或者版本具体要实现的能力]
[样例:
6.1 消息队列一期
6.2 消息队列二期
]
[技巧:开发阶段快速迭代,小步快跑,但要基本完善后才能正式推出给其他人用]
评论