架构实战营第三次作业
前言
本文是外包学生管理系统详细架构设计文档,用于指导外包学生管理系统后续的开发、测试和运维。
词汇表
Nginx:高性能的 HTTP 和反向代理 web 服务器
MySQL:关系型数据库管理系统
Spring Boot:后端 Java 开发框架
1. 业务背景
随着学校规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大,已存在几个明显的系统问题:
1)成本问题:需要花费大量的教师资源,成本高;
2)效率问题:需要花费大量的时间和精力,效率低下;
3)质量问题:维护大量学生信息很容易出错,质量无法保证。
为了提高学生管理的管理水平、降低管理成本、提高信息准确度和日常管理的工作效率,我们需要开发一套学生管理系统,从学生管理的新要求进行开发设计,提供系统规范化的管理平台。
2. 约束和限制
1. 三个月内完成系统交付及相关培训;
2. 成本控制在 30w 以内;
3.可扩展:业务需求比较复杂,需要划分模块开发。
4.数据高可用:数据要保证完整性,不能丢失。
3. 总体架构
3.1 架构分析
3.1.1 高性能
对于外包学生管理系统来说,一个学校最多几万人,性能要求并不高;对于抢课来说,1 门课 100 个人或 1000 个人抢,对系统处理性能要求也不高。
3.1.2 高可用
学校的教学和管理并不完全依赖于学生管理系统,学生管理系统挂掉对学校影响也不大;但学生信息是由外部录入或用户注册得到的,对于信息丢失必须保证风险降到最低。
3.1.3 可扩展
需求比较复杂,需要按功能拆出各个子系统进行开发维护,还需要考虑扩展问题。
3.1.3 成本、安全
面对单个学校,成本问题可不作为限制因素;安全方面,学生管理系统不涉及金融及资金,个人隐私基本是公开信息,也可不做考虑。
综合来看,外包学生管理系统需要做到数据高可用和可扩展。
3.2 总体架构
1)对外采用 Nginx 负责外部请求接入,负责消息的分发。
2)系统业务拆分成学生子系统、课程子系统和权限子系统,各子系统功能的修改不影响其他子系统的正常运行。
3)采用一台主 MySQL 和一台备 MySQL,实现主备数据复制,保证数据同步。
4. 详细设计
4.1 核心功能
挑选了学生选课和信息查询两个核心功能,其流程图如下图所示:
4.2 关键设计
1)数据存储高可用
数据信息存储在 MySQL 中,有一主一备两台 MySQL 服务器,MySQL 服务器之间复制消息以保证消息存储高可用。如果主备间出现复制延迟,恰好此时 MySQL 主服务器宕机导致数据无法恢复,则部分消息会永久丢失,这种情况不做针对性设计,DBA 需要对主备间的复制延迟进行监控,当复制延迟超过 30 秒的时候需要及时告警并进行处理。
2)可扩展
功能拆分成各个子系统进行开发维护,互相独立,一个子系统需求变化不影响其他子系统的运行,如果需要再增加子系统,也不影响原有系统的运行。
4.3 设计规范
1)各子系统采用 Spring Boot 开发
2)MySQL 使用 Innodb 存储引擎
3)客户端与服务端采用 JSON 传递数据
5. 质量设计
5.1 可测试性:提供白盒或黑盒等测试手段,方便测试人员验证功能
5.2 可维护性:增加常见问题或故障自动处理措施,或提供人工处理方式
5.3 可观测性:提供日志查询入口,方便问题排查
5.4 成本:控制在 30w 以内
6. 演进规划
6.1 外包学生管理系统一期
实现学生子系统、课程子系统和权限子系统
6.2 外包学生管理系统二期
实现管理后台、日志查询等功能,同时交付培训视频
日常祝福环节:祝助教老师 对所有的烦恼说拜拜,对所有的快乐说嗨嗨
评论