架构实战营模块三作业
模块三作业要求:
写出外包学生管理系统的架构文档
【作业要求】
1. 基于模块 1 第 5 课 P15 页的外包学生管理系统备选架构 1(见下 1 页),写出完整的架构设计文档;
2. 注意不是备选架构文档,而是最终落地的详细架构设计文档;
3. 无需考虑数据库表设计,因为表设计是方案设计阶段做的,不是架构设计阶段做的;
【提示】
1. 架构设计文档是完整的文档(Word 或者语雀文档之类的都可以),而不是 PPT;
2. 架构文档涵盖的内容请参考模块 3 第 4 课,细化架构设计参考模块 3 第 6 课;
3. 外包学生管理系统的业务请参考模块 1 第 5 课的课件;
4. 架构文档模板可以参考:架构实战营详细架构设计文档模板
前言
本文是外包学生管理系统的详细架构设计文档,用于指导系统后续的开发、测试和运维。
修订历史

词汇表
1)SpringBoot:Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。
2)Mysql 主备模式:在实际的生产中,为了解决 Mysql 的单点故障,一般都会采用「主备模式」。
3)子系统:子系统是一种模型元素,它具有包和类的语义。子系统的行为由它所包含的类或其他子系统提供。子系统实现一个或多个接口,这些接口定义子系统可以执行的行为。
1. 业务背景
随着学校的规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。目前为教师手工方式进行维护,不仅花费大量的教师资源,处理效率也十分低下。主要问题如下:
1、学生相关信息数据量较大,且不方便管理。很多数据统计分析工作花费较长时间。
2、学生相关信息数据建立后,后期的维护、更新不方便,信息会出现重复,准确率较低的问题,严重影响了日常工作效率。
3、缺乏学生信息以及学生选课、成绩查询等的系统化、规范化、自动化。
基于以上背景,有必要开发一套外包学生管理系统,将学生相关信息数据进行系统化,方便统一管理、维护、查询。
2. 约束和限制
1、数据库采用 Mysql 社区版
2、系统必须在 2022 年 8 月 31 日完成上线
3、项目成本控制到 20 万以内
4、系统需要支持 1000 名用户
5、系统必须部署在学校内网环境,与互联网隔离
6、总共只有 3 名研发人员
3. 总体架构
3.1 架构分析
3.1.1 高性能
由于系统仅需要支持 1000 名用户,从性能上来说没有什么大问题。
3.1.2 高可用
外包学生管理系统短时间对外停止服务,不会造成太大的影响。但是对于数据来说,必须保障高可用,学生信息数据是重要资产,绝对不能丢失。
3.1.3 可扩展
对于外包学生管理系统来说,需求主要包括了学生管理、课程管理、考试管理、权限管理等,业务需求还是有一定的复杂度,需要考虑适当的拆分,以及封装可预测的需求变化。
3.2.4 安全
由于系统部署在学校内网环境,因此相对比较安全。
3.2.5 成本
本项目需要支持的用户数较少,且性能要求不高,因此成本相对可控。
综上所述,本系统需要重点保障数据的高可用,因此 mysql 数据库采用主备模式设计,此外,需要有一定的可扩展性,因此将系统拆分为三个子系统,分别是学生子系统、课程子系统、权限子系统。
3.2 总体架构

1、使用 nginx 实现后端服务的反向代理。
2、将系统拆分为三个子系统,分别是学生子系统、课程子系统、权限子系统。
3、数据库采用 mysql,设计为主备架构,正常情况下,后端服务访问 mysql 主机,当主机出现故障时,切换到备机。通过 binlog 实现 mysql 数据的同步和备份,保障数据高可用。
4. 详细设计
4.1 核心功能
4.1.1 学生信息查询

4.1.2 学生在线选课

4.1.3 教师评分判定

4.2 关键设计
1)学生信息数据存储高可用
学生信息数据存储在 mysql 中,mysql 采用一主一备架构,主备服务期之间数据同步保障存储的高可用。如果主备之间出现延迟,恰巧此时 mysql 主服务器宕机导致数据无法恢复,此部分数据会永久丢失,这种极端情况不做针对性设计,因为少量数据丢失不影响系统整体的可用性,只需要重新补录数据即可,保障全量(大部分)数据高可用即可。同时,针对数据同步的延迟,需要设计告警机制,超过 30 秒未同步的及时发出告警,人工解决排查解决。
2)系统的可扩展性
业务需求比较复杂,因此将系统拆分为学生子系统、课程子系统、权限子系统,这样的拆分力度使得系统内外部复杂度平衡。另外,拆分为三个子系统,正好有 3 名研发人员,每人负责一个,有利于提高研发效率,相对较合理。
4.3 设计规范
1)mysql 使用 innodb 存储引擎
2)三个子系统使用 Spring Boot 框架开发
5. 质量设计
5.1 系统监控平台
设计系统监控平台,监控各台服务器的性能指标,包括 cpu、内存、磁盘使用情况。监控子系统应用服务器的可用性,监控数据库服务器的可用性,监控数据库服务器主备同步的延迟等指标。
5.2 成本
可考虑采用容器化部署方式,适当较少硬件服务器资源。
6. 演进规划
6.1 完成需求分析,8 月 1 日-8 月 3 日
6.2 完成总体架构设计,8 月 4 日-8 月 5 日
6.3 完成详细设计,8 月 6 日-8 月 7 日
6.4 功能开发及自测,8 月 8 日-8 月 16 日
6.5 功能测试(三轮),8 月 17 日-8 月 25 日
6.6 用户 uat 测试,8 月 26 日-8 月 30 日
6.7 系统上线部署,8 月 31 日
6.8 试运行,9 月 1 日开始
评论