架构实战营 - 学生管理系统架构设计
前言
本文是学生管理系统详细架构设计文档,用于指导系统后续的开发、测试和运维。
修订历史
词汇表
MVC:一般指 MVC 框架。 经典 MVC 模式中,M 是指业务模型,V 是指用户界面,C 则是控制器,使用 MVC 的目的是将 M 和 V 的实现代码分离,从而使同一个程序可以使用不同的表现形式。
Nginx:(engine x) 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务。
WAF:Web 应用防护系统(Web Application Firewall),是通过执行一系列针对 HTTP/HTTPS 的安全策略来专门为 Web 应用提供保护的一款产品。
1. 业务背景
随着学校的规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。不仅花费大量的教师资源,处理效率也十分低下。为提高学生管理的管理水平,优化资源,尽可能降低管理成本成为学生管理的新课题,学生管理系统是从学生管理现状出发,根据学生管理的新要求进行开发设计的,它需要解决学生信息管理数据信息量大修改不方便,对一系列数据进行分析时花费时间长等问题,帮助学生管理人员有效管理学生信息。因此学生信息管理系统可以通过系统规范化地管理、科学性统计和快速查询、修改、增加、删除等,提高信息的准确度以及日常管理的工作效率。
本系统主要是应用于学生各类信息的管理,总体任务是实现学生信息关系的系统化、规范化、自动化,其主要任务是统计学生各类信息进行日常管理,如查询、修改、增加、删除、以及学生选课、成绩的查询等功能设计的管理系统。
2. 约束和限制
1.必须在 2022.12.30 号前一次性交付
2.成本不能超过 12 万
3.数据库采用 MySQL
4.开发语言用 Java
3. 总体架构
3.1 架构分析
3.1.1 高可用
学生、课程、选课、考试成绩数据对于学校来说都是非常重要的,若出现大量数据丢失影响严重,数据恢复需要人工一条一条手工补录,恢复时间长,因此在数据高可用这块需要保障,系统层面若发生故障对学校的正常教学影响不大,所以系统高可用不需要过多考虑。
3.1.2 高性能
因为用户数量不多,整体性能也不需要过多要求。
3.1.3 可扩展
选课业务流程和场景相对清晰稳定,可以不考虑可扩展性。
3.1.4 可维护性
软件一次性交付完成后交由专门的人员进行运维,需要具备一定的可维护性。
3.1.5 安全性
考虑到学生的信息私密性、学生成绩不能造篡改以及考试题目不能泄露,系统要考虑防攻击措施,保证数据安全。
3.1.6 成本
学校非营利性组织,需要政府拨款,无太多预算。
综合来看,系统首要需要满足数据的高可用和安全性,其次满足成本、可维护性、高可用、高性能的要求。
3.2 总体架构
1)采用 B/S 架构,客户端使用浏览器;
2)前置采用 Nginx 作为入口网关,部署单个实例,域名解析至单台 Nginx 服务器;
3)为了防御一般性攻击 Nginx 前配置公有云 WAF,来保障安全性;
4)子系统间通过 RPC 调用;
5)服务端拆采用 MVC 框架 Java 实现;
6)数据存储层采用 MySQL,Innodb 作为存储引擎,部署一主一备,主备复制,以达到高可靠目标。
4. 详细设计
4.1 核心功能
4.1.1 学生选课
4.1.2 学生考试
4.2 关键设计
1)信息存储可靠性
信息存储在 MySQL 中,一主一备两台 MySQL 服务器,MySQL 服务器之间复制消息以保证信息存储高可用。如果主备间出现复制延迟,恰好此时 MySQL 主服务器宕机导致数据无法恢复,则部分消息会永久丢失,这种情况不做针对性设计,管理员需要对主备间的复制延迟进行监控,当复制延迟超过 1 分钟的时候需要及时告警并进行处理。
2)信息安全
为了防御一般性攻击 Nginx 前配置公有云 WAF,来保障安全性。
4.3 设计规范
1)学生管理服务器使用 Spring Boot 开发
2)MySQL 使用 Innodb 存储引擎
5. 质量设计
5.1 可测试性
各个子系统独立测试。
5.2 可维护性
记录系统日志以便分析追踪问题。
5.3 可观测性
不涉及
5.4 成本
人力成本:拆分成多个子系统可独立进行开发测试,降低开发成本,但增加了一定的运维成本。
设备成本:一台业务服务器,两台 MySQL 服务器,成本可控。
6. 演进规划
整体功能已比较清晰,未来业务也不会有大的变化,一次交付即可。
评论