架构实战营 - 写出外包学生管理系统的架构文档
前言
本文是外包学生管理系统的详细架构设计文档,用于指导外包学生管理系统后续的开发、测试和运维。
词汇表
Nginx:一个高性能的 HTTP 和反向代理的 web 服务器
MySQL:一个关系型数据库管理系统
1. 业务背景
随着学校的规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。不仅花费大量的教师资源,处理效率也十分低下。
为提高学生管理的管理水平,优化资源,尽可能降低管理成本。需要进行学生管理系统的设计开发工作。
学生管理系统从学生管理现状出发,根据学生管理的新需求进行设计,它主要解决学生管理数据信息量大、修改不方便,对一系列数据进行分析花费时间长等问题。
学生管理系统可以通过高效率、规范化的学生信息管理,帮助学生管理人员减轻工作负担,避免人为操作导致的错误和不规范行为,进而提高信息的准确度和日常管理的工作效率。
2. 约束和限制
1. 必须在 2023.02.05 号之前完成。下个学期开学前,学校可以使用该系统。
2. 成本不能超过 10 万元
3. 能够支撑管理 10 万个学生
4. 需要支持公网访问
5. 数据不允许大面积丢失
6. 系统需要有安全保障,防止如黑客入侵造成的隐私信息泄露
3. 总体架构
3.1 架构分析
3.1.1 高可用
由于学生管理系统大部分功能对于用户来说没有功能上的可用性要求,因此,对于计算高可用这部分没有要求。
针对存储高可用方面,由于数据可以通过管理员补录的方式找回对应数据,但是如果大规模丢失数据会造成管理员工作激增,所以系统不允许大规模丢失数据。因此在存储高可用方面只需要保证不要大规模丢失数据即可。
3.1.2 可扩展
由于学生管理系统的需求比较明确且固定,所以针对可扩展,本系统开发过程中没有过多要求。
3.1.3 高性能
由于本系统使用人数不多,整体的并发也不会很高。因此,针对高性能这部分,本系统也不做过多要求。
3.1.4 成本
由于本系统是个外包项目,整体的预算有限,这部分需要重点关注。
3.1.4 安全
由于学生的成绩、基本信息等涉及学生的隐私,因此需要进行业务安全的保障。
3.2 总体架构
1. 整个系统由 nginx 作为反向代理服务器,根据业务的 path 不同将流量分流到不同的子系统中。
2. 整体服务分为学生子系统、课程子系统、权限子系统三个子系统。
(1) 学生子系统:主要是负责学生的学籍查询、基本信息管理、成绩查询等功能。
(2) 课程子系统:主要负责课程录入、选课、排课、教材选择以及考试管理等功能。
(3) 权限子系统:主要负责统一身份认证、账号管理、角色管理、每个角色的权限分配。
4. 详细设计
4.1 核心功能
[必选,描述核心场景或者流程的实现机制,对应 4R 架构中的 Rule,每个核心场景一个小节]
[样例:
4.1.1 消息发送流程
4.1.2 消息消费流程
]
[技巧:使用系统序列图来描述 Rule,跟项目开发中写设计文档一样的写法]
4.2 关键设计
4.2.1 存储高可用
数据存储在 MySQL 中,采用主备的架构形式,提升存储高可用性。
4.2.2 安全
考虑在系统中添加防火墙,以及打必要的系统补丁,防止由于业务漏洞或系统漏洞,造成的学生隐私信息泄露。
4.3 设计规范
前后端分离,前端用 React 框架,后端用 SpringBoot 框架
MySQL 使用 Innodb 存储引擎,主备架构部署
编程语言使用 Java,使用 jdk1.8
5. 质量设计
可测试性:可以通过修改数据库内容,模拟极端 case;数据库主备切换可以进行演练
可维护性:数据库主备可以正常切换
可观测性:系统需要必要的审计日志,同时需要添加监控打点,并且配置相关的报警
成本:控制在 10 万以内
6. 演进规划
6.1 第一期规划:
完成权限子系统部分(交付管理员使用,让管理员可以提前录入学生数据)
6.1 第二期规划:
完成学生子系统以及课程子系统
评论