模块三课后作业 - 详细架构设计文档 - 外包学生管理系统
前言
本文对学生管理系统的系统架构进行总体描述,为后续研发人员开发系统、测试人员测试系统、实施人员部署系统等工作提供依据和指导。
词汇表
Nginx : 高性能的 HTTP 和反向代理 web 服务器
MySQL : 常用流行的开源关系型数据库之一
MyBatis : 较为流行数据持久层框架
SpringBoot : 约定大于配置的 spring 新生代软件框架,便于快速开发。
SpringCloud:基于 springboot 的较为成熟的开源微服务解决方案框架
1. 业务背景
随着学校的规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。不仅花费大量的教师资源,处理效率也十分低下。
为提高学生管理的管理水平,优化资源,尽可能降低管理成本成为学生管理的新课题,学生管理系统是从学生管理现状出发,根据学生管理的新要求进行开发设计的,它需要解决学生信息管理数据信息量大修改不方便,对一系列数据进行分析时花费时间长等问题,帮助学生管理人员有效管理学生信息。
因此学生信息管理系统可以通过系统规范化地管理、科学性统计和快速查询、修改、增加、删除等,提高信息的准确度以及日常管理的工作效率。
本系统主要是应用于学生各类信息的管理,总体任务是实现学生信息关系的系统化、规范化、自动化,其主要任务是统计学生各类信息进行日常管理,如查询、修改、增加、删除、以及学生选课、成绩的查询等功能设计的管理系统。
2. 约束和限制
学校总人数在 10000 人左右,最大同时在线人数大概在 2000 人
数据库采用 MySQL 即可
项目在 3 个月内完成,在 2022 年新学期开始之前上线投入使用
项目成本在 80W 以内
学生端和教师端都要易于使用
部署在学校内网环境
3. 总体架构
3.1 架构分析
3.1.1 高性能
优先采用任务分解方案,将业务拆分成不同的业务子系统实现,不同业务子系统部署到不同的业务服务器上,通过 Nginx 来进行反向代理。由于总的学生人数只有 1 万人,并且最大同时在线人数为 2000 人。所以使用 Nginx 足够支持请求负载均衡。
3.1.2 高可用
由于是一所学校的内网系统,所以即使短时间出现宕机、服务中断现象也不会造成太大的影响。但是,学生数据算是比较基础的数据,所以要做好数据的备份。因而需要 MySQL 从库来进行数据备份。
3.1.3 可扩展
随着学生数量增加,后续可能会涉及到对相应的子系统做集群部署。如果有其他的功能模块拓展,也可以做成相应的子系统,集成进来。
综合来看,学生管理系统,需要保持一定的数据高可用性,具备其他业务拓展的能力。
3.2 总体架构
将系统分为学生子系统,课程子系统,权限子系统等 3 个系统,通过 Nginx 来进行路由和转发
数据库采用 MySQL 数据库,分为主机和备机,主备数据通过 binlog 复制,一般情况下,备用机只是用来备份数据,在主机不工作时才切换到备机
通过 Nginx 对静态资源进行缓存
4. 详细设计
4.1 核心功能
业务机构图大致如下:
4.1.1 管理员分配权限
4.1.2 教师录入学生信息
4.1.3 学生选课
4.2 关键设计
在并发量上,单台 Nginx 能支持的最大并发数在 5 万左右,因此完全能够作为代理服务器来负责请求的转发和负载均衡。
子系统直接的通信前期通过 httpclient 来进行调用即可,例如登录学生子系统和课程子系统都需要相应的权限,需要通过接口的方式从权限子系统中获取登录用户对应的角色和权限。
因为后期可能还有一些其他校园业务的拓展,以及为了某些功能出问题的时候不影响其他功能的使用,比如选课选不了但是学生信息管理还需要能够使用。所以才采用拆分子系统的方式,将该系统拆分为 3 个子系统。
因为是校园局域网内的系统,所以在信息安全方面不需要考虑太多,采用 http 协议即可,如果后期需要兼容外网访问以及等保评估等要求,再考虑增加域名以及升级为 https 等需求。
对一些可能出现千万级别以上的表,比如学生的考试做题明细,几千*若干次考试,由于 MySQL 自身数据局限制,单表上千万级别查询会缓慢,因此数据字段考虑加索引以及分表。此外,对于已经毕业一定年限的学生历史数据可以进行归档处理。
4.3 设计规范
Nginx 通过解析请求 URL,代理至不同的服务子系统。
各个子系统对外提供基于 http 协议的 API 接口,不建议使用 restful 形式中的 DELETE 和 PUT 类型接口。
各子系统使用 Spring Boot + Mybatis 开发。
MySQL 使用 Innodb 存储引擎,使用 binlog 进行数据备份
5. 质量设计
可测试性
采用 swagger 注解的方式来获取 API 说明,交互接口有单元测试
可维护性
系统记录了用户登录日志,关键操作日志,在线用户实时查询等功能
可观测性
系统接入了类似 zipkin 等监控插件,完成对服务器硬件性能的监测和调用链路的监控
成本
部署子系统的应用服务器(子系统可以独立部署或者统一部署在同一台性能较好的服务器上),数据库服务器 2 台(为了在宕机时能切换备用数据库,所以最好和主库分开)
安全
因为是在校园内网,所以采用 http 协议即可,服务器的不提供外网访问
6. 演进规划
6.1 一期
完成权限子系统,学生子系统中的学生信息录入和管理功能,选课系统中的选课功能
6.2 二期
完成学生子系统和选课功能中一期之外的其他功能,比如成绩查询,报表功能等等
6.3 三期
将系统改造为使用 springcloud 的微服务架构,增加网关和 springsecurity 权限框架等,
将子系统之间的调用由 httpclient 接口方式改为 微服务之间的调用
版权声明: 本文为 InfoQ 作者【渐行渐远】的原创文章。
原文链接:【http://xie.infoq.cn/article/840242322c02f02ca35451a7e】。文章转载请联系作者。
评论