学生管理系统架构设计文档
前言
本文是学生管理系统细架构设计文档,用于指导续的开发、测试和运维。
修订历史
词汇表
一、 业务背景
随着学校的规模的不断扩大, 学生数量的增加, 需要处理的信息也日趋增大 。不仅花费大量的教师资源, 处理效率也十分低下。
为提高学生管理的管理水平,优化资源,尽可能降低管理成本成为学生管理的新课题, 学生管理系统是从学生管理现状出发, 根据学生管理的新要求进行开发设计的, 它需要解决学生信息管理数据信息量大修改不方便, 对一系列数据进行分析时花费时间长等问题,帮助学生管理人员有效管理学生信息。
对学生管理系统的要求为:
● 可以通过系统规范化地管理 、科学性统计和快速查询 、修改 、增加 、删除等, 提高信息的准确度以及日常管理的工作效率。
● 系统主要是应用于学生各类信息的管理,总体任务是实现学生信息关系的系统化 、规范化 、自动化, 其主要任务是统计学生各类信息
● 进行日常管理, 如查询 、修改 、增加 、删除 、 以及学生选课 、成绩的查询等功能设计的管理系统。
系统主要应用于学校学生信息管理,总体任务时实现学生信息管理的系统化、规范化和自动化。其主要任务时管理学生相关信息,如学籍、课程、成绩、奖惩。
二、 约束和限制
无
三、 总体架构
3.1 架构分析
学生管理系统的架构复杂度分析:
● 高性能
学生人数在 5w 左右,系统主要用于学生信息管理,日常操作集中在登陆、注册、信息录入、信息查询等情景,其中高并发场景只有开学季学生大规模的注册和登陆。
假设新生人数占三分之一,算 2w,所有心生的注册、登陆在 2 小时内完成,平均 TPS 也只是个位数。
结论:系统对高性能无特别需求。
● 高可用
业务高可用:对学生管理系统来说,短时间的不可用可以接受,有问题修复即可
存储高可用:数据是不能丢的,如果大批数据丢失,需要老师、学生、管理员耗费大量精力重录,且不一定可以恢复。
结论:需设计存储高可用。
● 可扩展
学生管理系统满足学校的功能需求即可,无需考虑可扩展性。
● 成本
硬件成本:已和学校沟通完毕,使用学校机房资源进行部署。
开发成本:将系统划分为三个子系统,提高开发效率,节约开发成本。
● 系统质量
因系统比较简单,且高性能、高可用没有严格的需求,无需另外开发配套的管理系统和运维系统,但应该设计对存储状态进行简单监控,避免数据丢失。
3.2 总体架构
● 子系统 Role 设计
子系统采用 Java Springboot 语言开发
● 反向代理
系统入口选用 Nginx 做反向代理
● MySQLRole 和 Relation 设计
采用 MySQL 主从同步
直接用 MySQL 的主从复制来实现数据复制
● 各子系统之间、子系统和 MySQL 之间 Relation 设计
各子系统读写数据库均在 MySQL 主库进行操作
子系统之间通过 HTTP 接口进行交互,交互数据格式为 JSON
子系统间接口调用响应时间不超过 50ms
四、 详细设计
4.1 核心功能
4.1.1 权限管理
● 使用者角色分为学生、教师、管理员、辅导员
● 学生、教师、辅导员可以注册、登录、修改自己的信息,注册信息需要管理员审核通过
● 学生只能查看自己的成绩,教师可以修改学生的成绩
● 辅导员可以查看学生的信息,可以设置学生的奖惩信息
● 教师可以上传考试试题,学生可以做题
4.1.2 账号分配
● 学生账号由系统生成
● 教师账号由管理员通过系统生成
● 管理员账号为系统固有账号
4.1.3 查询课程信息
4.2 关键设计
MySQL 使用主从复制,保证数据不丢失。
4.3 设计规范
● 业务子系统使用 SpringBoot 开发
● 子系统之间通过 HTTP 协议交互,交互数据格式为 JSON
● MySQL 使用 Innodb 存储引擎
五、 质量设计
● 可观测性
无需单独设计运维平台和管理平台,使用开源产品 Prometheus+grafana+alertmanager 对子系统运行状态,和 MySQL 运行状态、主从复制状态进行监控,配置故障报警,保证系统的可观测性。
● 成本
监测系统可复用业务服务器,节省成本
六、 演进规划
该项目由学校验收通过即可,功能点和用户数都不会产生新的需求,所以无需演进。
评论