写点什么

架构实战营第三次作业

用户头像
Geek_d18264
关注
发布于: 2 小时前

前言

本文是外包学生管理系统详细架构设计文档,用于指导外包学生管理系统后续的开发、测试和运维。

词汇表

Nginx:高性能的 HTTP 和反向代理 web 服务器

MySQL:关系型数据库管理系统

Spring Boot:后端 Java 开发框架

1. 业务背景

随着学校规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大,已存在几个明显的系统问题:

1)成本问题:需要花费大量的教师资源,成本高;

2)效率问题:需要花费大量的时间和精力,效率低下;

3)质量问题:维护大量学生信息很容易出错,质量无法保证。

为了提高学生管理的管理水平、降低管理成本、提高信息准确度和日常管理的工作效率,我们需要开发一套学生管理系统,从学生管理的新要求进行开发设计,提供系统规范化的管理平台。

2. 约束和限制

1. 三个月内完成系统交付及相关培训;

2. 成本控制在 30w 以内;

3.可扩展:业务需求比较复杂,需要划分模块开发。

4.数据高可用:数据要保证完整性,不能丢失。

3. 总体架构

3.1 架构分析

3.1.1 高性能

对于外包学生管理系统来说,一个学校最多几万人,性能要求并不高;对于抢课来说,1 门课 100 个人或 1000 个人抢,对系统处理性能要求也不高。

3.1.2 高可用

学校的教学和管理并不完全依赖于学生管理系统,学生管理系统挂掉对学校影响也不大;但学生信息是由外部录入或用户注册得到的,对于信息丢失必须保证风险降到最低。

3.1.3 可扩展

需求比较复杂,需要按功能拆出各个子系统进行开发维护,还需要考虑扩展问题。

3.1.3 成本、安全

面对单个学校,成本问题可不作为限制因素;安全方面,学生管理系统不涉及金融及资金,个人隐私基本是公开信息,也可不做考虑。

综合来看,外包学生管理系统需要做到数据高可用和可扩展。

3.2 总体架构


1)对外采用 Nginx 负责外部请求接入,负责消息的分发。

2)系统业务拆分成学生子系统、课程子系统和权限子系统,各子系统功能的修改不影响其他子系统的正常运行。

3)采用一台主 MySQL 和一台备 MySQL,实现主备数据复制,保证数据同步。

4. 详细设计

4.1 核心功能

挑选了学生选课和信息查询两个核心功能,其流程图如下图所示:


4.2 关键设计

1)数据存储高可用

数据信息存储在 MySQL 中,有一主一备两台 MySQL 服务器,MySQL 服务器之间复制消息以保证消息存储高可用。如果主备间出现复制延迟,恰好此时 MySQL 主服务器宕机导致数据无法恢复,则部分消息会永久丢失,这种情况不做针对性设计,DBA 需要对主备间的复制延迟进行监控,当复制延迟超过 30 秒的时候需要及时告警并进行处理。

2)可扩展

功能拆分成各个子系统进行开发维护,互相独立,一个子系统需求变化不影响其他子系统的运行,如果需要再增加子系统,也不影响原有系统的运行。

4.3 设计规范

1)各子系统采用 Spring Boot 开发

2)MySQL 使用 Innodb 存储引擎

3)客户端与服务端采用 JSON 传递数据

5. 质量设计

5.1 可测试性:提供白盒或黑盒等测试手段,方便测试人员验证功能

5.2 可维护性:增加常见问题或故障自动处理措施,或提供人工处理方式

5.3 可观测性:提供日志查询入口,方便问题排查

5.4 成本:控制在 30w 以内

6. 演进规划

6.1 外包学生管理系统一期

实现学生子系统、课程子系统和权限子系统

6.2 外包学生管理系统二期

实现管理后台、日志查询等功能,同时交付培训视频


日常祝福环节:祝助教老师 对所有的烦恼说拜拜,所有的快乐说嗨嗨

用户头像

Geek_d18264

关注

还未添加个人签名 2019.04.16 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营第三次作业