写点什么

模块三作业

用户头像
俊杰
关注
发布于: 2 小时前

(蓝色斜体部分为作业注解)

前言


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


1. 业务背景


随着学校的规模不断扩大和学生数量的增加,现有基于数据库开发软件的学生信息管理系统不够便捷,对一系列数据进行分析时花费时间长,效率低下。为提高学生管理的管理水平,优化资源,尽可能降低管理成本成为学生管理系统的新课题。


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


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


学生管理系统上下文示意图:

(注:由于对学校管理业务不是很了解,该图是象征性的,仅用于体现系统与外界的边界和交互关系)


image.png


2. 约束和限制


  1. 必须在 10 月 1 日前完成上线

  2. 开发成本不超过 5 万(客户提供部署环境)

  3. 学生数量不超过 10 万


3. 总体架构


3.1 架构分析


3.1.1 可扩展

学生管理系统的部分业务需求比较复杂,需要可扩展性,便于后续快速支持新需求。

3.1.2 高可用

对于学生管理系统,要保证数据不会全部丢失;业务系统不需要关注高可用。

3.1.3 高性能

对于学生管理系统,性能要求不高,基本没有高并发场景。对于选课部分由于学生数量有限,也不会出现同时选课的场景,因此暂时不需要关注高性能。

3.1.4 成本、安全

项目资金有限,团队规模小,不需要将系统设计得过于复杂。

安全性方面,保证数据安全即可。

3.1.5 可测试性、可维护性、可观察性

无需关注。


综合来看,学生管理系统架构需要满足可扩展性和数据高可用。


3.2 总体架构


系统架构图:


image.png


说明:

  1. 前后端分离,前端与后端采用 JSON 交互

  2. 后端业务采用 Spring Boot 框架实现,要求无状态。

  3. 权限子系统负责认证、鉴权。认证方式采用 token 机制。

  4. 后端接收到前端请求后,首先携带 token 到权限子系统验证身份,并验证操作权限。

  5. 后端组件之间采用接口交互,数据格式为 JSON.

  6. 数据库不做拆分。全部后端应用使用同一实例。


应用架构图:


image.png


说明:

  1. 前端部署到 nginx. nginx 既充当 http 服务器,处理静态资源,又充当反向代理服务器。

  2. 数据库采用 MySQL 主备模式。

4. 详细设计

4.1 核心功能


4.1.1 系统初始化


系统部署后,执行初始化操作,写入权限系统和学生系统预置数据。


系统自动生成学生、教师和管理员账号,同时预置学生、教师、管理员、辅导员四种角色,并按产品需求文档中的规则初始化权限规则。


4.1.2 身份认证和鉴权


image.png


4.1.3 学生管理和课程管理

(略)

4.2 关键设计


1)认证采用 JWT

从扩展性考虑,采用 JWT.


一方面,JWT 优势是服务器不再需要存储 Session,使得服务器认证鉴权业务可以方便水平伸缩。缺点是服务器不存储 Session,无法做到动态删除或修改登录中的 token,如强制下线等功能。在学生管理系统中,不需要这样的场景。后续如果需要,可以改为 token 机制:后端持久化 token,管理会话状态。


另一方面,这样可以保证后端服务是无状态的,使得课程和学生子系统也可以水平伸缩。


2) MySQL 主备模式

学生管理系统的数据要求不全部丢失即可,采用 MySQL 主备模式可实现数据高可用。


3) 课程和学生子系统与权限子系统交互使用 HTTP 接口即可

还有一种方式是使用 SDK,这种方式会增加不必要的复杂性。由于性能要求不高,采用 HTTP 接口即可。


4.3 设计规范


1)前端采用 vue 开发​

2)后端服务采用 Spring Boot + JPA 开发

3)MySQL 采用 InnoDB 存储引擎

4)后端组件交互采用 JSON + RESTful 接口

5)后端工程结构方面:可以采用一个 maven 多模块项目,打包制品分为课程子系统、学生子系统和权限子系统 3 个 jar 包。

5. 质量设计


5.1 管理后台

管理后台提供操作日志、审计、统计分析功能,提升可维护性。


5.2 成本

硬件成本主要考虑部署环境,在服务器资源紧张的情况下可以使用如下方案:

1)权限子系统和 nginx 可以部署到一台机器

2)课程子系统和学生子系统可以部署到同一机器

3)MySQL 主备分别独立部署到两台机器


物理部署图:


image.png


5.3 可测试性、可观测性

1)后端服务提供统一的健康检查接口,如利用 Spring Boot Actuator 实现,便于后续对接运维平台。

2)实现 trace-id,跨系统追踪请求

3)实现日志规范打印,分级打印


6. 演进规划


二期之后主要规划:完善不可变基础设施,通过对接已有的 PaaS 平台,补齐非业务功能,如认证、鉴权,服务治理,日志分析,监控告警等。


6.1 一期


权限子系统实现基本的认证和鉴权

支持学号激活,邮箱登录,绑定手机号,微信等。

鉴权方面支持简单的基于角色的权限机制。


6.2 二期


认证和鉴权对接智慧校园统一身份认证平台,实现 SSO 登录。

鉴权方面支持 ABAC 机制。


6.3 三期


数据库垂直拆分,课程子系统、考试子系统、权限子系统使用独立的数据库。

实施微服务改造,对接智慧校园平台的 PaaS, 对接服务注册与发现、API 网关、数据分析平台、监控告警、日志分析等。


用户头像

俊杰

关注

还未添加个人签名 2017.08.27 加入

还未添加个人简介

评论

发布
暂无评论
模块三作业