写点什么

架构实战营 模块三作业 外包学生管理系统架构设计

作者:西山薄凉
  • 2022-12-28
    广东
  • 本文字数:1530 字

    阅读完需:约 5 分钟


前言

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

1. 业务背景

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


为此,需要有工具解决学生信息管理数据信息量大修改不方便,对一系列数据进行分析时花费时间长等问题,帮助学生管理人员有效管理学生信息。 因此学生信息管理系统可以通过系统规范化地管理、科学性统计和快速查询、修改、增加、删除等,提高信息的准确度以及日常管理的工作效率。


故引入学生管理系统,旨在提高学生管理的管理水平,优化资源,尽可能降低管理成本。

2. 约束和限制

  1. 在 2023.3.31 前交付。

  2. 项目造价不能高于 100000 元,每月运维成本不能高于 5000 元。

  3. 系统数据需要至少有冷备,系统宕机数据不能丢失。

  4. 要支撑 10000 个在校学生使用,1000 个学生的并发抢课。

3. 总体架构

3.1 架构分析

3.1.1 可扩展

根据预测认为学生管理系统业务基本不会发生大的变化,各角色间权限设计相对比较稳定,学生、课程两个业务模块基本只存在相关信息增删改查的变化,所以将系统内部封装成权限、学生、课程三个模块,分别支撑以下功能:

  • 权限:登录管理,权限管理,拒绝非法访问

  • 学生:学生信息查询、修改,成绩查询

  • 课程:课程信息录入、查询;学生选课、教务排课、教材选择

3.1.2 高可用

该系统部署在学校机房,通过校园网连接。

主要保证数据高可用,学生、课程数据不能丢失,宕机后要可以在一天内恢复访问,所以需要设计主从数据库,故障后手动恢复数据即可。

3.1.3 高并发

从需求得知需要支撑共 10000 名在校学生的使用,1000 名学生的并发访问抢课,根据分析认为 Nginx 可以支撑该量级的访问,同时各模块也足够支撑该量级的访问,不存在性能问题。


3.2 总体架构

  1. 系统采用 Nginx 实现负载均衡,分发请求到相关的服务

  2. 系统按照功能拆分为学生、课程、权限三个子服务

  3. 使用 MySQL 进行数据的存取,主数据库负责日常数据读写,实时同步数据到备数据库;当主数据库故障时,切换主备数据库,备数据库对外提供数据读写并同步到主数据库。

4. 详细设计

4.1 核心功能

4.1.1 登录 &鉴权功能

使用 JWT 进行鉴权。

登录成功后权限服务返回按照指定规则生成的 JWT。

后续客户端直接在请求头中携带 JWT,功能模块自行验证 JWT 有效性。

4.2 学生选课

学生选课分为课程状态查询、选课申请两个功能。


4.3 ...

4.2 关键设计

4.2.1 学生选课高并发

由于实际业务中,会向同一批学生开放一个时间窗口进行选课,经常性有抢课的情况,对于服务的查询并发压力较大。

选课业务中,同一批学生的课程基本是相同的,鉴于此情况,可以在 SQL 之上设计一层本地缓存以提升系统吞吐量。

4.2.2 存储可扩展

由于学生、课程、考试数量会随着使用不断递增,为了优化查询写入性能,数据库的设计可以按照学生的学年,课程、考试创建日期等进行水平分表。

4.3 设计规范

开发框架:使用 Spring boot 进行业务模块开发

交互协议:业务服务以 Restful API 的形式向客户端提供功能访问

数据格式:JSON,标准如下

{    code: 0,    message: 'success',    data: {        key1: 'value1',        key2: 'value2'		}}
复制代码


5. 质量设计

5.1 可测试性

单元测试:模块业务较简单,暂不设计单元测试。

API 测试、压力测试:使用 jmeter 进行接口测试、压力测试。

5.2 可维护性

功能降级:高负载情况下,支持降级非必要功能,如图片加载、信息修改等。

5.3 可观测性

日志系统:通过日志跟踪请求相应情况和内部模块间调用情况。

支持服务负载、存储负载监控,负载持续较高时触发维护告警信息。

5.4 安全性

为防止有学生选课时进行脚本刷课,造成大量不必要的请求导致业务故障,在模块中添加限制访问频次的中间件,频繁请求直接拒绝。

6. 演进规划

外包项目,一次性交付,暂无演进规划。

用户头像

西山薄凉

关注

还未添加个人签名 2019-02-21 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营 模块三作业 外包学生管理系统架构设计_「架构实战营」_西山薄凉_InfoQ写作社区