作业:架构实战营模块 3
前言
本文是外包学生管理系统的详细架构设计文档,用于指导后续的开发、测试和运维。
1. 业务背景
随着学校的规模不断扩大,学生数量的增加,需要处理的信息也日趋增大。不仅花费大量的教师资源,处理效率也十分低下。本系统主要解决的问题有:
相比原有人工管理,提供更多管理能力。
省去人工整理、备份数据的成本。
主要实现以下能力:
教师可以实现学生管理、课程管理、作业批改、安排课表等工作。
学生可以实现,查询课表、查询成绩、作业提交等功能。
2. 约束和限制
约束和限制:
高可用:数据不能全部丢失、应用可用性达到基本可用(不可用时间小于 99%,即每年 87 小时)
可扩展性:业务需求比较复杂。
高并发:至少支持 1000 名学生的并发访问。
能够公网访问
3. 总体架构
3.1 架构分析
存储高可用
对于学生管理系统来说,学生信息、课程信息数据丢失,是非常严重的事情;
存储高性能
由于系统管理类功能居多,因此存储层是影响系统性能的主要因素。
应用高可用
对于学生管理系统来说,部分内容短暂的不可用是可以接受的,
应用高性能
由于系统管理类功能居多,因此应用层性能压力不大。
综合来看,存储高可用、存储高性能是本系统的主要需求。
3.2 总体架构
由于系统业务比较复杂,因此将系统分为学生子系统、课程子系统、权限子系统。
学生子系统:主要为学生提供个人信息管理、课程信息查询、作业提交、考试查询、考试成绩查询等功能。
课程子系统:主要为老师提供课程管理、考试管理、作业管理等功能。
权限子系统:主要对学生账号、教师账号进行管理、审批。
三个系统通过存储层实现互通。
4. 详细设计
4.1 核心功能
4.1.1 学生注册与审核
4.1.2 学生课程中心
4.2 关键设计
4.2.1 存储高性能
由于学生、课程、考试、作业等数据的并发访问压力并不会很高,因此 MySQL 即可满足需求,并很容易通过索引增加访问性能。
4.2.2 存储高可用
存储采用主从架构,复制算法采用多数复制,防止数据丢失。
4.3 设计规范
负载均衡采用 Nginx 进行
应用服务器采用 SpringBoot + Mybatis
MySQL 使用 InnoDB 存储引擎
5. 质量设计
可维护:
部署:应用使用 spring-boot-maven-plugin 插件进行打包,在服务宕机时,可以很容易进行重启。
配置:配置全部写在 app.conf 中,参数修改也非常容易。
扩展:应用性能不足以支撑时,可以很容易部署更多实例,通过 nginx 进行负载均衡,以满足性能要求。
可测试:
由于多数功能都为管理类功能,提供完善的详细设计文档,以供测试同学进行白盒测试。
可观测性:
通过 nginx 日志可以很容观察应用的响应日志及耗时等情况。
成本:
前期可以合并部署的方式进行。
6. 演进规划
一期:权限管理子系统、学生管理子系统先行收录学生信息。
二期:提供课程管理功能、考试管理功能。
评论