写点什么

外包学生管理系统架构设计文档

作者:五月雨
  • 2022 年 2 月 24 日
  • 本文字数:1366 字

    阅读完需:约 4 分钟

前言

本文是外包学生管理系统的详细架构设计文档,用于指导外包学生管理系统后续的开发,测试和运维

词汇表

nginx: 一款用于反向代理和负载均衡应用

mysql:一款开源的支持事务的数据库

1.业务背景

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


本系统主要目的:

  • 主要是应用于学生各类信息的管理,总体任务是实现学生信息关系的系统化、规范化、自动化

  • 其主要任务是统计学生各类信息进行日常管理,如查询、修改、增加、删除、以及学生选课、成绩的查询等功能

  • 提高日常管理的工作效率

系统边界黑盒图如下



2.约束和限制

  1. 数据不允许丢失

  2. 部署成本不超过 10 台服务器

  3. 开发成本不超过 100w

  4. 开发周期为 6 个月

  5. 服务人数在 2w 人

3.总体架构

3.1 架构分析

  1. 高可用

系统停机几个小时,并没有特别大的影响

数据可以接受丢失一个小时内的数据,丢失可以进行人来补全或者重填。

  1. 高性能

系统需要服务的人数在 2w 人左右,但学生并不会每天都上系统,而且上系统的次数一天不超过 10 次

就算出现大家同时登录,有部分人登录失败,也可以接受继续等待,直到上线人数变少。

综上来看,系统只需要正常工作即可,并不在需要高性能(普通单数据库即可以撑住)

  1. 可拓展

系统业务比较复杂,通过拆分来分别实现

  1. 成本

系统要求并不高,成本限制也不大,实现没有太过于注意的地方

  1. 安全

系统并没有设计金钱和隐私的数据,安全方面要求并不高,权限控制做好即可


综上来看,系统注意点为 业务需求复杂,数据需要做到不能全部丢失。


3.2 总体架构



  1. 采用分布式架构,拆分为学生子系统,课程子系统,权限子系统

  2. 通过 nginx 进行反向代理对外提供服务

  3. mysql 采用主备方式进行部署(备库只做备份用)

  4. 学生子系统实现:系统登录、账号分配、账号绑定、文件上传下载、查询功能

  5. 课程子系统实现:课程录入、选课、排课、试卷划分、评分判定

  6. 权限子系统实现:账号注册审核只能管理员进行、学生只能查询成绩,老师才能修改成绩、辅导员才能设置奖惩信息,老师才能上传试题,只有学生才可以做题。

4. 详细设计

4.1 核心功能

  1. 选课



  1. 考试和评分



  1. 奖惩



4.2 关键设计

  1. 高性能

由于本身系统的并发度要求并不高,所以我们采用单台服务器的数据库设计

  1. 高可用

由于系统本身可以偶尔中断数小时,且数据可以接受小时级的丢失,所以我们采用主备即可,可以使用定时备份

  1. 可拓展

由于系统本身业务比较复杂,所以我们采用了多个子系统的方式进行开发,保证后续具备一定的可拓展性

  1. 安全

由于系统本身不包含隐私内容和金融业务,所以安全不用过于强调,只要满足基本的权限设计就可以了

4.3 设计规范

  1. 服务使用 spring boot 开发

  2. 服务之间消息通讯采用 http rest+json 的方式进行

  3. mysql 使用 innodb 存储引擎

5. 质量设计

可测试性设计:采用 docker 部署,完善部署措施,让测试可以快速在单个机器上部署所有服务,并进行测试。

可维护性设计:增加管理后台,方便支持数据库的主备切换

可观测性设计:增加管理后台,管理后台展示应用的状态,日志和各种应用指标

安全/成本设计:由于系统不包含隐私内容和金融业务,不用关心安全设计,成本也没有太过限制,不用关注

6.演进规划

  1. 先让用户可用,实现学生子系统,课程子系统,权限子系统,数据库主备,并对外服务

  2. 统一收集日志和应用输出各种指标进行采集,实现管理后台,进行指标展示,日志检索,并实现点击倒换主备。

  3. 如有机会,可以引入数据分析,帮助学生总结普遍的薄弱点等等。

用户头像

五月雨

关注

还未添加个人签名 2021.12.12 加入

还未添加个人简介

评论

发布
暂无评论
外包学生管理系统架构设计文档