架构实战营 - 模块三作业
前言
本文是外包学生管理系统详细架构设计文档,用于指导后续的开发、测试和运维
词汇表
DNS:域名解析服务器
Nginx: 高性能的 HTTP 和反向代理 web 服务器
Java:一门面向对象的编程语言
MySQL:关系型数据库管理系统
1. 业务背景
随着学校的规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。不仅花费大量的教师资源,人工管理方式处理效率也十分低下,需要优化提高学生管理水平优化资源。
从 0 到 1 的构建业务系统。
为提高学生管理的管理水平,优化资源,尽可能降低管理成本成为学生管理的新课题,学生管理系统是从学生管理现状出发,根据学生管理的新要求进行开发设计的,它需要解决学生信息管理数据信息量大修改不方便,对一系列数据进行分析时花费时间长等问题,帮助学生管理人员有效管理学生信息。
因此学生信息管理系统可以通过系统规范化地管理、科学性统计和快速查询、修改、增加、删除等,提高信息的准确度以及日常管理的工作效率。
本系统主要是应用于学生各类信息的管理,总体任务是实现学生信息关系的系统化、规范化、自动化,其主要任务是统计学生各类信息进行日常管理,如查询、修改、增加、删除、以及学生选课、成绩的查询等功能设计的管理系统。
2. 约束和限制
1.使用高校已有 DNS 服务器或 Nginx 服务器。
2.成本需要用到 1 台服务器作为业务服务器,2 台数据库做主备。
3.数据库采用 MySQL。
4.编程语言采用 Java。
3. 总体架构
3.1 架构分析
3.1.1 高性能
对于学校的学生人数是有人数上限,服务器性能足够处理,不需要过多考虑高性能设计。
3.1.2 高可用
对于学校的教学不完全依赖学生管理系统,服务器宕机影响不大;对于学生管理系统来说,如果学生相关数据丢失,导致需要人工重新录入是浪费资源和时间成本的,数据需要每日定时备份。
3.1.2 可扩展
系统可扩展相对比较复杂度,系统不容易理解。
学生子系统:学生管理
课程子系统:课程管理、考试管理
权限子系统:权限管理
综合来看,学生管理需要可扩展,业务需求比较复杂,多人协同开发需要对模块进行划分学生管理、课程管理、考试管理和权限管理;学生管理需要高可用性,包括写入、存储、读取都需要保证高可用性。
3.2 总体架构
1)使用 nginx 做反向代理,统一对外出口,对内根据业务类型分配请求。
2)根据学生管理系统业务类型分成学习子系统、课程子系统和权限子系统。
3)数据库采用 MySQL,数据架构采用的主备架构,主备数据复制。
4)正常情况下,主服务器对外提供消息写入和消息读取服务,备服务器不对外提供服务。
5)主服务器宕机的情况下,备服务器对外提供消息读取的服务。
4. 详细设计
4.1 核心功能
1)学生子系统
1 系统登录流程
2 账号分配流程
3 账号绑定流程
4 组织管理层级流程
5 信息查询流程
2) 课程子系统
1 课程录入流程
2 选课功能流程
3 排课功能流程
4 评分判定流程
3)权限子系统
1 注册审核流程
2 教师上传考题流程
4.2 关键设计
1)存储高可用
在 MySQL 中,有一主一备两台 MySQL 服务器,MySQL 服务器之间复制数据以保证数据存储高可用。如果主备间出现复制延迟,恰好此时 MySQL 主服务器宕机导致数据无法恢复,则部分消息会永久丢失,这种情况不做针对性设计。
2)可扩展
业务复杂度较高,需要多人协同,需要对相应模块进行划分,保证业务子系统的隔离。
3)安全
面向单个学校,安全不需要过多考虑。
4.3 设计规范
1)业务服务器使用 Spring Boot + Netty 开发
2)MySQL 使用 Innodb 存储引擎
3)交互协议采用 HTTP
4)数据格式采用 JSON
5. 质量设计
5.1 运维管理后台。
5.2 成本。
5.3 日志,命令行测试不需要。
5.4 监控系统不需要。
6. 演进规划
6.1 一次性交付,无需考虑太多后期演化;
6.2 学校的学生数量不会发生很大变化,系统架构够用多年。
版权声明: 本文为 InfoQ 作者【随风King】的原创文章。
原文链接:【http://xie.infoq.cn/article/93370c9010b395ef619ed416f】。未经作者许可,禁止转载。
评论