【架构师训练营】模块三作业
前言
本文是学生管理系统的详细架构设计文档,用于指导外包学生管理系统后续的开发、测试和运维。
词汇表
Spring: Java 生态系统中使用最广泛, 便于维护的框架.
MySQL: 使用最广泛的开源数据库.
Nginx: 使用最广泛的高性能 HTTP 服务器和反向代理.
1. 业务背景
随着学校的规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。不仅花费大量的教师资源,处理效率也十分低下。
为提高学生管理的管理水平,优化资源,尽可能降低管理成本成为学生管理的新课题,学生管理系统是从学生管理现状出发,根据学生管理的新要求进行开发设计的,它需要解决学生信息管理数据信息量大修改不方便,对一系列数据进行分析时花费时间长等问题,帮助学生管理人员有效管理学生信息。因此学生信息管理系统可以通过系统规范化地管理、科学性统计和快速查询、修改、增加、删除等,提高信息的准确度以及日常管理的工作效率。
本系统主要是应用于学生各类信息的管理,总体任务是实现学生信息关系的系统化、规范化、自动化,其主要任务是统计学生各类信息进行日常管理,如查询、修改、增加、删除、以及学生选课、成绩的查询等功能设计的管理系统。
2. 约束和限制
成本不能太高
学生数量变化不大
数据不能丢失
为方便后续维护, 需要使用 Java 技术栈
3. 总体架构
3.1 架构分析
高可用
属于管理系统, 可以在深夜或者周末, 节假日进行维护。对可用性要求不会很高。
高性能
学校的人数有限, 且大部分时间大家都不会使用该系统. 仅需对部分模块, 比如选课, 考试进行特殊设计。
可扩展
考虑到目前只是面对一个学校,可扩展要求不高。
安全性
因为是包含学生成绩,数据需要安全和可靠,不能丢失。
3.2 总体架构
数据库采用 mysql 主备架构。一台主 MySQL 和一台备 MySQL。备机正常情况下不对外服务。
业务模块由 3 个子系统组成,课程子系统、学生子系统、权限子系统。
Nginx 作为反向代理,http 缓存服务器。负责把请求的路径映射到对应的业务子系统上,并对一些静态页面做缓存。
4. 详细设计
4.1 核心功能
4.1.1 权限子系统
包含账号分配、系统登录、权限管理功能。
mysql 负责存储用户的账户信息包括密码,身份信息,权限信息。
由权限子系统的 API 服务层负责增删查改这些信息。并针对整个系统的所有请求进行身份验证及权限校验,会使用应用内本地缓存,来提高校验速度。
4.1.2 课程子系统
包含课程管理、考试管理功能。
mysql 负责存储课程信息包括教材信息,课程排课信息,课程的考试信息,平时成绩,以及学生的考试成绩。
由课程子系统的 API 提供相关的增删查改功能。
4.1.3 学生子系统
包含学生选课、学生上传、下载文件功能。
mysql 负责存储学生的选课信息,学生上传的文件路径,具体文件直接存储在业务服务器上。
通过权限子系统识别用户是否有权限去选课等。
通过调用课程子系统的 API 来得到课程和考试的基础信息。
4.2 关键设计
用户与 nginx 之间使用 https 协议。
前端 Vue, 后端使用 Spring Boot。
数据库主从半同步。
4.3 设计规范
前后端分离,后端使用 Spring Boot 开发。
MySQL 使用 InnoDB 引擎。
使用 HTTP 接口通信, 方便开发和维护。
5. 质量设计
可测试性
根据各子系统的接口,来进行系统的功能测试
可维护性
可通过系统日志,来定位、修复问题
可观测性
可以通过各个功能模块的接口、系统的日志、系统常见指标和服务器运行状态的监控来观察系统的内部运行情况
安全
通过防火墙来阻断常见的网络攻击,保障系统的安全性
6. 演进规划
6.1 更多功能
学生课程喜好报表
学生成绩报表
评论