学生管理系统 - 详细架构设计文档
1. 前言
本文是学生信息管理系统的详细架构设计文档,用于指导系统后续的详细方案设计、开发、测试以及运维。
2. 词汇表
3. 业务背景
随着学校的规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。随着数据量的日益增加,在处理学生信息时也暴露了一些问题:
1. 花费大量的教师资源,处理效率也十分低下。
2. 学生信息量大修改不方便
3. 数据分析花费时间长
本系统可以通过系统规范化地管理、科学性统计和快速查询、修改、增加、删除等,提高信息的准确度以及日常管理的工作效率。
本系统主要是应用于学生各类信息的管理,总体任务是实现学生信息关系的系统化、规范化、自动化,其主要任务是统计学生各类信息进行日常管理,如查询、修改、增加、删除、以及学生选课、成绩的查询等功能设计的管理系统。
本系统为一套独立的系统,与其他系统没有任何交互联系
4. 约束和限制
4.1. 时间约束
1. 2022-3-1 号之前完成
4.2. 成本约束
无
4.3. 技术约束
1. 数据库使用 MySQL
2. 编程语言使用 Java
3. 服务框架使用 SpringBoot
4. 应用负载使用 Nginx
4.4. 质量约束
无
5. 总体架构
5.1. 架构分析
5.1.1. 高可用
对于学生相关信息的存储需要严格备份,尤其是学生信息在机器宕机等异常状态下不能丢失。
5.1.2. 高性能
一个学校的学生数量最多几万,对于系统来说并不是一个具有挑战性的数量,所以对高性能并不需要。
5.1.3. 可扩展
由于学生相关的业务比较复杂,所以需要多个人进行协同开发。
5.1.4. 成本
该系统复杂度较低,暂无特别高的成本。
5.1.5. 安全
该系统属于内部系统,并不对外暴露服务,所以并无特别的安全隐患。
5.2. 总体架构
5.2.1. 架构图
5.2.2. 架构描述
1. 本系统采用分散集群架构,学生、课程、权限每个作为一个子系统独立运行。
2. 所有子系统访问同一套主备架构的 MySQL。
3. 权限子系统管理学生子系统与课程子系统的相关权限。
4. 课程子系统为学生子系统提供课程与考试相关的功能。
5. 学生子系统负责管理学生相关的信息。
6. 详细设计
6.1. 核心功能
6.1.1. 注册
6.1.2. 考试
6.1.3. 选课
7. 关键设计
7.1. 可扩展设计
通过拆分成三个子系统,每个子系统可以针对各自系统内部的其他需求进行灵活扩展,且不会影响其他两个子系统的功能。
7.2. 高可用设计
数据存储在 MySQL 中,每个分组有一主一备两台 MySQL 服务器,MySQL 服务器之间复制数据以保证数据存储高可用。如果主备间出现复制延迟,恰好此时 MySQL 主服务器宕机导致数据无法恢复,则部分数据会永久丢失,这种情况不做针对性设计,DBA 需要对主备间的复制延迟进行监控,当复制延迟超过 30 秒的时候需要及时告警并进行处理。
8. 设计规范
1. MySQL 使用 Innodb 存储引擎
2. 子系统之间使用 HTTP 协议交互
3.子系统接口设计需要符合 RESTFUL 规范,相应内容需要为 JSON 格式,且符合以下格式
{
“trackId”:“”
“msg”:””,
“timestamp”: 0,
“data”: Null
}
9. 质量设计
9.1. 可测试性
每个子系统内部通过进行模块划分的手段,将内部功能隔离,保障所有的功能点都能进行独立测试。
9.2. 可维护性
系统代码严格遵守规范:核心流程添加注释,所有异常严格捕获保障异常可追溯,等等。提高维护人员对系统的理解能力。
9.3. 可观测性
1. 使用 Prometheus 监测系统的运行状态以及资源占用情况,随时掌握系统的运行状况。
9.4. 安全性
本系统通过内网部署+权限验证的功能基本杜绝了外部人为对系统的冲击。
10. 演进规划
10.1. 学生管理系统一期
2021-12-31 日之前完成学生信息的管理、课程的管理,以及课程相关的权限管理。
10.2. 学生管理系统二期
2022-03-1 日之前完成考试管理并完善权限管理。
版权声明: 本文为 InfoQ 作者【joukosusi】的原创文章。
原文链接:【http://xie.infoq.cn/article/c10a6a2d4c840c2cebb8e4ff2】。
本文遵守【CC BY-NC】协议,转载请保留原文出处及本版权声明。
评论