【架构实战营作业】模块三:学生管理系统架构设计文档
前言
本文是学生管理系统的详细架构设计文档,用于指导学生管理系统的后续开发、测试和运维工作。
词汇表
1. 业务背景
随着学校规模的不断扩大,学生数量的增加,带来了几个明显的问题:
需要处理的信息日趋增大
花费大量的教师资源
处理的效率十分地下
目标:提高学生管理的管理水平,优化资源,尽可能降低管理成本
价值:解决学生信息管理数据信息量大,修改不方便,对一系列数据进行分析是花费时间长等问题,帮助学生管理人员有效管理学生信息
基于以上背景,我们需要搭建一套学生管理系统,实现学校信息关系的系统化、规范化、自动化,其主要任务是统计学生各类信息进行日常管理
2. 约束和限制
可通过公网域名访问
数据高可用:数据不要全部丢失
成本有限
服务端采用 Java 开发
3. 总体架构
系统边界黑盒图:
学生管理系统整体而言没有与外部交互的系统,系统边界黑盒图此处省略
系统边界白盒图:
3.1 架构分析
3.1.1 高可用
学生管理系统是学校内部使用,一段时间内系统不可用的话也只会影响到学校内的教师和学生,影响不大,整体而言对可用性要求不高,但是系统所设计到的数据不能全部丢失,如学生的信息、考试成绩等,所以对数据高可用有要求
3.1.2 高性能
一个学校的教师和学生人数不会太多,可以预见后期的访问量,,并发量不会太大,,所以高性能这块不用太追求,
3.1.3 可扩展
学生管理系统的业务需求还是比较复杂的, 所以要考虑系统的可扩展性
综合来看,学生管理系统需要考虑系统的可扩展性以及数据的高可用
3.2 总体架构
系统的整体架构如下图所示
根据系统的功能模块,将系统拆分为 3 个内部子系统:学生子系统、课程子系统、权限子系统,保证了系统的可扩展性
系统的数据采用 MySQL 数据库来存储,同时采用了主备模式,保证了数据的高可用
正常情况下,数据的读写都是主数据负责,备数据库只负责从主数据库同步数据,当主数据库不可用时,备数据库对外提供读写服务
一个用户请求过来的时候会通过 Nginx 来将请求进行转发
4. 详细设计
4.1 核心功能
4.1.1 学生管理
4.1.2 课程管理
4.1.3 权限管理
4.2 关键设计
1. 系统的可扩展性
通过分析系统的详细需求,抽象出对应的功能模块/子系统,将整个系统拆分为多个子系统,从而保证系统的可扩展性,在后续业务需求发生变更或者有新的业务需求时可以做到良好的扩展。
2. 数据的高可用
数据的存储采用主备的模式,保证了数据不会完全丢失,同时可以考虑采用云 RDS,可以进一步保障数据的高可用。
4.3 设计规范
1. 系统的服务端开发语言使用 Java,开发框架采用 Spring Boot + Mybatis 开发,前端可采用 PHP 开发
2. 服务端开发语言 Java 版本 1.8
3. 服务端和前端的数据交互通过 HTTP 协议,数据格式采用 JSON,具体的结构需要在各模块设计方案里设计
4. 数据采用 MySQL,版本 5.7,存储引擎采用 Innodb
5. 质量设计
1. 可测试性
可以通过各个功能模块的接口,来进行系统的功能、性能测试
2. 可维护性
可通过系统日志,来定位、修复问题;准备好系统的启动、停机的脚本
3. 可观测性
可以通过各个功能模块的接口、系统的日志、系统常见指标的监控来观察系统的内部运行情况
4. 安全
通过防火墙来阻断常见的网络攻击,保障系统的安全性
6. 演进规划
一期:
优先实现优先级最高的需求,能够在单个学校展开使用
二期:
扩展更多的功能,同时优化已有的功能点,在多个学校展开使用
三期:
建设学生管理 SAAS 平台,可接入全国的学校
版权声明: 本文为 InfoQ 作者【聆息】的原创文章。
原文链接:【http://xie.infoq.cn/article/31983b6ac3e8e5aa8851b7105】。未经作者许可,禁止转载。
评论