架构训练营第 1 期 模块三作业
写出外包学生管理系统的架构文档
【作业要求】
1. 基于模块 1 第 5 课 P15 页的外包学生管理系统备选架构 1(见下 1 页),写出完整的架构设计文档;2. 注意不是备选架构文档,而是最终落地的详细架构设计文档;3. 无需考虑数据库表设计,因为表设计是方案设计阶段做的,不是架构设计阶段做的;
【提示】
架构设计文档是完整的文档(Word 或者语雀文档之类的都可以),而不是 PPT;
架构文档涵盖的内容请参考模块 3 第 4 课,细化架构设计参考模块 3 第 6 课;
外包学生管理系统的业务请参考模块 1 第 5 课的课件;
架构文档模板可以参考:架构实战营详细架构设计文档模板
前言
本文是 X 大学学生管理系统的详细架构设计文档,用于指导该系统后续的开发、测试和运维
1. 业务背景
随着学校的规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。不仅花费大量的教师资源,处理效率也十分低下。
为提高学生管理的管理水平,优化资源,尽可能降低管理成本成为学生管理的新课题,学生管理系统是从学生管理现状出发,根据学生管理的新要求进行开发设计的,它需要解决学生信息管理数据信息量大修改不方便,对一系列数据进行分析时花费时间长等问题,帮助学生管理人员有效管理学生信息。
因此学生信息管理系统可以通过系统规范化地管理、科学性统计和快速查询、修改、增加、删除等,提高信息的准确度以及日常管理的工作效率。
本系统主要是应用于学生各类信息的管理,总体任务是实现学生信息关系的系统化、规范化、自动化,其主要任务是统计学生各类信息进行日常管理,如查询、修改、增加、删除、以及学生选课、成绩的查询等功能设计的管理系统。
2. 约束和限制
必须在 2021 年 12 月 31 日前完成项目交付
开发预算不得超过 50 万
硬件成本不得超过 5 万/月
必须使用 Java 作为编程语言(校方后期维护人员只懂 Java)
3. 总体架构
3.1 架构分析
3.1.1 高性能
学校师生人数总计约 5 万人,性能要求并不高。
3.1.2 高可用
学校的主要业务如教学并不依赖此系统,故计算的可用性要求亦并不高。不过需要注意的是数据的可用性有一定要求,因丢失数据需要大量时间来进行人工补录,若出现数据丢失需确保丢失量可控且相对较小。
3.1.3 可扩展
该系统的功能需求比较复杂,可扩展是一个需要重视的复杂度。
3.1.4 成本与安全
本系统为单校系统,不涉及金融,且学生信息多为已公开信息,故成本与安全要求不高。
3.2 总体架构设计
Nginx 承接请求并分发至相应的子系统
每个子系统独立部署于不同的服务器
所有的子系统的数据库读写操作均指向主 MySQL
MySQL 开启实时备份
4. 详细设计
4.1 核心功能
数据的增删改查
用户登陆时将通过学生子系统获得 Token 用以鉴权,之后的所有请求将携带此 Token
当请求设计到对于某一项数据的增删改查时,Token 将被用于向权限子系统进行鉴权来判断是否可以进行此项操作
当数据被增删改之后,主 MySQL 将同步变动至备 MySQL
统计数据的生成
每个子系统都有自己的定时任务 CronJob 定期计算并更新统计数据以供有权限的用户查阅。
4.2 关键设计
数据储存的可靠性
使用一主一备两台 MySQL 服务器,将数据变动从主 MySQL 及时备份到备 MySQL 可以保证当主 MySQL 意外发生时丢失的数据仅限于主备间复制延迟过程中产生的变动。
请求流量的分发与控制
Nginx 根据 URL 来决定将请求反向代理至某个子系统
后期当某个子系统有多台主机时 Nginx 可以做负载均衡
当某个子系统出现过载等故障时 Nginx 可以短路来实现服务降级
4.3 设计规范
子系统使用 Spring Boot 开发
MySQL 使用 InnoDB 储存引擎
各个子系统之间的调用使用 HTTPS 协议以及基于 JSON 的 API 并同样经过 Nginx 调度
5. 质量设计
使用框架自带的 Spring Boot Actuator 来实现可测试性、可维护性及可观测性
6. 演进规划
6.1 学生管理系统一期
完成学生子系统,实现学生管理功能
完成权限子系统,实现权限管理功能
6.2 学生管理系统二期
完成课程子系统,实现课程管理和考试管理功能
完成观测监控模块的搭建
版权声明: 本文为 InfoQ 作者【高远】的原创文章。
原文链接:【http://xie.infoq.cn/article/13d6eaad0593930217ff1e5e8】。未经作者许可,禁止转载。
评论