写点什么

架构训练营 - 模块三作业

作者:伊静西蒙
  • 2021 年 12 月 30 日
  • 本文字数:3030 字

    阅读完需:约 10 分钟

架构训练营 - 模块三作业

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

【作业要求】

1. 基于模块 1 第 5 课 P15 页的外包学生管理系统备选架构 1(见下 1 页),写出完整的架构设计文档;

2. 注意不是备选架构文档,而是最终落地的详细架构设计文档;

3. 无需考虑数据库表设计,因为表设计是方案设计阶段做的,不是架构设计阶段做的;

【提示】

1. 架构设计文档是完整的文档(Word 或者语雀文档之类的都可以),而不是 PPT;

2. 架构文档涵盖的内容请参考模块 3 第 4 课,细化架构设计参考模块 3 第 6 课;

3. 外包学生管理系统的业务请参考模块 1 第 5 课的课件;

4. 架构文档模板可以参考:架构实战营详细架构设计文档模板

详细架构设计文档

前言

本次开发需求是实现一套外包学生管理系统,本文档在基于已确定的架构选型下,进行详细架构的描述和说明,用于指导后续架构设计的落地实现。

词汇表

Nginx:是一款自由的、开源的、高性能的 HTTP 服务器和反向代理服务器;同时也是一个 IMAP、POP3、SMTP 代理服务器;Nginx 可以作为一个 HTTP 服务器进行网站的发布处理,另外 Nginx 可以作为反向代理进行负载均衡的实现。

Redis:是最受欢迎的 NoSQL 数据库之一,它是一个 key-value 存储系统,及内存高速缓存数据库。

MySQL:是一个数据库管理系统,也是一个关系数据库。

MongoDB:是一个基于分布式文件存储、面向文档的 NoSQL 数据库,由 C++编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系型数据库的,它支持的数据结构非常松散,是一种类似 json 的 BSON 格式。

负载均衡:是高可用网络基础架构的关键组件,通常用于将工作负载分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性

主备机制:一种数据同步备份机制,通常主机支持读写操作,备机只进行读操作,且在主机发生故障时,备机可以切换为主机,实现主机的读写操作功能

1. 业务背景

随着学校的规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。不仅花费大量的教师资源,处理效率也十分低下。在此背景下,为了提高学生管理的管理水平,优化资源,尽可能降低管理成本成为学生管理的新课题,因此我们针对性的开发设计出一套学生管理系统,该系统主要实现如下目标:

1)从学生管理现状和新要求出发,解决学生信息管理数据信息量大修改不方便,对一系列数据进行分析时花费时间长等问题,帮助学生管理人员有效管理学生信息。

2)可以通过系统规范化地管理、科学性统计和快速查询、修改、增加、删除等,提高信息的准确度以及日常管理的工作效率。

3)总体任务是实现学生信息关系的系统化、规范化、自动化,其主要任务是统计学生各类信息进行日常管理,如查询、修改、增加、删除、以及学生选课、成绩的查询等功能设计的管理系统。

2. 约束和限制

1)开发语言选择 java

2) 成本限制在 XXX 元以内

3)开发周期在 XX 年 XX 月 XX 日完成发布上线

4)数据库限制使用 MySQL

5)开发方式采用敏捷开发方式推进

6)系统数据不能丢失

3. 总体架构



3.1 架构分析

3.1.1 高可用

对于学生管理系统来说,如果消息丢了,出现学生相关信息没有了,会导致学生信息关键数据丢失,无法正常实现考试、学籍和课程相关业务的开展,情况还是比较严重的,因此该系统的设计需要考虑高可用性,数据设计需要有备份机制,数据丢失后可以进行恢复。

3.1.2 高性能

学生管理系统在正常运营使用过程中,一般不会出现太大的同时高并发高性能方面的业务特性,因此在计算高性能和存储高性能上可以暂不用考虑。满足一定高峰期数据并发处理的业务情况就行,比如开学某阶段的选课、考试结束后集中时间段查成绩等等。

3.1.3 可扩展

