架构训练营 - 模块 3 作业
写出外包学生管理系统的架构文档
【作业要求】
1. 基于模块 1 第 5 课 P15 页的外包学生管理系统备选架构 1(见下 1 页),写出完整的架构设计文档;
2. 注意不是备选架构文档,而是最终落地的详细架构设计文档;
3. 无需考虑数据库表设计,因为表设计是方案设计阶段做的,不是架构设计阶段做的;
【提示】
1. 架构设计文档是完整的文档(Word 或者语雀文档之类的都可以),而不是 PPT;
2. 架构文档涵盖的内容请参考模块 3 第 4 课,细化架构设计参考模块 3 第 6 课;
3. 外包学生管理系统的业务请参考模块 1 第 5 课的课件;
4. 架构文档模板可以参考:架构实战营详细架构设计文档模板
前言
本文是学校学生信息管理系统的详细设计文档,用于指导学校学生管理系统的后续开发、测试和运维。
词汇表
Nginx
:是一个高性能的 HTTP 接入层反向代理,可以根据请求的 URL,将请求转发到不同的后端服务器;
Mysql
:是一个关系型数据库管理系统;
Spring框架
:使用的是基本的 JavaBean 来完成以前只可能由 EJB 完成的事情。
1. 业务背景
随着学校的规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。不仅花费大量的教师资源,
处理效率也十分低下。通过建立一套学生管理系统可以实现学生管理的:
系统化:统一管理学生的学籍、课程、成绩和奖惩,从而实现学生信息管理的系统化。
规范化:通过系统规范化地管理、科学性统计和快速查询、修改、增加、删除等,可以提高信息的准确度以及日常管理的工作效率。
自动化:通过学生管理系统,帮助教师实现对信息量大、修改不方便的数据进行统一更改。
2. 约束和限制
学生管理系统存在如下限制:
在机器宕机的时候允许丢失当时请求的数据,但是不允许已经存储的数据。
不同用户的权限不同
学校的学生数量不会发生大变化
3. 总体架构
3.1 架构分析
3.1.1 高可用
由于学校的教学任务并不需要依赖学生管理系统,所以可以容忍学生管理系统的停机维护或问题修复。但是学生管理系统需要保证学生信息的不丢失。
3.1.2 高性能
由于学校的学生数量有限,大约几万人,系统峰值 QPS 不会超过一千,所以不需要高性能。
3.1.3 可扩展
需要对现有的功能需求提供一定扩展接口,方便后面需求升级。学生管理系统交付之后,则不需要更多的接口扩展。
3.1.4 其他
学生管理系统需求基本确定,成本可控。同时学生管理系统只在学校局域网可以访问,所以不需要非常高的安全要求。
3.2 总体架构
用户的请求通过 Nginx 接入之后,按照不同的请求类型转发到不同的子系统:学生子系统、课程子系统和权限子系统。不同子系统使用 MySQL 存储数据,MySQL 采用主备方式进行数据备份。正常情况下只通过主服务器进行数据存取,当主服务器宕机的情况下,备服务器对外提供数据存取。
4. 详细设计
4.1 核心功能
4.1.1 学生管理系统
4.1.1.1 系统登录
略
4.1.1.2. 账号分配
略
4.1.1.3 账号绑定
略
4.1.1.4. 组织管理层级
略
4.1.1.5. 文件上传/下载
略
4.1.1.6. 信息查询
4.1.2 课程管理系统
4.1.2.1. 课程录入
略
4.1.2.2. 选课功能
略
4.1.2.3. 排课功能
略
4.1.2.4. 教材选择
略
4.1.3 课程管理系统
4.1.3.1. 试卷区域分割
略
4.1.3.2. 平时成绩
略
4.1.3.3. 评分判定
略
4.2 关键设计
数据的可靠性
通过使用 MySQL 主备的方式,实现数据的备份,在主机宕机的时候,可以切换到备机提供服务。由于主备机器复制时间可控,所以在主机宕机的时候丢失的数据可控,从而保证数据的可靠性。同时通过定期的数据备份,从而保证在主备 MySQL 数据都丢失的时候,有备份数据可以恢复。
4.3 设计规范
1)学生管理系统使用 Spring Boot 开发
2)MySQL 使用 Innodb 存储引擎
3)请求接口采用 RESTful API 规范
4)采用 Json 对请求消息进行序列化
5. 质量设计
5.1 可测试性
对各个子模块建立功能测试流程,保证整体功能可验证。
5.2 可维护性
建立运维脚本,辅助运维人员快速实现系统更新、配置管理和主备切换等功能。
5.3 可观策性
对系统的关键指标进行监控,包括在线人数、访问功能、系统负载等信息。
5.4 成本和可用性
为每个子服务使用 2 台机器进行部署,一方面可以保证可用性,也可以尽量减少成本。
6. 演进规划
6.1 学生管理系统一期
完成学生管理系统的权限管理、学生管理和课程管理功能。
6.2 学生管理系统二期
完成学生管理系统中的考试管理。
评论