写点什么

【架构师训练营】模块三作业

  • 2021 年 12 月 28 日
  • 本文字数:1409 字

    阅读完需:约 5 分钟

前言

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


词汇表

Spring: Java 生态系统中使用最广泛, 便于维护的框架.

MySQL: 使用最广泛的开源数据库.

Nginx: 使用最广泛的高性能 HTTP 服务器和反向代理.


1. 业务背景

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

为提高学生管理的管理水平,优化资源,尽可能降低管理成本成为学生管理的新课题,学生管理系统是从学生管理现状出发,根据学生管理的新要求进行开发设计的,它需要解决学生信息管理数据信息量大修改不方便,对一系列数据进行分析时花费时间长等问题,帮助学生管理人员有效管理学生信息。因此学生信息管理系统可以通过系统规范化地管理、科学性统计和快速查询、修改、增加、删除等,提高信息的准确度以及日常管理的工作效率。

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


2. 约束和限制

  1. 成本不能太高

  2. 学生数量变化不大

  3. 数据不能丢失

  4. 为方便后续维护, 需要使用 Java 技术栈


3. 总体架构

3.1 架构分析


  • 高可用

属于管理系统, 可以在深夜或者周末, 节假日进行维护。对可用性要求不会很高

  • 高性能

学校的人数有限, 且大部分时间大家都不会使用该系统. 仅需对部分模块, 比如选课, 考试进行特殊设计。

  • 可扩展

考虑到目前只是面对一个学校,可扩展要求不高。

  • 安全性

因为是包含学生成绩,数据需要安全和可靠,不能丢失。


3.2 总体架构

  1. 数据库采用 mysql 主备架构。一台主 MySQL 和一台备 MySQL。备机正常情况下不对外服务。

  2. 业务模块由 3 个子系统组成,课程子系统、学生子系统、权限子系统。

  3. Nginx 作为反向代理,http 缓存服务器。负责把请求的路径映射到对应的业务子系统上,并对一些静态页面做缓存。

4. 详细设计

4.1 核心功能

4.1.1 权限子系统

包含账号分配、系统登录、权限管理功能。

  1. mysql 负责存储用户的账户信息包括密码,身份信息,权限信息。

  2. 由权限子系统的 API 服务层负责增删查改这些信息。并针对整个系统的所有请求进行身份验证及权限校验,会使用应用内本地缓存,来提高校验速度。

4.1.2 课程子系统

包含课程管理、考试管理功能。

  1. mysql 负责存储课程信息包括教材信息,课程排课信息,课程的考试信息,平时成绩,以及学生的考试成绩。

  2. 由课程子系统的 API 提供相关的增删查改功能。

4.1.3 学生子系统

包含学生选课、学生上传、下载文件功能。

  1. mysql 负责存储学生的选课信息,学生上传的文件路径,具体文件直接存储在业务服务器上。

  2. 通过权限子系统识别用户是否有权限去选课等。

  3. 通过调用课程子系统的 API 来得到课程和考试的基础信息。 


4.2 关键设计

  • 用户与 nginx 之间使用 https 协议。

  • 前端 Vue, 后端使用 Spring Boot。

  • 数据库主从半同步。

4.3 设计规范

  • 前后端分离,后端使用 Spring Boot 开发。

  • MySQL 使用 InnoDB 引擎。

  • 使用 HTTP 接口通信, 方便开发和维护。

5. 质量设计

  • 可测试性

根据各子系统的接口,来进行系统的功能测试

  • 可维护性

可通过系统日志,来定位、修复问题

  • 可观测性

可以通过各个功能模块的接口、系统的日志、系统常见指标和服务器运行状态的监控来观察系统的内部运行情况

  • 安全

通过防火墙来阻断常见的网络攻击,保障系统的安全性

6. 演进规划

6.1 更多功能

学生课程喜好报表

学生成绩报表


用户头像

还未添加个人签名 2018.08.01 加入

还未添加个人简介

评论

发布
暂无评论
【架构师训练营】模块三作业