外包学生管理系统架构设计文档
前言
本文是外包学生管理系统的详细架构设计文档,用于指导外包学生管理系统后续的开发,测试和运维
词汇表
nginx: 一款用于反向代理和负载均衡应用
mysql:一款开源的支持事务的数据库
1.业务背景
随着学校的规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。不仅花费大量的教师资源,处理效率也十分低下。
本系统主要目的:
主要是应用于学生各类信息的管理,总体任务是实现学生信息关系的系统化、规范化、自动化
其主要任务是统计学生各类信息进行日常管理,如查询、修改、增加、删除、以及学生选课、成绩的查询等功能
提高日常管理的工作效率
系统边界黑盒图如下
2.约束和限制
数据不允许丢失
部署成本不超过 10 台服务器
开发成本不超过 100w
开发周期为 6 个月
服务人数在 2w 人
3.总体架构
3.1 架构分析
高可用
系统停机几个小时,并没有特别大的影响
数据可以接受丢失一个小时内的数据,丢失可以进行人来补全或者重填。
高性能
系统需要服务的人数在 2w 人左右,但学生并不会每天都上系统,而且上系统的次数一天不超过 10 次
就算出现大家同时登录,有部分人登录失败,也可以接受继续等待,直到上线人数变少。
综上来看,系统只需要正常工作即可,并不在需要高性能(普通单数据库即可以撑住)
可拓展
系统业务比较复杂,通过拆分来分别实现
成本
系统要求并不高,成本限制也不大,实现没有太过于注意的地方
安全
系统并没有设计金钱和隐私的数据,安全方面要求并不高,权限控制做好即可
综上来看,系统注意点为 业务需求复杂,数据需要做到不能全部丢失。
3.2 总体架构
采用分布式架构,拆分为学生子系统,课程子系统,权限子系统
通过 nginx 进行反向代理对外提供服务
mysql 采用主备方式进行部署(备库只做备份用)
学生子系统实现:系统登录、账号分配、账号绑定、文件上传下载、查询功能
课程子系统实现:课程录入、选课、排课、试卷划分、评分判定
权限子系统实现:账号注册审核只能管理员进行、学生只能查询成绩,老师才能修改成绩、辅导员才能设置奖惩信息,老师才能上传试题,只有学生才可以做题。
4. 详细设计
4.1 核心功能
选课
考试和评分
奖惩
4.2 关键设计
高性能
由于本身系统的并发度要求并不高,所以我们采用单台服务器的数据库设计
高可用
由于系统本身可以偶尔中断数小时,且数据可以接受小时级的丢失,所以我们采用主备即可,可以使用定时备份
可拓展
由于系统本身业务比较复杂,所以我们采用了多个子系统的方式进行开发,保证后续具备一定的可拓展性
安全
由于系统本身不包含隐私内容和金融业务,所以安全不用过于强调,只要满足基本的权限设计就可以了
4.3 设计规范
服务使用 spring boot 开发
服务之间消息通讯采用 http rest+json 的方式进行
mysql 使用 innodb 存储引擎
5. 质量设计
可测试性设计:采用 docker 部署,完善部署措施,让测试可以快速在单个机器上部署所有服务,并进行测试。
可维护性设计:增加管理后台,方便支持数据库的主备切换
可观测性设计:增加管理后台,管理后台展示应用的状态,日志和各种应用指标
安全/成本设计:由于系统不包含隐私内容和金融业务,不用关心安全设计,成本也没有太过限制,不用关注
6.演进规划
先让用户可用,实现学生子系统,课程子系统,权限子系统,数据库主备,并对外服务
统一收集日志和应用输出各种指标进行采集,实现管理后台,进行指标展示,日志检索,并实现点击倒换主备。
如有机会,可以引入数据分析,帮助学生总结普遍的薄弱点等等。
评论