模块三作业 - 学生管理系统架构文档
学生管理系统详细架构文档
前言
本文是学生管理系统的详细架构设计文档,用于指导系统的后续开发、测试和运维。
词汇表
Nginx:一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务。
Mysql:开源关系型数据库
1. 业务背景
随着学校的规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。不仅花费大量的教师资源,处理效率也十分低下。
为提高学生管理的管理水平,优化资源,尽可能降低管理成本成为学生管理的新课题,学生管理系统是从学生管理现状出发,根据学生管理的新要求进行开发设计的,它需要解决学生信息管理数据信息量大修改不方便,对一系列数据进行分析时花费时间长等问题,帮助学生管理人员有效管理学生信息。
因此学生信息管理系统可以通过系统规范化地管理、科学性统计和快速查询、修改、增加、删除等,提高信息的准确度以及日常管理的工作效率。
本系统主要是应用于学生各类信息的管理,总体任务是实现学生信息关系的系统化、规范化、自动化,其主要任务是统计学生各类信息进行日常管理,如查询、修改、增加、删除、以及学生选课、成绩的查询等功能设计的管理系统。
2. 约束和限制
1. 能够支撑管理 1000 个学生;
2. 成本不超过 100 万;
3. 总体架构
3.1 架构分析
1. 系统并发度分析
需求要求支持 1000 学生,则假设师生比为 1:20,则有教师用户 50 人,系统总用户数为 1050 人;
在线比例约为 5%~20%,则在线人数约为 50~200 人;
系统并发请求比例按照 10%-20%来计算,则系统并发请求 QPS 约为 5~40。
由此得知,系统并发压力较小;
2. 业务复杂度分析
业务需求比较复杂,且未来存在需求大量变动的可能性,需要保留一定的扩展性;
3. 数据复杂度分析
数据要求不能全部丢失,故需要对存储模块进行高可用设计;
3.2 总体架构
系统架构图如下:
系统主要分为三层:
l 第一层负载均衡和服务转发层,包含一台 nginx 服务器
l 第二层为应用层,分为学生子系统、课程子系统、权限子系统三个模块,各模块分别运行在一台独立服务器上;
l 第三层为存储层,包含一台主 MySQL 和一台备 MySQL,主备数据复制;
客户端将服务请求发生至 Nginx 服务器;
Nginx 将服务请求分发至各应用服务器;
学生子系统、课程子系统、权限子系统三台应用服务器连接存储层,进行数据的读写操作;
主服务器对外提供消息写入和消息读取服务,备服务器不对外提供服务;主服务器宕机的情况下,备服务器对外提供消息读取的服务。
4. 详细设计
4.1 核心功能
客户端发送访问请求至 Nginx 服务器。
Nginx 服务器将请求转发至学生子系统或课程子系统;
如该请求需要权限认证,则学生子系统和课程子系统将访问权限子系统,进行鉴权操作;通过后访问存储模块,之后将结果返回给客户端;
4.2 关键设计
1. 数据存储可靠性
数据存储在 MySQL 中,包括一主一备两台 MySQL 服务器,MySQL 服务器之间复制消息以保证消息存储高可用。如果主备间出现复制延迟,恰好此时 MySQL 主服务器宕机导致数据无法恢复,则部分消息会永久丢失,这种情况不做针对性设计,DBA 需要对主备间的复制延迟进行监控,当复制延迟超过 30 秒的时候需要及时告警并进行处理。
2. 应用系统设计
应用系统拆分为三个子系统,以提升整体性能和可用性;降低单台服务器发生故障后的不良影响;
4.3 设计规范
1. 学生子系统、课程子系统、权限子系统采用 java 语音编写,使用 springboot 框架,使用 JDBC 连接数据库;
2. Mysql 使用 Innodb 存储引擎;
5. 质量设计
l Ngxin 服务转发层
Nginx 业界应用广泛,其可测试性、可维护性、可观测性良好,成本低廉;
l 应用层
学生子系统、课程子系统、权限子系统采用 java 编写,使用 springboot 框架,业界应用广泛,其可测试性、可维护性、可观测性良好,开发成本较低;
l 存储层
Mysql 为业界广泛使用的开源关系型数据库,可测试性、可维护性、可观测性良好,开发成本较低;
6. 演进规划
近期规划:
1. 采用外购 CDN 服务的方式来提升静态信息的访问速度;
中远期规划:
1. 采用应用服务器集群的方式,提升应用服务性能;
2. 考虑到诸如抢课等特殊高并发场景,引入 Redis 服务器,降低对数据库的压力;
评论