写点什么

架构训练营模块三作业

作者:gigifrog
  • 2023-01-03
    北京
  • 本文字数:1787 字

    阅读完需:约 6 分钟

前言

写出外包学生管理系统的架构文档


1. 业务背景

本系统主要应用于学校学生信息管理,总体任务是实现学生信息管理的系统化、规范化和自动化,其主要任务是管理学生相关信息,如学籍、课程、成绩、奖惩。

系统主要有以下四个方面的具体需求:

1)学生管理:系统登陆、账号分配、账号绑定、组织管理层级、文件上传下载、信息查询

2)课程管理:课程录入、选课功能、排课功能、教材选择

3)考试管理:发起考试、评分判定、平时成绩

4)权限管理:系统使用者有学生、教师、管理员、辅导员,分别对应不同的职责。

2. 约束和限制

  • 该项目只服务于一所学校,师生人数约 1000 人

  • 学生数据非常重要,需要长期可靠保存

  • 作为外包项目,在实现所有功能的前提下,尽可能采用低成本,快速交付的方案

3. 总体架构

3.1 架构分析

3.1.1 高性能

  • 目标用户总是在 1000 人左右,平均每天访问量预计 2000~3000

  • 每学期选课可能引发短时高访问量,通过各年级错峰选课的策略,预计在线人数峰值在 200 人左右

  • 本系统非实时交互系统,对响应请求的最大容忍时间为 60s

基于以上访问数据,单应用服务器即可满足,无需集群。

3.1.2 高可用

  • 本系统对服务的高可用性要求较低。在白天(8:00AM~8:00PM)的最长容许 down 机时间是 1 小时,夜间 down 机可以等到第二天上班解决。

  • 本系统对数据的高可用性要求很高。所有数据必须永久安全保存。如果数据大面积丢失会遭到教育部门的处罚。

基于对数据高可用的需求,数据库服务器将采用主备机制。

3.1.3 可扩展

外包项目,暂时没有可扩展的需求。

3.1.4 安全

  • 网络服务器基本安全需求,防止黑客拖库,篡改信息

  • 为防止账号被盗,后期可以引入登陆二次验证机制

3.2 总体架构

  • Nginx:请求转发至不同应用服务器。未来如果各子系统有多台服务器,Nginx 也负责负载均衡的工作。

  • 学生子系统:涉及学生相关的操作,账号分配、账号绑定、基本信息录入

  • 课程子系统:包括课程的录入、选课、排课已经考试相关的发起、评定操作

  • 权限子系统:包括用户角色分配,用户登陆验证,用户可访问接口和数据库定义

  • MySQL:所有信息数据的持久化管理,采用主备模式,尽可能防止数据丢失


4. 详细设计

4.1 核心功能

4.1.1 账号注册

  • 学生在注册页面填入基本信息:学号、姓名、密码、邮箱、手机号、身份证、学院、班级

  • 学生子系统创建新账户,发送邮件和短消息验证邮箱、手机号的有效性

  • 辅导员在学生子系统中确认该学生的注册有效

  • 学生子系统将账户激活,并通过邮件通知该学生

4.1.2 登陆

  • 学生在登陆页面填入学号、密码

  • 权限子系统验证密码,并发送短消息进行二次验证

  • 学生输入验证码

  • 权限子系统验证,通过后创建 session token

4.1.3 发布新课程

  • 管理员录入新课程,并确定时间、人数、地点、任课老师

  • 教务为课程添加教材

4.1.4 选课

  • 学生登陆后,课程子系统列出对应的必选和选修课程,以及目前可选的上课时间

  • 学生选择一门课(上课时间、地点和老师)并提交

  • 课程子系统确认课程仍有剩余名额,并添加该学生的注册信息,并更新剩余名额

4.1.5 发布考试

  • 教师登陆系统,课程子系统列出该教师正在教授的课程列表

  • 教师挑选一门课程,并选择考试

  • 教师设定知识点、范围、难易程度

  • 课程子系统检索题库,并自动生成试卷

  • 教师确认试卷内容,并打印

4.1.6 评分判定

  • 教师上传签名过的试卷,并在系统中填入评分

  • 课程子系统将试卷图片存储在文件服务器中

  • 课程子系统将评分存入 MySQL 数据库

4.2 关键设计

4.2.1 MySQL 主备机制

  • 所有的数据访问(增改查)都是连接 MySQL 主服务器,备服务器不对外提供服务

  • 采用 MySQL 的主从复制来实现数据复制

  • 如果 MySQL 主机 down 了,无法重启,必须由管理员手工将备机改成主机

4.2.2 数据访问安全性控制

  • 用户登陆后会产生 session token,存在浏览器 cookie 中,有效期为 15 分钟

  • 权限子系统会缓存 session token 对应的角色列表

  • 任何对学生子系统,课程子系统的访问第一步都需要在连接权限系统,确保 session token 仍然有效,并获得对应的角色列表

4.3 设计规范

  • 前端采用 Vue 框架

  • 后端采用 Spring boot 框架

  • MySQL 使用 Innodb 存储引擎

  • 前后端间,各个子系统之间用 HTTP + JSON 进行交互

5. 质量设计

5.1 管理员后台

  • 监控各个子系统运行数据:当前请求数量+CPU、内存使用

  • 重启业务和数据库服务器脚本

  • 将 MySQL 备机切换成主机的步骤和运行脚本

5.2 成本

  • 6 台服务器:3 台业务服务器+2 台 MySQL 服务器+1 台 Nginx 服务器

  • 公网域名服务

  • 短信服务费

  • 学校已有邮件服务器

  • 试卷打印由学校已有打印机提供

  • 存储试卷图像的文件服务器是学校已有的 FTP 服务器


6. 演进规划

该外包项目目前只签订了一期的合同

用户头像

gigifrog

关注

还未添加个人签名 2018-01-17 加入

还未添加个人简介

评论

发布
暂无评论
架构训练营模块三作业_架构训练营_gigifrog_InfoQ写作社区