架构实战 - 模块 3 作业
作业要求
写出外包学生管理系统的架构文档
【作业要求】
1. 基于模块 1 第 5 课 P15 页的外包学生管理系统备选架构 1(见下 1 页),写出完整的架构设计文档;
2. 注意不是备选架构文档,而是最终落地的详细架构设计文档;
3. 无需考虑数据库表设计,因为表设计是方案设计阶段做的,不是架构设计阶段做的;
前言
本文是外包学生管理系统详细架构设计文档,用于指导学生管理系统后续的开发、测试和运维。
修订历史
版本号 变更内容 修订者 日期
1.0.0 创建文档 mm 2022/12/15
词汇表
无
1. 业务背景
随着学校的规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。不仅花费大量的教师资源,处理效率也十分低下。 亟需解决问题如下:
1)降低管理成本,提高学生管理的管理水平,优化资源
2)解决学生信息管理数据信息量大修改不方便
3)对一系列数据进行分析时花费时间长的问题
因此本系统主要是应用于学生各类信息的管理,总体任务是实现学生信息关系的系统化、规范化、自动化,其主要任务是统计学生各类信息 进行日常管理,如查询、修改、增加、删除、以及学生选课、成绩的查询等功能设计的管理系统。
2. 约束和限制
1)必须在 2023.06.30 号完成
2)成本不能超过 100 万
3)数据库采用 MySQL
4)质量标准符合 ISO9001-XXXX 标准
3. 总体架构
经过备选方案选择,先采用如下总体架构设计方案:
学生管理系统总体架构图
系统白盒边界图如下:
学生管理系统白盒边界图
1)权限验证系统包括注册,登录子功能,可以通过微信号和手机号绑定可实现账号自助找回
2)通过题库系统,教师可以选题分割打印考试题,进行扫描件上传到课程管理子系统,属于弱关联
3.1 架构分析
1) 高可用
对于学生管理系统,保存所有学生的相关数据,包括课程、成绩以及相关文档等,任何数据的丢失对学生和老师来说都是不可接受的。因此,学生管理系统的数据需要高可用性。
2) 可扩展性
由于学生管理系统业务相对复杂,每个模块的功能相对独立,所以将课程管理,学生管理以及权限管理三个部分分开有利于日后扩展和维护。
3) 可维护性
采用外包团队熟悉的语言进行开发,可以利用熟悉的运维体系进行系统维护。大大减少运维的难度,提高系统维护的效率并有效降低运维成本。
4) 成本
外包系统采用开发团队熟悉的开发语言,利用成熟的开发框架和流程管理,利用云基础设施环境,降低开发和测试成本。
3.2 总体架构
学生管理系统总体架构图
1)MySQL 集群采用主备数据复制。
2)每个子系统(学生子系统,课程子系统,权限子系统)部署在不同的服务器上。
3)通过 nginx 进行统一入口代理将请求转入各自子系统
4)每一个子系统可以进行水平扩展,通过 Nginx 进行 Hash 负载均衡
4. 详细设计
4.1 核心功能
1) 学生注册及信息修改流程
2) 学生选课流程
4.2 关键设计
1)学生信息存储可靠性
学生信息存储在 MySQL 中,集群中有一主一备两台 MySQL 服务器,MySQL 服务器之间复制消息以保证数据存储高可用。如果主备间出现复制延迟,恰好此时 MySQL 主服务器宕机导致数据无法恢复,则部分数据会永久丢失,这种情况不做针对性设计,DBA 需要对主备间的复制延迟进行监控,当复制延迟超过 30 秒的时候需要及时告警并进行处理。
2)学生信息系统可扩展性
拆分学生子系统,课程子系统,权限子系统,方便每个子系统的功能扩展。每个子系统有独立的功能模块,相互之间通过 restful API 访问。
3)学生管理系统安全性
客户端和服务器端通过 https 协议访问
服务和服务之间走 http 协议
服务和数据库之间通过用户名密码认证
系统进行用户 token 校验
通过权限子系统控制子系统访问权限
前端页面混淆扰码发布
传输数据进行转码
4.3 设计规范
1)后端使用 Spring Boot 开发,前端使用 vue 开发
2)MySQL 使用 Innodb 存储引擎
3)每个子系统采用微服务方式部署
5. 质量设计
5.1 可测试性
将系统拆分成三个子系统,每个子系统相比一个大的系统复杂度降低,测试难度也降低。
5.2 可维护性
系统采用成熟的开发框架和存储服务,可维护性强。
5.3 可观测性
每个子系统微服务提供健康检查接口,并对系统行为和用户行为进行日志记录,提供系统可观测性。
6. 演进规划
6.1 学生管理系统一期
完成学生管理,权限管理,以及课程管理子系统
6.2 学生管理系统二期
完成考试管理子系统
评论