架构实战营第 10 期 - 模块三作业:外包学生管理系统详细架构设计文档
前言
本文是外包学生管理系统详细架构设计文档,用于指导消息队列后续的开发、测试和运维
1. 业务背景
为了满足不断扩大的学校规模,学生数量的增加,以及信息化,数字化的办公需求不断增多,提高学生信息管理水平与效率,我们需要进行外包学生管理系统的建设。
根据现状出发,系统需要满足以下几点要求:
满足学生信息的增删查改
可以对学生进行多维度查询统计
学生与课程,考试之间可以快速便捷的进行联系操作与展示。
同时满足老师对于学生,课程以及考试的相关日常管理工作。
2. 约束和限制
必须要 2023 年 5 月 31 日前完成
成本不能超过 100 万
学生、老师数据安全可靠
具备扩展能力
数据库采用 Mysql
后端使用 Java 语言开发
3. 总体架构
3.1 架构分析
3.1.1 高可用
老师的日常工作,以及课程考试安排均在此系统进行操作,一定时间的不可用会导致学生老师上课或者考试受到影响,因此需要高可用
3.1.2 高性能
内部使用系统,用户规模小,目前对性能要求不高
3.1.3 可扩展
学校规模会扩大,学生也会增加,因此系统具备一定的可扩展能力是需要的
3.1.4 安全
保障数据安全不丢失
3.2 总体架构
将学生管理系统进行无状态设计,便于基于扩展需求进行扩展
mysql 进行主备,已确保数据的安全可靠
利用 nginx 进行负载均衡,易于扩展
4. 详细设计
4.1 核心功能
4.1.1 学生
学生填写入学信息
学生查看自己课表与对应老师
学生进行选修课选择
学生查看考试成绩
4.1.2 老师
老师设置课表内容
老师录入学生考试成绩
4.2 关键设计
消息存储可靠性
消息存储在 MySQL 中,每个分组有一主一备两台 MySQL 服务器,MySQL 服务器之间复制消息以保证消息存储高可用。如果主备间出现复制延迟,恰好此时 MySQL 主服务器宕机导致数据无法恢复,则部分消息会永久丢失,这种情况不做针对性设计,DBA 需要对主备间的复制延迟进行监控,当复制延迟超过 30 秒的时候需要及时告警并进行处理。
消息如何存储
学生信息,课程信息,考试信息,以及关联关系需要满足数据库 1、2、3、BC、4 范式,同时做好表之间的级联设计避免出现脏数据。
4.3 设计规范
MySQL 使用 Innodb 存储引擎
业务服务器使用容器部署
API 接口遵循 RESTful 规范
5. 质量设计
5.1 可测试性
代码单元测试覆盖率大于 90%
5.2 可维护性:
代码规范和质量,可通过 sonar 插件扫描检查
5.3 可观测性
后台管理修改数据需要记录轨迹,可审计,可追踪,同时记录各个 API 的 qps,已确保服务负载健康
6. 演进规划
6.1 一期
后台管理系统核心模块功能可用。
6.2 二期
增加可观测性,收集业务数据,便于后续学生数据分析。
6.3 三期
利用可观测性的数据,对学生,老师,课程,考试进行多维度分析与展示,从而优化课程教学质量。
评论