架构实战营第 10 期模块 3 作业
前言
本文是学生信息管理系统的详细架构设计文档,用于指导系统后续的开发、测试和维护。
1. 业务背景
随着学校规模不断扩大,学生数量逐渐增多,需要处理的信息日益增大,由此花费大量人力资源, 而且效率十分低下。
基于此, 我们决定开发一个学生信息管理系统, 可以系统规范的管理学生信息, 快速查询、修改信息, 提高准确度,以及日常管理的工作效率。
2. 约束和限制
1.系统预算有限,尽量采用开源方案
2.系统上线一次交付,后期由学校维护,尽量采用成熟的方案,减少维护成本
3. 总体架构
下图左边为系统架构图,右边为系统模块图。
在系统架构图中,最上边是 Nginx 服务器做反向代理和负载均衡功能。下一层分别为学生子系统、课程子系统和权限子系统。
数据库分为为 MySQL 主数据库和备用数据库。
从逻辑功能上,系统模块分为学生管理、课程管理, 考试管理,和权限几个模块。
3.1 架构分析
3.1.1 高性能
对于一个学校的学生管理系统来说, 学生加上老师数量可能从几千人到几万人, 但对于系统来说负载都不大,比如那常见的选课来说,一门课最多几百人同时在线去选,所以一般来说系统都能够承受住。所以学生管理系统堆高性能来说没有特别的要求。
3.1.2 高可用
学生管理系统一般来说不需要系统 24 小时在线, 但有一个要求,就是我的数据不能丢失,如果丢失了就比较麻烦,所以数据库设计这部分要保证数据的高可用性。
3.1.3 可扩展性
系统业务需求比较复杂,对可扩展性有一定的要求。
3.2 总体架构
1)系统采用三层架构。外层采用 Nginx 服务器做反向代理和负载均衡。将客户的请求发送给内部各个子系统。
2)中间层分为学生子系统、课程子系统和权限子系统,接受 Nginx 发来的请求并对数据库进行查询或写入信息。
3)数据库采用两台 MySQL 服务器,一台主服务器,一台备用服务器,主备数据同步。正常情况下,主服务器对外提供数据写入和读取服务,备服务器不对外提供服务;主服务器宕机的情况下,备服务器对外提供数据读写的服务。
4. 详细设计
4.1 核心功能
4.1.1 学生信息登记流程。学生头一次登录管理系统, 创建账号,完善自己的信息, 包括个人信息,班级信息,专业信息等。这个流程是由学生子系统来负责,信息被保存到数据库中。
4.1.2 选课流程。学生登录系统开始选择新学期的课程, 这个流程是由课程子系统来处理,信息被更新到数据库中。
4.1.3 赋予权限,学生有权利更新自己的自然信息,比如姓名、性别, 专业等, 但奖励或者考试信息是由老师来填写的, 学生只能浏览,这个过程是在权限子系统中完成的。
4.2 关键设计
1)各个子系统独立部署,相互之间可以调用接口,也可以接受来自 Nginx 服务器的请求。
2)数据存储可靠性
数据存储在 MySQL 中,有一主一备两台 MySQL 服务器,MySQL 主备服务器之间定时复制数据以保证数据一致性。
4.3 设计规范
1)各个业务子系统采用 Spring Boot + Mybatis
2)MySQL 使用 Innodb 存储引擎
3) 系统间数据传输采用 Json 格式
5. 质量设计
5.1 可测试性
利用 Junit 和 mockito 测试框架, 来完成单元和继承测试。
5.2 可维护性
利用 CI/CD 工具实现开发部署的自动化。
5.3 可观测性
系统级别监控:监控各服务器健康状态,安全补丁,性能状态等等, 并及时报警。
业务级别监控:监控各用户操作日志, 保留存档,以备日后查询或者恢复使用。
评论