学生管理系统架构设计方案
前言
本文是针对学生管理系统的优化架构设计方案,用于指导学生管理系统后续的开发、测试和运维工作
词汇表
SpringCloud:后端微服务框架
Vue/ElementUI:前端基础框架
Nginx:负载均衡/反向代理服务器
MySql:关系型数据库
1. 业务背景
伴随着近几年学校学生数量、课程数量的不断增长,开始逐步出现对于学生管理系统的一些个性化需求,例如支持学生自主选课、提供更加友好的界面、提供更加便捷的后台维护功能等,而现有学生管理系统存在技术栈老旧、可扩展性差、前端页面不友好等诸多问题,导致若想支撑更多个性化、人性化的需求变得难以实现,故本次计划展开对学生管理系统的优化升级工作,核心主要解决如下几个问题:
扩展问题:现有系统采用 springmvc/jsp 框架实现,代码混乱,通过对技术栈、基础架构的优化设计,能够实现便捷高效的开展更多个性化需求的开发
可用性问题:现有系统性能低下且不稳定,经常出现服务不可用,需要提高服务可用性
增量需求:实现自主选课功能
2. 约束和限制
系统上线时间为 2022 年 1 月 1 日
实施成本预算在 50 万以下
数据库必须使用 MySql
系统核心技术栈采用 SpringCloud,方便后续运维开发接入
服务上线后 QPS 能够支撑到 300
3. 总体架构
3.1 架构分析
3.1.1 高可用
学生管理系统是教师和学生日常必用系统,若服务出现不可用,会严重影响学校教学工作的开展,因此系统架构设计应该充分考虑可用性,降低服务不可用的概率
3.1.2 高性能
学生管理系统主要面向全校师生,整体功能设计方面并无高并发业务场景,且学生使用该系统的时间较为分散,因此性能方面可适当降低标准
3.1.3 可扩展
原学生管理系统存在难以扩展的问题,严重阻碍系统的优化迭代,因此需要在架构层面和技术方案对可扩展性做充分考虑
3.2 总体架构
学生管理系统服务拆分为权限子系统、学生子系统、课程子系统、网关 API
系统分层
Web 服务层:基于 Nginx 搭建 web 服务器,部署前端网页,同时作为反向代理和负载均衡服务器
应用服务层:基于 SpringCloud 构建微服务集群,网关实现路由、负载均衡、鉴权等功能
数据库层:基于 MySql 构建主从数据节点,从节点主要用于实现数据备份
4. 详细设计
4.1 核心功能
权限系统
提供用户注册、登录、查询等基础功能
提供权限配置和变更功能
提供数据审计追踪功能
课程系统
提供老师录入课程、课程分类、课程标签分类等课程类功能
提供老师课程排课功能
提供学生对于课程评分功能
学生系统
提供学生检索课程、远程选课功能
4.2 关键设计
基于 Nginx 构建 web 服务器实现负载均衡、页面缓存
API 网关设计实现统一接口鉴权
数据库主从同步实现数据备份,同时方便后续推进读写分离
4.3 设计规范
采用前后端分离方式,前端使用 Vue/ElementUI, 后端使用 SpringCloud 微服务框架,由于服务数量有限,部署方面直接使用脚本部署,不考虑容器化部署
接口基于 Json 格式传输,需要定义统一的全局返回数据格式和全局异常处理
Nginx 作为 Web 服务器提供前端网页访问资源,同时对 API 网关实现负载均衡
API 网关除实现路由功能外,需要与权限服务对接实现网关层面的统一鉴权控制
数据库基于 binlog 的二进制格式进行主从同步,应用层面读写分离暂不考虑
5. 质量设计
5.1 可测试性
系统需要提供一套标准规范的 API 文档(接口参数、说明、返回字段等描述清晰准确),用于实现接口测试
5.2 可维护性
文档齐全:系统架构文档、应用部署文档、环境搭建文档、数据字典
代码规范符合阿里编码规范手册、内部项目开发手册标准
服务采用脚本部署,需要提供完善的脚本和对应说明
5.3 可观测性
考虑成本的原因,暂不考虑引入 Promethues 和 Grafana 监控平台,可直接使用 SpringBoot admin 进行服务监控
对于一些重要功能模块应该提供审计追逐功能
6. 演进规划
2022 年 1 月 1 日完成 1.0 版本的发布,需要实现基础功能和自主选课功能,同时支撑平滑过渡
2.0 版本需求待 1.0 版本上线收集需求重新确定功能范围
评论