[架构实战营] 模块三作业
前言
本文是外包学生管理系统的详细架构设计文档,用于指导消息队列后续的开发、测试和运维。
词汇表
nginx:一高性能的 HTTP 和反向代理 web 服务器;
springboot2.x : spring 软件框架,便于快速开发;
mybatis:数据持久层框架;
mysql:一个流行的关系型数据库管理系统;
1. 业务背景
随着学校的规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。不仅花费大量的教师资源,
处理效率也十分低下。
为提高学生管理的管理水平,优化资源,尽可能降低管理成本成为学生管理的新课题,学生管理系统是从
学生管理现状出发,根据学生管理的新要求进行开发设计的,它需要解决学生信息管理数据信息量大修改
不方便,对一系列数据进行分析时花费时间长等问题,帮助学生管理人员有效管理学生信息。
因此学生信息管理系统可以通过系统规范化地管理、科学性统计和快速查询、修改、增加、删除等,提高
信息的准确度以及日常管理的工作效率。
本系统主要是应用于学生各类信息的管理,总体任务是实现学生信息关系的系统化、规范化、自动化,其
主要任务是统计学生各类信息进行日常管理,如查询、修改、增加、删除、以及学生选课、成绩的查询等
功能设计的管理系统。
2. 约束和限制
数据可靠性要求:保障已存储数据不会丢失;
性能要求:要求支撑 1000qps 的访问量;
成本要求:要求成本在 30 万以下;
3. 总体架构
3.1 架构分析
3.1.1 高可靠
主要目的是实现学生信息管理的系统化、规范化和自动化,其主要任务是管理学生相关信息,如学籍、课程、成绩、奖惩,所以主要考虑数据高可靠,保障已存储数据不能丢失;
3.1.2 性能
为保障选课等集中操作场景下的性能,需要保证业务模块 1000qps 以上的性能;
3.1.3 可扩展
为了满足高校未来的发展,以及学生管理系统日后的复杂性需求,需要一个可扩展的系统;
3.2 总体架构
使用 nginx 集群对外暴露服务,并把请求分发至不同的子系统中;
系统拆分成三个子系统,便于后期运维与能力的扩展;
数据存储高可用,主备 MySQL 集群,主备数据复制,定时备份至冷存,保障数据不丢失;
4. 详细设计
4.1 核心功能
4.1.1 学生子系统
注册,信息查询,账号管理。
4.1.2 课程子系统
课程信息管理,选课。
4.1.3 权限子系统
账号角色管理,权限分配,账号信息管理。
4.2 关键设计
4.2.1 高可靠
存储:主备 MySQL 集群,主备数据复制,定时备份至冷存,保障数据不丢失;
业务:保证强一致的业务接口,所有接口皆原子化;
4.2.2 性能
水平扩容能力;
业务高性能实现;
4.2.3 可扩展
细分子系统设计;
全接口化:将所有的模块能力都由 api 接口暴露;
4.3 设计规范
前后端分离;
模块间通信均需要暴露 api 接口;
以 json 作为通讯格式;
5. 质量设计
1. 可测试性
可以通过各个功能模块的接口,来进行系统的功能、性能测试
2. 可维护性
生成 docker image,进行 docker 化部署
3. 可观测性
可以通过各个功能模块的接口、系统的日志、系统常见指标的监控来观察系统的内部运行情况
6. 演进规划
一期:完成上述三个子模块的相关功能;
二期:加入考试、网课、缴费等相关功能子模块;
版权声明: 本文为 InfoQ 作者【Geek_0ed632】的原创文章。
原文链接:【http://xie.infoq.cn/article/34f827201081c327fe06b7283】。文章转载请联系作者。
评论