写点什么

「架构实战营」模块三《如何保证设计出合理的架构》作业

  • 2021 年 12 月 30 日
  • 本文字数:2415 字

    阅读完需:约 8 分钟

写出外包学生管理系统的架构文档

【作业要求】

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. 演进规划

第一期:第一期完成学生管理系统的开发、测试、部署上线,包含学生、课程、权限子系统。

第二期:因为是外包系统,暂时不考虑系统演进,后续如果业务方还有新的业务场景再考虑。

用户头像

还未添加个人签名 2018.11.12 加入

还未添加个人简介

评论

发布
暂无评论
「架构实战营」模块三《如何保证设计出合理的架构》作业