模块三作业——学生管理系统详情设计
前言
[可选,用于总体上描述本篇文档的内容和目的]
[样例:本文是游戏业务线消息队列中间件详细架构设计文档,用于指导消息队列后续的开发、测试和运维]
词汇表
MySQL:使用最广泛的关系数据库,开源;
Spring:Java 生态系统中使用最广泛, 便于维护的框架;
Nginx: 使用最广泛的高性能 HTTP 服务器和反向代理,可用于实现负载均衡;
1. 业务背景
随着学校的规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。不仅花费大量的教师资源,处理效率也十分低下。在此背景下,为了提高学生管理的管理水平,优化资源,尽可能降低管理成本成为学生管理的新课题,因此我们针对性的开发设计出一套学生管理系统,该系统主要实现如下目标:
1)从学生管理现状和新要求出发,解决学生信息管理数据信息量大修改不方便,对一系列数据进行分析时花费时间长等问题,帮助学生管理人员有效管理学生信息。
2)可以通过系统规范化地管理、科学性统计和快速查询、修改、增加、删除等,提高信息的准确度以及日常管理的工作效率。
3)总体任务是实现学生信息关系的系统化、规范化、自动化,其主要任务是统计学生各类信息进行日常管理,如查询、修改、增加、删除、以及学生选课、成绩的查询等功能设计的管理系统。
2. 约束和限制
1)开发语言选择 java
2)成本限制在 60 万元以内
3)开发周期在 2022 年 7 月 10 日完成发布上线,8 月 20 号数据迁移完成
4)数据库限制使用 MySQL
3. 总体架构
目前是独立系统,暂时不需要考虑跟其他系统的集成。
3.1 架构分析
3.1.1 高可用
数据不能大面积丢失,数据设计需要有备份机制,数据丢失后可以进行恢复。
3.1.2 高性能
整体无高并发需求。仅部分功能,比如选课、查成绩等需要考虑。
3.1.3 可扩展
需要考虑水平方向业务可扩展,后期跟学校其他系统可集成到一起,无其他需求。
3.1.4 安全性:不包含私密信息,对安全性要求不高
3.1.5 成本:学校经费有限,需要控制研发成本和设备成本
3.2 总体架构
1)采用数据分散集群的架构,集群中的服务器进行分组,每个分组存储一部分消息数据。
2)每个分组包含一台主 MySQL 和一台备 MySQL,分组内主备数据复制,分组间数据不同步。
3)正常情况下,分组内的主服务器对外提供数据写入和读取服务,备服务器不对外提供服务;主服务 器宕机的情况下,备服务器对外提供数据读取的服务。
4)客户端采取轮询的策略写入和读取数据。
4. 详细设计
用于学生信息管理,实现学生信息管理的系统化、规范化和自动化。其主要业务是管理学生相关信息,如学籍、课程、成绩、奖惩。
4.1 核心功能
4.1.1 学生注册流程
1) 学生通过 WEB 端输入关键注册信息,在前端进行格式校验
2) 数据发到服务器,写入主数据库,返回给终端“审核中”
3)管理员审核后,系统发送审核结果给学生
4.1.2 选课管理设计
1) 学生进入选课管理页面
2) 选择对应的课程加入到我的课程里,点击提交
3) 后台检查课程是否可以正常选择,对应的数据写入主机数据库中,返回给终端处理结果
4.1.3 权限管理设计
1) 系统使用者有学生、教师、辅导员、管理员,每个角色有不同的权限功能。
2) 学生、教师、辅导员可以注册、登录、修改自己的信息,但这些信息需要管理员审核通过。
3) 学生只能查看自己的成绩,教师可以修改学生的成绩。
4) 辅导员可以查看学生的信息,可以设置学生的奖惩信息。
5) 教师可以上传考试试题,学生可以做题。
4.2 关键设计
1)数据可靠性
数据存储在 MySQL 中,每个分组有一主一备两台 MySQL 服务器,MySQL 服务器之间复制数据以保证存储高可用。如果主备间出现复制延迟,恰好此时 MySQL 主服务器宕机导致数据无法恢复,则部分数据会永久丢失,这种情况不做针对性设计,DBA 需要对主备间的复制延迟进行监控,当复制延迟超过 30 秒的时候需要及时告警并进行处理。
2)数据如何存储
每个专业的一个年级对应一个 MySQL 表,就是表名(比如 software2021),表结构设计此处省略
3)并发:负载均衡和 MySQL 的性能,可以满足选课、查成绩的并发量
4)安全性:不包含私密信息,不需要特殊设计
4.3 设计规范
4.3.1【客户端 Role 设计】
1. 客户端采用 Java 语言开发,基于 Netty 实现与服务端交互。
4.3.2【服务器 Role 设计】
1. 服务器基于 Netty 开发,采用 Reactor 网络模型。
2. 两台服务器组成一个 sharding,整个系统可以多个 sharding,每个 sharding 包含一主一从两台服务器。
3. 主服务器提供读写操作,从服务器只提供读取操作。
4. 服务器基于 ZooKeeper 进行主从切换。
4.3.3【客户端和服务器的 Relation 设计】
1. 客户端与服务端采用 TCP 连接,采用 JSON 传递数据。
2. 为了兼容非 Java 系统,服务端同时提供 HTTP 接口。
4.3.4【MySQL 的 Role 和 Relation 设计】
1. 采用 MySQL 主从同步。
2. 每个专业的一个年级对应一个表。
2. 直接用 MySQL 的主从复制来实现数据复制。
4.3.5 编码规范:
接口遵循 RESTful 设计规范
采用驼峰式命名
5. 质量设计
可观测性:管理后台
可测试性:测试账号不可见,后台管理系统配置数据
可维护性:提供测试环境
成本:上面已考虑,不再特殊设计
6. 演进规划
6.1 一期:网页端基本功能(审核后无通知、无考试功能、无上传下载功能)
6.2 二期:移动端小程序基本功能
6.3 三期:网页端和移动端完整功能
6.4 四期:跟现有其他系统集成
评论