外包学生管理系统
前言
本文档是外包学生管理系统的架构文档。
阅读对象
开发团队
测试团队
运维团队
修订历史
词汇表
1. 业务背景
随着学校的规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。不仅花费大量的教师资源,处理效率也十分低下。
为提高学生管理的管理水平,优化资源,尽可能降低管理成本成为学生管理的新课题,学生管理系统是从学生管理现状出发,根据学生管理的新要求进行开发设计的,它需要解决学生信息管理数据信息量大修改不方便,对一系列数据进行分析时花费时间长等问题,帮助学生管理人员有效管理学生信息。
因此学生信息管理系统可以通过系统规范化地管理、科学性统计和快速查询、修改、增加、删除等,提高信息的准确度以及日常管理的工作效率。
本系统主要是应用于学生各类信息的管理,总体任务是实现学生信息关系的系统化、规范化、自动化,其主要任务是统计学生各类信息进行日常管理,如查询、修改、增加、删除、以及学生选课、成绩的查询等功能设计的管理系统。
2. 约束和限制
第一版本需在 3 个月内完成开发并上线
使用 Java 语言开发
使用 Mysql 作为数据存储
不同学校之间在数据库层要求数据隔离
系统可用要求达到 99%
平均故障恢复时间不超过 6 小时
3. 总体架构
3.1 架构分析
3.1.1 可用性
一般来说,学生管理系统宕机几个小时不会有太大影响。并且数据的可靠性要求并不是非常高,采用 Mysql 的主备模式可以满足业务的要求。
3.1.2 性能需求
对于学生管理系统来说,总用户量级在万级,系统的高性能总体要求不高。在某些集中选课时段并发也很有限,所以单 Mysql 实例可以满足。
3.1.3 扩展性
总体而言,学生管理系统的业务相对简单且基本固定。考虑到开发效率要求和后期维护,对整个系统进行模块划分,初步分为学生子系统,课程子系统和权限子系统。
3.1.4 安全性
系统没有个人隐私信息和金融数据,安全性要求不高。如果有需要可以进行学校之间数据隔离。
3.2 总体架构
使用 Nginx 作为服务器网关,进行统一鉴权后并将相关请求路由到各个子系统。
为提高开发效率,并结合业务实际情况,将系统拆分为学生子系统,课程子系统和权限子系统。
存储由两台 Mysql 数据库服务器组成,主库负责所有业务数据的读写,并实时备份数据到备库。
4. 详细设计
系统管理员为本系统最高权限用户。具有系统配置,所有角色和权限管理,权限分配等系统核心权限。
其他系统用户为教师和学生。教师有录入学生,录入课程,录入成绩等权限。学生有选课以及查看成绩等相关信息等权限。
4.1 核心功能
4.1.1 教师录入课程
教师登陆后请求录入新课程,课程子系统首先向权限子系统几进行用户权限验证,验证通过后返回录入课程的页面。
教师录入课程信息并保存。
4.2 关键设计
4.2.1 高可用
Mysql 数据库存储采用主备架构,在低成本的考虑下基本可以保证数据的可靠性。在主机发生故障的情况下可切换至备库提供服务。
4.2.2 模块拆分
对系统主体功能进行了子系统拆分,一定程度上提高了系统的局部可用性。另外从系统等扩展性角度,和研发效率角度均有提升。
4.3 设计规范
子系统均采用 Spring Boot 开发
系统页面采用 thymeleaf 引擎
子系统之间通过 RESTful API 进行交互
MySQL 使用 Innodb 存储引擎
5. 质量设计
5.1 可测试性:每个子系统做好单元测试及接口测试,提供 API 定义文档。
5.2 伸缩性:应用服务均设计为无状态服务,可以通过增加机器和实例实现水平无限扩展。初步阶段 Mysql 采用主备,后期可增加备库和读写分离。
5.3 可观测性: 初期通过要求规范化日志输出格式。
6. 演进规划
第一版本系统提供核心的功能,上线后通过用户反馈和系统监控获取后续演化需求。目前来看可以有以下一些方向。
6.1 前后端分离
引入 React,Vue 等前端技术将系统的业务和 UI 交互彻底分离,让各个模块更专注。
6.2 持续集成和持续交付
系统上线后,开发进入快速迭代,小步快跑的阶段。服务的更新和发布效率会变得更为重要,需要一套好的基础设施来让开发团队更专注业务的迭代。
6.3 可观测性提升
系统的维护是后期非常重要的工作。统一的日志收集分析,监控观测工具必不可少。
版权声明: 本文为 InfoQ 作者【极客土豆】的原创文章。
原文链接:【http://xie.infoq.cn/article/fc7f486b46af7d0a3f7793c95】。文章转载请联系作者。
评论