架构 --- 作业 3
外包的学生管理系统详细架构文档试写。
前言
架构训练营作业,外包学生管理系统详细架构文档,作业。
1 业务背景
随着时代的进步,国家对大学投入增加,大学扩招使得学生规模增加,导致了管理学生的成本增加,各种信息传达缓慢等问题。同时由于线下人工工作量增加,由于疏忽导致的各种错误也频繁发生。并且在可以预见的类似新建校区之类的问题上,线下工作的工作量会是现在的学校无法承受的。
因此,为了解决以上问题,我们需要引入一个学生管理系统,让全校师生参与使用从而降低学生管理的成本。同时让学生管理相关的工作标准化、流程化,降低人工操作可能带来的错误。线上系统又会使得学生管理相关工作不仅限在特定办公地点。让学校在校园信息化建设的目标中前进一大步。
2 约束和限制
系统交付日期为 2022 年 10 月 26 日
系统硬件成本低于 xx 万元
数据库使用 Mysql 数据库,需要备份保证数据安全
需要对数据权限进行严格控制
使用 java 语言进行后端开发,并提供最终的工程源码
前后端分离
3 总体架构
学生管理系统目前为独立的系统,不存在与其他系统进行交互。
3.1 架构分析
高性能:由于一般大学在校师生上限一般在万人以内,并且绝大多数情况下学生不会频繁使用系统,QPS/TPS 峰值不会很高,并且管理系统中并不会存在复杂的运算功能,因此单点服务通常足够满足性能需求。
高可用:同样由于学生管理并不存在紧急任务,对于服务宕机的容忍程度相对较高。
成本:系统功能相对简单,开发周期较短。并且根据甲方对于硬件成本的要求,整体架构需要尽量简单。
安全:对于学校,学生数据大量丢失是无法容忍的,因此数据库需要主备,防止数据丢失。
3.2 架构分析
系统架构图
前端页面部署在 Nginx 中。
后端服务根据功能进行拆分,学生子系统、课程子系统、权限子系统,系统服务器各自独立。学生或课程系统宕机时,另外的系统会继续提供服务,避免系统完全不可用。
前端页面和系统之间通过接口相互调用。
使用两台服务器分别部署两个 mysql,进行 binlog 备份。主 mysql 对外提供服务,备 mysql 仅在主异常时对外提供服务且作为恢复数据。
4 详细设计
4.1 核心功能
学生信息填报:学生将个人信息填写完成后并提交审核,教务人员对学生信息进行审核决定信息生效或者需要退回修改
上课信息查询:教务人员录入本校的课程并关联对应的教师、班级以及上课的时间地点;教师学生登录系统查询课程相关信息。
选修课选课:教务人员录入选修课信息并关联上课教师以及可选课程的学生范围,学生登录系统查看自己可选的课程,提交课程前需要验证课程人数是否超限。
成绩发布:教师根据自己的课程查询课程下的学生,录入课程平时分期末分,系统计算获得最终得分。学生登录系统根据自己的课程查询最终的得分。
4.2 关键设计
后端服务按照类型进行了拆分,在类似选课的情景下如果单点不足以支撑,可以仅对选课系统进行扩展,提高性能以及可用性。
Mysql 使用主备方式,使用 binlog 进行数据同步。如果需要可以 show slave status 进行延时监控
4.3 设计规范
前后端分离
后端服务使用 springboot 进行开发,前端页面使用 vue 进行开发。
Mysql 限制 5.7 版本,Innodb 引擎,编码格式使用 utf8mb4。
页面以及子系统之间相互使用 http 调用,接口满足 rest 要求。
数据交换使用 json。
容器使用 Tomcat
5 质量设计
由于系统全部使用 http 方案进行调用,开发过程中可以保留接口调用的地址和参数格式来满足可测试性的要求。
使用 grafana(之类)进行系统日志收集以及服务器性能收集,方便系统观测。
由于外包项目因此系统演进的优先级相对低,需要保证系统日志详细输出应对系统异常时问题的定位。同时使用类似 supervisor 之类对系统容器进程进行管理,如果监控到容器停止进行容器拉起来降低运维工作压力。
由于成本限制当前架构需要 6 台服务器进行部署,如果预算提高可以对三个子服务进行集群化来提高可用性和性能。
数据库主备结构,同时备库进行定期数据备份保证数据安全。
6 演进计划
外包系统数据一般为一次性交付,具体演进需要根据甲方提供的需求进行处理。
评论