「架构实战营」模块三《如何保证设计出合理的架构》作业
写出外包学生管理系统的架构文档
【作业要求】
1. 基于模块 1 第 5 课 P15 页的外包学生管理系统备选架构 1,写出完整的架构设计文档;
2. 注意不是备选架构文档,而是最终落地的详细架构设计文档;
3. 无需考虑数据库表设计,因为表设计是方案设计阶段做的,不是架构设计阶段做的;
【提示】
1. 架构设计文档是完整的文档(Word 或者语雀文档之类的都可以),而不是 PPT;
2. 架构文档涵盖的内容请参考模块 3 第 4 课,细化架构设计参考模块 3 第 6 课;
3. 外包学生管理系统的业务请参考模块 1 第 5 课的课件;
4. 架构文档模板可以参考:架构实战营详细架构设计文档模板
前言
本文是外包学生管理系统详细架构设计文档,用于指导外包学生管理系统后续的开发、测试和运维。
词汇表
【Nginx】Nginx 是异步框架的网页服务器,也可以用作反向代理、负载平衡器和 HTTP 缓存。
【MySQL】MySQL 是一个开放源码的关系数据库管理系统。
【Spring Security】Spring Security 是一个功能强大且可高度自定义的身份验证和访问控制框架。
【Spring】Spring 框架是 Java 平台的一个开源的全栈(full-stack)应用程序框架和控制反转容器实现。
【Spring Boot】Spring Boot 是 Pivotal 团队在 Spring 的基础上提供的一套全新的开源框架,其目的是为了简化 Spring 应用的搭建和开发过程。
【MyBatis】MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
【Dubbo】Dubbo 是一款高性能、轻量级的开源 Java RPC 框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
1. 业务背景
随着学校的规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。不仅花费大量的教师资源,处理效率也十分低下。
为提高学生管理的管理水平,优化资源,尽可能降低管理成本成为学生管理的新课题。
基于以上背景,我们需要开发学生管理系统,通过系统规范化地管理、科学性统计和快速查询、修改、增加、删除等,提高信息的准确度以及日常管理的工作效率。
本系统主要是应用于学生各类信息的管理,总体任务是实现学生信息关系的系统化、规范化、自动化,其主要任务是统计学生各类信息进行日常管理,如查询、修改、增加、删除、以及学生选课、成绩的查询等功能设计的管理系统。
2. 约束和限制
项目运维成本不能太高,不超过 50w 一年。
项目时间不能太长,2-3 个月完成。
存储高可用,学生数据不能全部丢失。
3. 总体架构
3.1 架构分析
3.1.1 可拓展
系统拆分成学生、课程、权限三个子系统,降低了单个子系统的内部复杂度。
3.1.2 高性能
由于是外包学生管理系统,且系统只用于单所学校,整个学校人数大概就在 5w 人左右,并发也不高,对系统性能要求不高,系统无需满足高性能要求。
3.1.3 高可用
学生管理系统数据不能完全丢失。如果数据全部丢失,所有学生的课程成绩将无法找到;允许部分丢失,丢失的部分可以等系统恢复后通过手工录入的方式完善。需要保证单台数据存储服务器宕机后,能通过备份服务器数据进行恢复。
3.1.4 低成本、安全性
由于是外包学生管理系统,整体研发和运维成本不能太高,开发周期不能太长,部署架构需要简单,每年服务器的维护成本不能太高;
学生管理系统不涉及学生敏感信息,信息无需脱敏处理,安全性不用考虑,只需要做好权限控制即可。
3.2 总体架构
系统架构图
架构主要分为三个层级:网关层、服务层、数据存储层。
网关层:网关层通过一台 Nginx 服务器做请求转发,把不同的用户请求转发到不同的服务器系统。
服务层:服务层拆分成三个子系统,学生子系统、课程子系统、权限子系统。三个子系统分开各部署一台机器,对外提供各自系统的服务。
数据存储层:数据存储层采用 MySQL 主备架构,部署两台 MySQL 服务器,一台用于做主库(提供读写服务),另一台用于做备库(不提供读写服务,只用于数据备份)。
4. 详细设计
4.1 核心功能
外包学生管理系统功能模块划分
系统核心功能主要包含:学生管理、课程管理、考试管理、权限管理四大功能模块。
学生管理主要包含:
系统登录:此功能面向所有用户角色,根据用户角色权限不一,功能权限也不一样。
信息查询:此项功能包含课程查询(含课程体系、课时安排、课表、教师、教材等)、成绩查询。
课程管理主要包含:课程录入、选课功能、排课功能、教材选择。
考试管理主要包含:发起考试、评分判定。
权限管理主要包含:权限修改、权限查询。
4.1.1 成绩查询流程
成绩查询流程图
学生成绩查询需要先调用【学生子系统】登录。
登陆成功后需要调用【权限子系统】校验用户是否有查看成绩权限。
权限校验成功后,调用【课程子系统】查询用户课程成绩。
4.1.2 选课功能流程
选课功能流程图
学生选课功能需要先调用【学生子系统】登录。
登陆成功后需要调用【权限子系统】校验用户是否有选课权限。
权限校验成功后,调用【课程子系统】查询用户可以选择的课程信息。
调用【课程子系统】提交选择课程。
4.2 关键设计
4.2.1 高可用
系统数据存储在 MySQL 中,有一主一备两台 MySQL 服务器,保证了学生和课程数据的存储高可用。
如果主备间出现复制延迟,恰好此时 MySQL 主服务器宕机导致数据无法恢复,则部分消息会永久丢失,这种情况通过手工录入的方式完善丢失数据。
4.2.2 权限管理
权限管理采用 Spring Security 框架实现。
4.3 设计规范
服务端使用 Java 语言开发,使用 Spring Boot + Spring + MyBatis + Dubbo 框架。
MySQL 使用 InnoDB 存储引擎。
5. 质量设计
成本:系统架构比较简单,实现起来复杂度不高,整体研发、测试、运维成本较低。
安全性:采用 Spring Security 框架实现的权限管理,对于不同角色用户控制了不同权限。
可维护性:系统拆分成了三个子系统,如果业务方需要添加新功能,方便拓展。
6. 演进规划
第一期:第一期完成学生管理系统的开发、测试、部署上线,包含学生、课程、权限子系统。
第二期:因为是外包系统,暂时不考虑系统演进,后续如果业务方还有新的业务场景再考虑。
评论