架构师训练营 2 期模块三作业
前言
本文是学生管理系统架构设计文档,用于指导学生管理系统后续的开发、测试和运维
1. 业务背景
随着学校的规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。为了提高学生管理水平,需要开发新的学生管理系统。学生管理系统能够提供系统规范化第管理、科学同统计和快速查询、修改、增加、删除等功能。
2. 约束和限制
能够支撑管理 2000 个学生
成本不能超过 20 万
必须在 2021.11.30 前完成
数据库采用 mysql
3. 总体架构
3.1 架构分析
1. 高性能:由于学生管理系统仅针对本校使用,本校学生人数在 2000 人左右,因此无需高性能
2. 高可用:学生管理系统设计教师、学生、课程、考试等方方面面,需要严格保证系统高可用,任何数据丢失都可能造成无法挽回的后果。数据库需要备份,并保证数据能够实现灾难恢复
3. 可扩展:短期内不需要扩展业务和功能
4. 成本:使用学校自建机房的服务器,能够保证数据安全和低成本
综合来看,本学生管理系统需要高可用性,因此需要有数据库备份副本
3.2 总体架构
1)系统根据业务不同拆分成学生子系统,课程子系统和权限子系统
2)包含一台主 MySQL 和一台备 MySQL,主备数据复制
3)对外使用 nginx 来实现请求的转发
4. 详细设计
4.1 核心功能
4.1.1 学生管理
学生信息的增删改查操作
4.1.2 选课管理
4.2 关键设计
1. 保证服务的高可用性
学生信息和课程信息存储在 mysql 中, MySQL 采用一主一备两台服务器,主从之间使用复制保证同步。一旦主 mysql 服务器宕机,可以使用备用服务器继续提供服务。在切换过程中由于复制的延迟,可能会有短暂的数据不一致情况,这种情况不做针对性处理,DBA 需要对主备间的数据复制延迟进行监控,当复制延迟超过 30 秒时,需要及时警告并进行处理。
2. 数据如何存储
数据库中包含学生表,权限定义表,课程表,以及选课表
其中学生表保存学生的基本信息、身份确认信息和权限级别;
权限定义表供权限管理子系统使用,用来定义各种不同等级的权限,即对不同权限可以使用哪些功能进行边界确定;
课程表用来定义各种课程信息,包含先修课,年级,专业等等;
选课表用来定义学生的选课信息。
4.3 设计规范
1. 学生管理系统采用 spring boot + netty 开发
2. mysql 使用 innodb 存储引擎
3. 服务器提供 http 接口
4. 与前段采用 json 传递数据
5. 采用 mysql 主从同步
6. 直接用 mysql 的主从复制来实现数据复制
5. 质量设计
可测试性:
进行 UT 测试和 AT 测试
可维护性:
学生管理系统功能简单,维护成本低
可观测性:
通过收集日志,实现日志管理系统来达到可观测性
成本:
在已给定的几台服务器上部署学生管理系统
评论