外包学生管理系统架构设计
1. 前言
本文是针对外包学生管理系统详细架构设计文档,用于指导系统的后续的开发、测试和运维。
2. 业务背景
随着学校的规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。不仅花费大量的教师资源,处理效率也十分低下。为提高学生管理的管理水平,优化资源,尽可能降低管理成本成为学生管理的新课题,学生管理系统是从学生管理现状出发,根据学生管理的新要求进行开发设计的,它需要解决学生信息管理数据信息量大修改不方便,对一系列数据进行分析时花费时间长等问题,帮助学生管理人员有效管理学生信息。因此学生信息管理系统可以通过系统规范化地管理、科学性统计和快速查询、修改、增加、删除等,提高信息的准确度以及日常管理的工作效率。
本系统主要是应用于学生各类信息的管理,总体任务是实现学生信息关系的系统化、规范化、自动化,其主要任务是统计学生各类信息进行日常管理,如查询、修改、增加、删除、以及学生选课、成绩的查询等功能设计的管理系统。
3. 约束和限制
必须在 2023.1.30 号完成
成本不能超过 50 万
数据库采用 MySql
学生信息要脱敏
4. 总体架构
学生管理系统总的架构图如下:
4.1 架构分析
面向复杂度的设计思路如下:
面向复杂度的架构分析(架构三原则):
合适原则: ① 符合团队技术水平和积累; ② 开发成本低; ③ 系统运维成本低。
简单原则: ① 不进行系统拆分,部署维护简单; ② 没用微服务,无需微服务基础设施。
演化原则: ① 一次性交付,无需考虑太多后期演化; ② 学校的学生数量不会发生很大变化,系统架构够用多年。
4.1.1 高可用
学生管理系统数据最为重要,所以针对数据库做了主备模式,一方面是做容灾处理,另一方面也可演进为读写分离的模式,增强系统的整体性能。
4.1.2 高性能
学生一般都集中在早上 7-9 以及中午 12-13 点进行查询课程等操作,所以在集中的时间段需要保证学生管理系统的高性能。
4.1.3 扩展性
学生人数每年一般变化不大,比较稳定。所以不需要考虑扩展性。
4.1.4 成本和安全
成本总体上不能超过 100 万,同时要保证学生的信息要脱敏不能向外泄露。
4.2 总体架构
5. 详细设计
详细架构的设计思路如下(以消息队列系统设计思路为例):
5.1 核心功能
5.1.1 Relation 和 Role 设计
【客户端 Role 设计】
1. 客户端采用 Java 语言开发,基于 Netty 实现与服务端交互。
【客户端和服务器的 Relation 设计】
1. 客户端与服务端采用 TCP 连接,采用 JSON 传递数据。
2. 为了兼容非 Java 系统,服务端同时提供 HTTP 接口。
【服务器 Role 设计】
1. 服务器基于 Netty 开发,采用 Reactor 网络模型。
2. 主服务器提供消息读写操作,备用服务器只在主服务器挂掉时切换备用。
【MySQL 的 Role 和 Relation 设计】
1. 采用 MySQL 主从同步。
2.老师和同学账户信息一张数据表,课程安排一张表,权限资源管理一张表,学生的考试成绩一张表。
3. 直接用 MySQL 的主从复制来实现数据复制。
5.1.2 Rule 设计
* 查询账户的基本信息
* 查询课程
* 查询考试成绩信息
5.2 关键设计
5.2.1 子系统拆分设计
根据业务功能设计好大概需要实现的路由及方法。业务主要为数据逻辑加控制逻辑的呈现,使用框架基础的 mvc 架构即可,数据逻辑中做好 model 的设计。每个子系统做好服务自述,引入 swagger 生成对应的接口文档并放入 mock 数据。以便于其他子系统的调试与调用。
5.2.2 高性能的设计
做好常用查询设计的索引设计,提供数据库的访问性能。经常访问的数据,可写入到文件中,当作文件缓存,具体的缓存淘汰机制可暂且不考虑,如果后续发现缓存文件过大,可引入 LRU 做混存淘汰。静态资源存入 oss 中,cdn 回源到 oss 中,网站服务访问 cdn,以提高访问性能。如果 cdn 出现问题,概率很小,访问 oss 对应的资源即可。
5.2.3 数据存储可靠性
采用主备的数据库架构,可以在很大程度上保证数据的可靠性。在主备节点复制中,主节点发生宕机,并出现数据损坏的情况,可不做考虑,概率极小,而且实际的业务操作,会有纸质的逻辑可以对照。
5.3 设计规范
采用 spring boot 开发框架。
采用 http1.1 的通讯协议。
系统间的通讯数据格式采用 json。
mysql 采用 InnoDB 的存储引擎。
6. 质量设计
可测试性:每个子系统在具体的研发设计阶段,设计好细节功能的路由描述,以及单个服务的自述,便于进行对应的测试用例书写。
伸缩性:每个子系统均拆开,部署在不同的服务器上。后续如果有性能要求,对应的节点增加机器即可,数据库可采用一主多从等方式。
易用性:友好的操作界面,可读的操作手册。
协作性:各个模块可同时开工,子系统对接的部分做好 mock 数据。
安全性:核心数据脱敏,业务逻辑做好防注入等安全校验。
7. 演进规划
完成学生管理系统的服务基本功能。
给管理系统提供服务以及服务器的可观测性的解决方案。
评论