外包学生管理系统详细架构设计文档
1. 业务背景
学校对学生的管理,传统上都是手工的方式,随着规模扩展,带来几个明显的问题:
效率低
花费大量的教师资源
管理不规范
2. 约束和限制
1、由于学校预算的限制,项目成本不得超过 10 万。
2、系统资料不得丢失。
3、在校学生人数有 5 万人,期中、期末会有同时考试的情况。
4、开发语言使用 Java。
3. 总体架构
3.1 架构分析
系统主要分为 4 个子系统,分别为学生管理系统、权限管理系统、考试管理系统、课程管理系统,通过 Nginx 进行访问;数据部分采用 Mysql 主备方式,保证数据的可靠性。
1)学生管理子系统:学生信息的管理
2)权限管理子系统:角色管理,不同角色权限的管理
3)考试管理子系统:考试内容的管理,试卷生成,成绩批改,考试安排等
4)课程管理子系统:课程安排、
布置/批改作业
、签到等
5)数据采用 Mysql 主从备份,记录所有的数据信息。
3.1.1 高可用
由于期中、期末存在同时考试的情况,考试模块需要考虑高性能、高可用。
3.2 总体架构
此次架构分为三层:网关层、业务服务层、数据层。
网关层:
使用 Nginx 作为服务器网关,主要用于请求的负载均衡与服务路由分发,学生信息的相关请求路由到学生子系统,课程信息、考试相关的请求路由到课程子系统,教师、权限相关的请求路由到权限子系统。
业务服务层:
业务服务层由三个子系统组成:学生子系统、课程子系统、权限子系统。
数据层:
数据层由一主一备两台 Mysql 数据库服务器组成,主数据库负责日常所有业务数据的读写,并实时备份数据到备库。
由于业务性能要求不高,不需要做读写分离。
备库负责存储备份数据并在主库出现故障时临时切换到备库,保障可用性。
部分开发与运维同学使用数据库工具查询 or 统计数据时,可连接备库进行查询,这样可以保障主库的稳定性。
4. 详细设计
4.1 核心功能
4.2 关键设计
1.系统拆分为多个子系统,单独部署、开发,降低耦合,有利于业务的后期扩展
2.数据存储采用 mysql, 主机负责读写,主备间通过 binlog 同步,如果主机挂了,会丢失部分数据,而在这一时间段内子系统读写数据库操作失败,用户需要等数据切换到备机再操作一次。
4.3 设计规范
(1) 使用前后端分离的技术,前端使用 react 框架进行编写,后端使用 java 语言并使用 spring boot 构建应用,前端代码部署在 nginx,前后端使用 restful 规范进行交互。
(2) 数据库使用 mysql 8.0,innodb 引擎,一主一备,使用同步复制模式。ORM 框架使用 mybatis。
5. 质量设计
可测试性:
http 接口建立 postman 测试用例。
Dubbo 接口通过 Dubbo 管理控制台建立测试用例。
超级管理员具有学生信息、教师信息、权限信息的删除权限,这样能保证测试后的一些测试脏数据可以通过超级管理员进行删除。
可维护性:
Dubbo 具有控制台进行管理。
mysql 可通过运维控制台进行管理。
可观测性:
系统性能观测,Dubbo、zookeeper、服务器、mysql 等,使用云平台提供的控制台进行系统监控。
业务数据由于没有多少,不需要监控。
成本:
目前云服务器的成本还是比较低的,而且由于性能要求不高,整体服务器可以选普通的服务器即可。
6. 演进规划
6.1 项目一期
完成学生管理、权限管理、课程管理、三个子系统的开发
6.2 项目二期
根据一期系统的使用体验及优化建议,进行优化,同时开发
考试管理、通知推送,简单的系统运维监控。
评论