模块 3 作业(外包学生管理系统架构文档)
前言
本文是外包学生管理系统详细架构设计文档,用于指导管理系统后续的开发、测试和运维。
词汇表
Nginx:一个高性能的 HTTP 和反向代理 WEB 服务器。
MySql:最流行的开源的关系型数据库管理系统之一。
Redis:开源的 Key-Value 存储系统,支持网络、可基于内存亦可持久化的日志型数据库。
1. 业务背景
随着学校的规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。不仅花费大量的教师资源, 处理效率也十分低下;同时由于数据较多,没有统一管理,纸质或者非纸质的数据资料简易丢失,查询管理不便,为提高学生管理的管理水平,优化资源,尽可能降低管理成本,所以需要设计开发一套学生管理系统。
解决的问题包括:学生信息管理数据信息量大造成的修改不方便,对一系列数据进行分析时花费时间长、数据易丢失、多维度数据关联等问题,帮助学生管理人员有效管理学生信息。
带来的价值:通过系统规范化地管理、科学性统计和快速查询、修改、增加、删除等,提高 信息的准确度以及日常管理的工作效率。
达到的目标:提供一个易用,高效,功能完整的学生信息管理系统。
完成的任务:总体任务是实现学生信息关系的系统化、规范化、自动化,其主要任务是统计学生各类信息进行日常管理,如查询、修改、增加、删除、以及学生选课、成绩的查询等功能设计的管理系统
2. 约束和限制
主要的限制性要求:
最迟 1 个年内完成
成本不能超过 100 万
数据可以极少量丢失,但需要事后补充完整
系统前台包括网页及手机 APP 端,网页端需要支持包括 IE 浏览器在内的 2 款浏览器,手机端需要支持安卓及苹果二个系统
要防止学生数据被盗,需要加密
3. 总体架构
3.1 架构分析
3.1.1 高可用
本系统是学校的内部系统,并不需要非常高的可用性,短暂的失去服务并不会造成多大的影响,所以并不需要多活。但是对于学生的数据还是需要保护的,可以采用 Mysql 主备的方案,备份数据。
3.1.2 可扩展性
目前的系统,按学生管理,权限管理,考试管理等几个模块进行了划分,后续如果有新的其它类别的需求,可以新增单独的组件,和现有的架构能很好的融合。
3.1.3 安全性
通过权限管理模块,进行常规的访问权限控制,账户及角色权限控制,对于敏感信息,进行加密或脱敏处理。
3.1.4 高性能
没有突然单点高峰访问的场景,且为内部使用,使用人数固定,并不会出现突然的增多,并没有高性能的需求。
3.2 总体架构
系统主要分为 4 个子系统,分别为学生管理系统、权限管理系统、考试管理系统、课程管理系统,通过 Nginx 进行访问;数据部分采用 Mysql 主备方式,保证数据的可靠性。
1)学生管理子系统:学生信息的管理
2)权限管理子系统:角色管理,不同角色权限的管理
3)考试管理子系统:考试内容的管理,试卷生成,成绩批改,考试安排等
4)课程管理子系统:课程安排、布置/批改作业、签到等
5)数据采用 Mysql 主从备份,记录所有的数据信息。
4. 详细设计
4.1 核心功能
4.1.1 考试流程
4.2 关键设计
1.系统拆分为多个子系统,单独部署、开发,降低耦合,有利于业务的后期扩展
2.数据存储采用 mysql, 主机负责读写,主备间通过 binlog 同步,如果主机挂了,会丢失部分数据,而在这一时间段内子系统读写数据库操作失败,用户需要等数据切换到备机再操作一次。
4.3 设计规范
1.前后端分离,后端服务采用 C++开发,手机 APP 采用 Html5 开发, 前端通过 restful 接口和后台服务交互,后端各子系统通过 thrift RPC 访问。
2.Mysql 使用 innoDB 存储引擎
3.消息结构采用 google protobuf
5. 质量设计
可测试性:后台 90%覆盖率的单元测试,完善的自动化测试,完善的全流程的测试用例
可维护性:详细的部署文档,系统使用手册,数据库文档,组件指标异常的告警
可观测性:完整的后台日志文档,组件指标的告警或提示
成本:控制在 100 万内
6. 演进规划
6.1 项目一期
完成学生管理、权限管理、课程管理、三个子系统的开发
6.2 项目二期
根据一期系统的使用体验及优化建议,进行优化,同时开发考试管理、通知推送,简单的系统运维监控。
评论