架构训练营模块 3 作业——外包学生管理系统的架构文档
前言
本文是外包学生管理系统详细架构设计文档,用于指导系统后续的开发、测试和运维。
1. 业务背景
随着学校规模不断扩大,学生数量增加,需要管理的学生信息也日益庞大。基于以前的方式管理这些信息不仅耗费大量的教师资源,处理效率也十分低下。
为了提高管理师生信息的水平,提升管理效率,降低管理成本,故需要开发学生管理系统,实现学生信息关系的系统化、规范化、自动化,以达到学生信息管理降本增效的目的。
2. 约束和限制
系统必须在 2023.8.31 前完成上线
成本不能超过 500 万
3. 总体架构
3.1 架构分析
3.1.1 高可用
对于学生管理系统来说,业务的可用性要求不高。主要使用场景有开学新生信息录入,课程录入与学生选课,期中期末考试时试卷录入、学生考试、分数评判与录入、成绩查询等。这些使用场景的时间段相对集中,平时的访问量比较少,对不可用的容忍度较高,业务服务保证基本可用即可。
数据不能全部丢失,存储高可用有一定要求。使用主备的方式保证数据不丢失,不需要状态自动检测、故障自动切换。可定期检测存储服务器状态,有故障手动切换即可。
3.1.2 高性能
系统不需要很高的性能,对于本系统,信息录入与查询使用频率不高,对响应时长容忍度较高。
3.1.3 可扩展
学生信息管理相关的业务比较稳定,数据量和访问量一般不会快速扩张,故在本阶段的架构设计中不用考虑扩展性的问题,满足当前需求即可。
3.1.4 成本
主要包括硬件成本和人力成本。硬件主要有负载均衡服务器 1 台、业务服务器 3 台(学生子系统、课程子系统、权限子系统),MySQL 数据库服务器 2 台(主备)。人力成本控制在 300 万。
3.1.5 安全
可以使用云厂商提供的硬件设施及相关的软件服务保证安全。
3.1.6 其他
无
3.2 总体架构
1)使用 Nginx 作为反向代理服务器,作为学生管理系统的访问入口。
2)学生管理系统由学生子系统、课程子系统和权限子系统组成。
3)数据库包含一台主 MySQL 和一台备 MySQL,采用同步复制。
4)学生子系统可以调用课程子系统和权限子系统的接口,课程子系统可以调用权限子系统的接口。
4. 详细设计
4.1 核心功能
【学生管理】
系统生成初始账号和密码
用户登录系统,修改密码
账号绑定手机等
查询信息,课程选择等
【课程管理】
管理员录入课程信息
学生选课
根据学生选定的课程和教学体系安排,对相应教师、教室、时间进行统一规划安排。
4.2 关键设计
1)系统调用
子系统之间调用采用 HTTP 协议,数据传输使用 JSON 格式。不需要额外引入系统调用框架,开发简单,满足当前业务要求。
2)存储可靠性
数据存储在 MySQL 中,有一主一备两台 MySQL 服务器,MySQL 服务器之间主备复制以保证存储高可用。如果主备间出现复制延迟,恰好此时 MySQL 主服务器宕机导致数据无法恢复,则部分数据会永久丢失,这种情况不做针对性设计,DBA 需要对主备间的复制延迟进行监控,当复制延迟超过 30 秒的时候需要及时告警并进行处理。
4.3 设计规范
1)子系统服务使用 Spring Boot + Mybatis 开发
2)系统间调用使用 HTTP 协议
3)数据传输格式为 JSON 格式
4)MySQL 使用 Innodb 存储引擎
5)使用单库,表设计时不需水平或垂直拆分
5. 质量设计
1)使用 GIT+Jenkins+Docker,实现 CI/CD
2)利用 ELK 组件搭建日志平台,实现日志监控
3)购买云厂商提供的服务器和相关软件服务,降低成本,提高安全性。
6. 演进规划
1)开发阶段快速迭代,满足上线要求
2)学生数量增加较快可考虑增加业务服务器数量,数据库拆分,做分库分表
评论