课程学习笔记
详细见:https://www.processon.com/view/link/613df63c7d9c081bd8fdc0b8
作业:
前言
本文的设计对象是外包学生管理系统,用于指导该系统后续的开发、测试与运维工作。
词汇表
Nginx:开源的高性能 HTTP 与反向代理 web 服务器;
MySQL:开源的关系型数据库
Spring Boot:后端 Java 开发框架
Vue:一套用于构建用户界面的渐进式框架。
1. 业务背景
随着学校的规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。随之而来的几个明显的问题:
- 学校信息化管理水平低下,浪费太多师资力量在枯燥的数据录入和统计的工作中;
- 数据处理效率底下,尤其是在新生入学或者考试季节,老师需要大量的时间处理相关事务,加班加点的现象在所难免;
- 数据分析与报表基于 Excel,重复性劳动多,且出结果慢。
基于以上背景,为提高学生管理的管理水平,优化资源,尽可能降低管理成本成为学生管理的新课题,学生管理系统是从学生管理现状出发,根据学生管理的新要求进行开发设计的,它需要解决学生信息管理数据信息量大修改 不方便,对一系列数据进行分析时花费时间长等问题,帮助学生管理人员有效管理学生信息。因此学生信息管理系统可以通过系统规范化地管理、科学性统计和快速查询、修改、增加、删除等,提高 信息的准确度以及日常管理的工作效率。
本系统主要是应用于学生各类信息的管理,总体任务是实现学生信息关系的系统化、规范化、自动化,其主要任务是统计学生各类信息进行日常管理,如查询、修改、增加、删除、以及学生选课、成绩的查询等 功能设计的管理系统。
外包学生管理系统利益干系人分析图
外包学生管理系统由学校方采购,使用者包括学生与老师,系统由外包团队开发,后期由学校自己的运维人员负责运维,采用私有化部署方案。
2. 约束和限制
项目的相关要求包括以下几点:
- 两个月后需交付;
- 成本不能超过 30 万;
- 系统性能到达 200TPS;
- 系统出故障时,恢复时间不可超过半小时;
- 团队目前开发人员 5 人,测试人员 2 人,UI 设计 1 人,产品经理 1 人。
3. 总体架构
总体架构包括架构分析、总体架构说明两部分。架构分析部分说明架构设计的考虑点,总体架构部分则对架构方案做详细说明。
3.1 架构分析
3.1.1 可扩展性
系统业务涉及权限、审批等,业务较复杂,需借助工作流等技术,保证系统的可扩展性。
3.1.2 高可用(一定的可用性)
系统需具备较好的可用性,服务于学校 5000 名师生,系统若宕机,则师生无法使用系统,影响较大。系统数据不能丢失,故数据库服务器需采用主从备份方案。
3.1.3 成本与安全
由于学校预算有限,故系统应该尽可能采用开源的方案。校方要求两月内交付上线,故项目需要控制开发周期与成本。系统采用私有化部署,在局域网内部才可以访问系统,故系统只需要做一般的安全防护即可。
3.1.4 性能要求
项目要求具备 200TPS,故数据库服务器需采用稍好一点的配置。备份服务器则不需要和主库拥有相同的配置。
3.2 总体架构
项目整体架构图如下:
https://www.processon.com/view/link/613e0a07f346fb070b9b519a
项目内部分为学生管理、课程管理、考试管理和权限管理四部分。项目采用前后端分离的模式,前端工程部署于 Nginx。后端项目开发基于 Spring Boot,采用 Java 语言开发系统,数据库采用 MySQL。数据库架构采用双主架构,主主互备,业务通过虚拟的 IP 连接数据库。文件管理基于 FastDFS。
4. 详细设计
详细设计概述
4.1 核心功能
4.1.1 学生管理
4.1.2 课程管理
4.1.3 考试管理
4.1.4 权限管理
4.2 关键设计
4.2.1 数据存储可靠性
业务数据存储在 MySQL 中,有两台互为主备的 MySQL 服务器,MySQL 服务器之间互相数据备份以保证存储高可用。
4.2.2 权限管理
权限管理基于 RBAC 模型,系统的各种权限全部抽象成角色,用户赋予角色,按角色进行数据权限与访问权限控制。
4.2.3 数据同步
系统要求数据具备一定的可用性与容灾能力,采用主从同步的 MySQL 来实现数据同步。
4.3 设计规范
1)后端服务开发使用 Spring Boot + MySQL + Mybatis 开发;
2)MySQL 使用 Innodb 存储引擎,数据库采用双主;
3)前端开发采用 Vue + Axios;
4)负载均衡采用 Nginx。
5. 质量设计
5.1 可测试性设计
由测试人员按照相关业务需求梳理出各项业务功能验证项。
5.2 可观测性设计
日志记录到本地,分日志级别输出到不同的文件中。
5.3 可维护性设计
编写 Shell 脚本,在程序宕机时,定时拉起程序;如果服务器主机宕机,则通过监测服务器发送报警信息,通知运维人员将机器重启。
6. 演进规划
快速迭代,与校方负责人核对需求,再进行改进,已辅助通过验收。交付验收后,系统日常运维即可,不涉及后续迭代。
6.1 第一周,出项目 UI 设计稿,梳理主要流程,与校方负责人确认。后端人员开始设计表结构,搭建项目基本框架;
6.2 第二~四周,确认设计稿,前后端正式按设计稿开始开发,完成一个最小化可行版本;
6.3 第五周,给客户演示最小化可行版本,与其确认功能是否正常,收集客户意见;
6.4 第六~七周,不断按客户意见进行迭代;
6.5 准备验收工作,到现场部署。