写点什么

架构实战营作业三

作者:吴伟
  • 2022 年 4 月 19 日
  • 本文字数:1395 字

    阅读完需:约 5 分钟

前言


本文是外包学生管理系统的架构文档,用于指导消息队列后续的开发、测试和运维


词汇表

MySql:业界流行的开源数据库

Spring Boot:Java 流行的开发框架

Nginx:高性能的 HTTP 和反向代理 web 服务器


1. 业务背景

随着学校招生规模不断扩大, 学生数量的增加, 需要处理的信息也日趋增大,原有的各项流程纸质人工操作耗时人力消耗越来越大,由此带来一下几个明显的系统问题:

  • 管理效率低下

  • 学生信息管理缺乏规范

  • 无法科学分析学生学习情况

基于以上背景,我们需要开发一套完善的学生管理系统。

2. 约束和限制


1、必须在 2022 年 8 月份完成

2、数据库采用 mysql 主备方式

3、后端采用 Spring Cloud 开发,前端采用 vue,数据交换使用标志的 Json

4、整体成本不要超过 100 万元


3. 总体架构

3.1 架构分析

  • 高可用:对于学生系统来说,数据丢失后会影响学校的教学运作,且需要大量的人工重新录入,是非常严重的事情。

  • 高性能:基于用户规模的预估,不需要高性能考虑。如果对选课有高并发场景的需要,可以通过排队等技术方案解决

  • 可拓展:采用微服务开发方式对服务进行拆分,保证业务可理解,服务可伸缩。

  • 安全性:保证数据完整性;敏感信息需要加密


3.2 总体架构



1、采用 Nginx 进行负载均衡,将不用的业务路由到不用的服务器上。

2、采用 MySql 一主一备,每个微服务建立单独一个数据库。

3、学生、课程、权限各个子系统部署在不同服务器上彼此相互不影响。

4. 详细设计

4.1 核心功能

4.1.1 权限子系统

负责账号分配/系统登录/权限管理功能。

mysql 负责存储用户的账户信息包括密码,身份信息,权限信息。由权限子系统的 API 服务层负责增删查改这些信息。并以拦截器形式拦截整个系统的所有请求,确认用户身份权限符合后,再进行下一步的操作。

由于这部分信息相对比较固定,可以通过本地缓存 caffiene 对用户信息进行缓存。并且在信息同步时候同步更新缓存。

4.1.12 课程子系统

负责课程管理,考试管理。

mysql 负责存储课程信息包括教材信息,课程排课信息,课程的考试信息,平时成绩,以及学生的考试成绩。课程子系统通过 Restful http API 提供相关的增删查改功能。学生抢课需要注意,每个课程的容量限制的校验。通过权限子系统去判断用户是否有权限去设置课程,考试等。

4.1.3 学生子系统

负责学生选课,以及学生上传/下载文件

mysql 负责存储学生的选课信息,学生上传的文件路径,具体文件直接存储在业务服务器上。通过权限子系统识别用户是否有权限去选课等。通过调用课程子系统的 API 来得到课程和考试的基础信息。学生子系统主要负责上传/下载文件,以及学生的选课功能。

4.2 关键设计

4.2.1 数据存储可靠性

学生信息存储在 MySQL 中,一主一备两台 MySQL 服务器,MySQL 服务器之间复制数据,保证数据高可用。

4.2.2 可扩展性

服务拆分为学生子系统、课程子系统和权限子系统,保证业务可理解和服务可伸缩。


4.3 设计规范

1、系统后端使用 Spring Cloud 开发,数据访问采用 Mybatis Plus

2、Vue 采用 2 版本,UI 框架使用 Element UI

3、 前后端通信采用 Http 协议,API 采用 Restful 风格,数据采用 Json 格式。

4、 MySQL 使用 Innodb 存储引擎

5. 质量设计

5.1 成本

无。

5.2 可测试性

只增加各个服务和中间件的健康检查即可,记录相应的日志信息

5.3 可维护性

包含在详细设计中,包含学生管理、课程管理等。

5.4 可观测性

无。


6. 演进规划

一期:完成学生管理、课程管理、选课功能。

二期:完成统计功能。

三期:考试一学期只有一次,所以可以安排后面完成考试管理功能。

用户头像

吴伟

关注

还未添加个人签名 2018.02.06 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营作业三_吴伟_InfoQ写作社区