学生管理系统在可扩展方面,没有过多的需求,当前系统架构即可支持上千量的学生使用,如果后续要扩展直接进行服务器的升级即可。 

综合来看,学生管理系统需要高可用性,包括消息写入、消息存储、消息读取都需要保证高可用性。

3.2 总体架构

学生管理系统的总体架构图如上,系统架构拆分为 4 个子系统,分别为学籍管理子系统、课程管理子系统、考试管理子系统、权限管理子系统,具体设计细节如下描述:

1)架构上层采用 Nginx 作为负载均衡,多请求并发时,可以通过 Nginx 反向代理做任务分配,降低某一时间段集中访问的压力。

2)Redis 做高速数据缓存处理,一些经常交互使用的数据信息,可以缓冲到 Redis 里,待用户下次再进行访问时,可以高速提取,提高用户体验,降低服务器的访问压力。

3)数据库采用 MySQL 关系数据库,学生管理系统里分解出的字段名,本身具有比较强的关系性,因此采用 MySQL 进行设计可以降低设计的复杂度。

4)数据库的同步机制采用主备设计机制,主机支持读写操作,备机只进行读操作,且在主机发生故障时,备机可以切换为主机,实现主机的读写操作功能,保证系统数据的可用性。

4. 详细设计

学生管理系统的 4 个子系统,分别可独立运行,通过 http 方式实现与数据库的数据交互。每个子系统和数据库的主备机制就是核心的功能实现。

4.1 核心功能

4.1.1 学生注册流程

1)学生通过 WEB 端输入关键注册信息

2) 数据通过负载均衡分发到对应的服务器

3)数据通过 HTTP 方式进行发送传输

4)数据写入主机数据库中

5)主机数据库将数据同步到备机数据库

4.1.2 选课管理设计

1)学生账号进入选课管理页面

2) 选择对应的课程加入到我的课程里,并点击提交

3)数据在选课管理系统运行处理后返回,处理结果,课程选取成功

4) 对应的数据写入主机数据库中,并与学生账号进行关联

5)主机数据库将数据同步到备机数据库

4.1.3 权限管理设计

1)系统使用者有学生、教师、管理员、辅导员,每个角色有不同的权限功能。

2)学生、教师、辅导员可以注册、登录、修改自己的信息,但注册信息需要管理员审核通过。

3)学生只能查看自己的成绩,教师可以修改学生的成绩。

4)辅导员可以查看学生的信息,可以设置学生的奖惩信息。

5)教师可以上传考试试题,学生可以做题。

4.2 关键设计

学生管理系统的关键设计在数据的高可用,既要保证数据的存储可靠性,也要保证数据的读取可靠性:

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

2)当主机在运营过程中,出现宕机的情况,导致数据无法读写,则系统会自动启用备机进行恢复数据的读取,但是此时不能对数据库进行写操作,满足在业务端的读操作。

4.3 设计规范

1)负责均衡:Nginx 反向代理

2)访问缓存:Redis 缓存

3)交互协议:https 通信协议

4) 数据格式:JSON 格式

5) java:标准开发语言

6)技术框架:使用 Spring Boot 来开发,实现机制前后端分离

7)数据存储:Mysql 关系型数据库

8)数据同步:主备机制

5. 质量设计

5.1 可测试性

系统实现后首先通过内部的自测,保证系统整体功能的可用性的前提下,再让业务方试运营一段时间后,以试代测试,出现问题快速修复。

5.2 可维护性

可让外包人员保证基础的功能维护,定期对数据及安全性进行维护。

5.3 可观测性

系统监控设计要考虑,报考日志监控,操作监控

5.4 成本

成本结合项目预算进行合理的配置

6. 演进规划

1、第一期采用单机系统服务进行私有化部署,实现整体功能的可用性。

2、第二期业务壮大后,可以采用多机集群或云平台的方式来提高系统的性能和服务功能。

 

用户头像

伊静西蒙

关注

还未添加个人签名 2021.04.23 加入

还未添加个人简介

评论

发布
暂无评论
架构训练营 - 模块三作业