写点什么

【架构设计模块三】:学生信息管理系统的架构文档

用户头像
Ryoma
关注
发布于: 1 小时前

前言

本文是【学生信息管理系统】详细架构设计文档,用于指导【学生信息管理系统】后续的开发、测试及运维

词汇表

  • Nginx:反向代理服务器

  • Node.js:开发语言

  • Koa:Node.js 开发框架

  • axios:基于 promise 的 HTTP 库

  • MySQL:关系型数据库


1. 业务背景

随着学校的规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。不仅花费大量的教师资源,处理效率也十分低下:

  • 为提高学生管理的管理水平,优化资源,尽可能降低管理成本成为学生管理的新课题:学生管理系统是从学生管理现状出发,根据学生管理的新要求进行开发设计的,它需要解决学生信息管理数据信息量大修改不方便,对一系列数据进行分析时花费时间长等问题,帮助学生管理人员有效管理学生信息

  • 学生信息管理系统可以通过系统规范化地管理、科学性统计和快速查询、修改、增加、删除等:提高信息的准确度以及日常管理的工作效率

  • 学生信息管理系统主要是应用于学生各类信息的管理:总体任务是实现学生信息关系的系统化、规范化、自动化,其主要任务是统计学生各类信息进行日常管理,如查询、修改、增加、删除、以及学生选课、成绩的查询等功能设计的管理系统


基于以上,开发一个【学生信息管理系统】,主要应用于学校学生信息管理,总体任务是实现学生信息管理的系统化、规范化和自动化,其主要任务是管理学生相关信息,如学籍、课程、成绩、奖惩。


系统边界黑盒图:略。由于未涉及到外部系统,此处略去。

2. 约束和限制

  • 使用团队目前熟悉的语言:Node.js

  • 数据库选择:MySQL

  • 在新学期开学前投入使用:20210901


3. 总体架构

3.1 架构分析

  1. 高性能:

  2. 不需要:一般高校师生最多 5W 人左右,且学生管理、课程选择等操作不会太多,TPS 不会很高

  3. 高可用:

  4. 不需要服务高可用:服务可以不高可用,不要影响太久即可,可停机维护

  5. 需要数据高可用:数据不要完全丢失

  6. 可扩展:业务需求比较复杂,但功能目前比较稳定,保持一定的扩展能力即可

  7. 成本 & 时间:开发投入人力和时间不能太长

  8. 安全:

  9. 仅供校园网访问


3.2 总体架构

架构图描述:

  1. 使用 Nginx 做负载均衡

  2. 服务拆分为学生、课程、权限子系统:分别承担学生管理、课程管理及权限管理功能,职责分明

  3. MySQL 主备:主库提供服务,备库用于备份,确保数据可用性



4. 详细设计

4.1 核心功能

这里仅列举【学生注册 & 审批流程】、【课程录入 & 选课流程】

4.1.1 学生注册 & 审批流程

  1. 学生注册:

  2. 学生使用客户端调用【学生子系统】进行注册

  3. 【学生子系统】校验相关信息

  4. 基于相关信息反馈结果

  5. 学生审批:

  6. 管理员使用客户端调用【学生子系统】审批

  7. 【学生子系统】调用【权限子系统】校验权限

  8. 基于审批操作 & 校验权限返回结果



4.1.2 课程录入 & 选课流程

  1. 管理员录入课程:

  2. 管理员使用客户端调用【课程子系统】录入课程

  3. 【课程子系统】调用【权限子系统】校验权限

  4. 基于校验权限返回结果

  5. 学生选取课程:

  6. 学生使用客户端调用【课程子系统】选取课程

  7. 【课程子系统】调用【权限子系统】校验权限

  8. 基于校验权限返回结果



4.2 关键设计

  1. 高性能:基于高校实际学生人数及日常使用情况,不支持高性能

  2. 高可用:

  3. 不需要服务高可用:服务可以不高可用,不要影响太久即可,可停机维护

  4. 需要数据高可用:使用 MySQL 主备,主库用于日常使用,备库用于日常备份;若主库出现问题,尝试恢复主库,否则切为备库支撑使用

  5. 安全:仅校园网可访问

4.3 设计规范

  1. 开发阶段:

  2. 前端使用 Vue 开发

  3. 后端使用 Node.js 开发

  4. 数据库使用 MySQL,并使用 InnoDB 存储

  5. 使用 HTTP 协议传输数据,数据格式为 JSON

  6. 前端 & 后端皆使用 axios 进行网络请求

  7. 使用 Rap2 管理接口文档

  8. 使用 PostMan 在开发阶段进行自测

  9. 使用 mocha、power-assert、nyc 进行单元测试

  10. 部署阶段:

  11. 使用 Nginx 作为反向代理服务器


5. 质量设计

  • 可测试性设计:

  • 方案设计详尽:保证测试同学可进行各种场景

  • 自动化接口测试:测试同学基于研发提供的接口文档,准备自动化接口测试

  • 可维护性设计:

  • 单元测试:每次提交代码前,研发运行单元测试,保障

  • 可运维性设计:

  • 关注 MySQL 存储量

  • 关注 3 个子系统对应的 Node 进程

  • 安全设计:

  • 仅校园网可访问

  • 成本设计:

  • 4 台机器:1 Nginx 前置机、1 后端服务机器、2 台 MySQL 机器


6. 演进规划

规划:

  1. 1-2 期快速开发,1 期可先交付,用于旧数据迁移

  2. 2 期在开学前交付,便于学校进行课程管理

  3. 3 期在开学后 8 周内交付,用于考试


一期

  • 完成【学生子系统】:实现账号分配、账号绑定、信息查询等功能

  • 完成【权限子系统】:实现权限管理


目标:用于学生信息的管理——实现初步信息化,先将全校师生信息管理起来


二期

  • 完成【课程子系统】:实现课程录入、选课、排课等功能


目标:用于课程管理


三期

  • 完善【课程子系统】:实现试卷区域分割、评分判断等


目标:实现考试管理

发布于: 1 小时前阅读数: 6
用户头像

Ryoma

关注

学如逆水行舟 2018.05.14 加入

一只菜菜的全沾工程师

评论

发布
暂无评论
【架构设计模块三】:学生信息管理系统的架构文档