外包学生管理系统架构文档(架构实战营 模块三作业)
前言
本文是学生管理系统的架构设计文档,用于指导后续的开发、测试与运维。
修订历史
暂无
1. 业务背景
随着学校规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。不仅话费大量的教师资源,处理效率也十分低下。
为提高学生管理的水平,优化资源,尽可能降低管理成本,我们开发一个学生信息管理系统,用于学生各类信息的管理,总体任务是实现学生信息关系的系统化、规划化、自动化,主要任务是统计学生各类信息进行日常管理,如查询、修改、增加、删除以及学生选课、成绩查询等。

2. 约束与限制
(1) 开发与部署成本不超过 100 万,每年的运维支出不超过 5 万。
(2) 项目从立项到上线不超过三个月。
(3) 在校学生人数有 5 万人,要求能够支持集中选课的并发场景。
(4) 要求数据备份,防止数据丢失。
(5) 系统要求有可维护性,是要校内 IT 人员熟悉的技术栈,如 mysql。
(6) 具备一定的可扩展性,要求使用常用的开发语言,如 Java。
3. 总体架构

3.1 架构分析
高可用:因为是学校内部的管理系统,对可用性要求不高,各个子系统分别部署两个实例,通过集群的方式保证服务的可用性。Mysql 使用主从结构,保证数据不丢失。
高性能:在选课期间,对于一些热门课程或者热门教师,会有高并发的场景,需要支持 1000 个用户选择同一门课程的 TPS。
可扩展:内部系统,需求变更不频繁,通过拆分不同功能的子系统来支持可扩展即可。
成本:需要进行成本控制,尽可能使用少的机器来满足业务需求。
安全:对数据安全有一定的要求,为了防止数据外泄,需要做好防火墙工作,只能允许内网或者 VPN 访问。
3.2 总体架构

4. 详细设计
4.1 核心功能
选课
4.2 关键设计
4.3 设计规范
(1) 使用前后端分离的技术,前端使用 react 框架进行编写,后端使用 java 语言并使用 spring boot 构建应用,前端代码部署在 nginx,前后端使用 restful 规范进行交互。
(2) 数据库使用 mysql 8.0,innodb 引擎,一主一备,使用同步复制模式。ORM 框架使用 mybatis。
5. 质量设计
可维护性:增加超级管理员的功能,在数据出错的情况下,允许人工通过管理界面进行修正。编写 shell 脚本,定时监控服务器关键数据(如 CPU、内存等),并设置告警阈值。
可观测性:每个系统按规范输出日志文件,方便定位故障。由于系统不多,日志文件直接存放在服务器本地即可。
成本:使用四台物理机,各个子系统分别部署在两台物理机上,数据库同理,数据库与业务系统分开部署。
6. 演进规划
根据业务需要,如果后期对性能有一定的要求,或者有更加复杂的业务需求,可以将系统进行微服务化,并引入微服务治理体系,提高系统的性能,以及提供系统的可运维能力。
版权声明: 本文为 InfoQ 作者【Gor】的原创文章。
原文链接:【http://xie.infoq.cn/article/07ad39225eedeb203bde25810】。未经作者许可,禁止转载。
评论