学生管理系统详细架构设计
前言
本文是外包学生管理系统详细架构设计文档,用于指导后续开发,测试和运维
词汇表
MySQL:数据库存储
Nginx:高性能的 HTTP 和反向代理 web 服务器
1. 业务背景
随着学生管理系统使用人数和年限的增加,数据沉淀越来越多,性能和安全问题愈加明显,主要表现为以下几个系统问题:
l 性能问题:当查询,保存和修改,延迟明显。影响正常工作效率。
l 安全问题:学生和教师信息不够安全,权限划分不够细致。
l 效率问题:目前学生,教师,试卷等信息输入还是通过人工输入,无法通过 Excel 导入。
2. 约束和限制
l 投入资本 5 万,甲方提供部署环境
l 开发人员 3 人,2 名 Java 工程师,1 人前端
l 开发时间 3 个月
3. 总体架构
3.1 架构分析
3.1.1 高可用
学生管理系统数据不允许丢失,高可用方便只要做到没有单机故障,各个系统需要多台部署。
3.1.2 可扩展
随着业务规模增加,会出现不同场景的需求,需要支持可扩展
3.1.3 高性能
学生开学报课会出现同时使用报课功能,会在一定时间内出现比较高的并发,需要支持较高并发下的查询和处理性能
3.1.4 安全
需要保证学生,教师,试卷等信息安全问题,做到访问隔离
3.1.5 可测试性、可维护性、可观察性
需要有单元和集成测试,增强项目质量
3.2 总体架构


1. 使用 Nginx 作为负载均衡
2. Spring Cloud Gateway 作为业务网关,用于认证授权,负载均衡,限流熔断,链路跟踪,监控高级
3. 各个微服务间使用内网地址+Json 访问,使用工具 Feign
4. 数据库使用主备复制,防止数据丢失
4. 关键设计
4.1 核心功能

4.2 关键设计
4.2.1 存储可靠性
消息存储在 MySQL 中,有一主一备两台 MySQL 服务器,MySQL 服务器之间复制消息以保证数据存储高可用。如果主备间出现复制延迟,恰好此时 MySQL 主服务器宕机导致数据无法恢复,则部分消息会永久丢失,这种情况不做针对性设计,DBA 需要对主备间的复制延迟进行监控,当复制延迟超过 30 秒的时候需要及时告警并进行处理。
4.3 设计规范
1.项目使用 SpringBoot 开发
2.MySQL 使用 Innodb 存储引擎
3.Http 成功响应头统一使用 200
4.JSON 格式小写,蛇形,如下:
{
"code": 0,
"message": "success",
"data": {
"user_name": "小明"
}
}
5. 质量设计
5.1 可测试性
使用 Mockito + Jacoco + H2 编写单元测试和集成测试用例
5.2 可维护性
使用 Jekins 发布程序
5.3 可观测性
Arthas 监控 JVM,使用 Cat 等 APM 工具实时监控线上应用,发生异常时进行短信通知
6. 演进规划
l 数据库数据积累到一定程度后进行冷热数据分离,对于历史数据做好归档和还原功能。
l 大表需要进行分库分表
评论