架构实战营 - 模块三作业
前言
本文是学生管理系统架构设计文档,用于指导后续的开发、测试和运维。
修订历史
词汇表
1.业务背景
随着学校的规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。不仅花费大量的教师资源,处理效率也十分低下。
为提高学生管理的管理水平,优化资源,尽可能降低管理成本成为学生管理的新课题,学生管理系统是从学生管理现状出发,根据学生管理的新要求进行开发设计的,它需要解决学生信息管理数据信息量大修改不方便,对一系列数据进行分析时花费时间长等问题,帮助学生管理人员有效管理学生信息。
因此学生信息管理系统可以通过系统规范化地管理、科学性统计和快速查询、修改、增加、删除等,提高信息的准确度以及日常管理的工作效率。
本系统主要是应用于学生各类信息的管理,总体任务是实现学生信息关系的系统化、规范化、自动化,其主要任务是统计学生各类信息进行日常管理,如查询、修改、增加、删除、以及学生选课、成绩的查询等功能设计的管理系统。
2.约束和限制
系统可外网访问。
数据存储期限:学生在校期间 + 离校后 3 年数据。
3.总体架构
3.1 架构分析
高性能:对于一个学生管理系统来说,一个学校一般也就几千人,并且又只是一个管理类的系统,对性能要求不高。
高可用:可用性方面主要体现在存储高可用方面,要保证数据不要全部丢失;计算高可用方面要求不高,毕竟是学校内部用系统。
可扩展:考虑到业务需求比较复杂,架构设计的时候需要保证系统后期扩展方便。
成本:开发一个内部用学生管理系统,成本也不会太高。
安全:只要做到必要的角色权限控制以及保证数据的一个安全性即可。
3.2 总体架构
使用 Nginx 作为负载均衡器分发请求。
整个系统拆分为学生子系统、课程子系统和权限子系统,保证系统的一个可扩展性。需要特别注意:这里不是微服务架构,不需要设计基础设施。
为了保证数据的一个高可用,存储方面采用 MySQL 主备架构,主备间的数据复制采用 MySQL 本身的数据复制功能即可。
4.详细设计
4.1 核心功能
学生查看信息以及选课
教师发布课程
4.2 关键设计
系统可扩展
考虑到学生管理系统的需求比较复杂,系统需要保证有一个好的扩展性,所以架构设计的时候,我们把整个系统拆分成了学生子系统、课程子系统和权限子系统,来降低系统的一个复杂度,并且这么拆分之后,便于后期更好地扩展新的业务功能。
为什么不考虑微服务呢,只是一个简单的系统拆分?对于一个内部用的学生管理系统,使用微服务就增加了系统的复杂度,不符合"简单原则"和"合适原则"。
数据高可用
对于学生的一些数据,我们是需要保证不丢失的。架构设计中选择 MySQL 的一个主备架构,数据复制方式直接使用 MySQL 本身的数据复制功能。
4.3 设计规范
系统的基础框架采用 SpringBoot 实现。
前后端分离,后端通过 Swagger 提供 API 接口。
MySQL 使用 InnoDB 存储引擎。
子系统之间的通信使用 HTTP 协议,数据格式使用 JSON。
缓存框架使用 Redis。
5.质量设计
可测试性:可全链路压测。
可维护性:可全链路跟踪,快速定位系统问题。
可观测性:通过运维平台,聚合系统的一些关键指标信息和服务器的一个关键指标(CPU、内存等使用情况)
成本:复杂度不涉及高性能以及计算高可用,整体成本相对来说比较低。
6.演进规划
第一期质量设计比较简单,系统运行稳定之后,进行第一个迭代,优化质量设计相关内容。
如:可观测性方面提供更多指标信息。
版权声明: 本文为 InfoQ 作者【🐢先生】的原创文章。
原文链接:【http://xie.infoq.cn/article/2a00ab20a53159120201e9657】。文章转载请联系作者。
评论