学生管理系统的架构文档
前言
本文是学生管理系统的详细设计文档,用于指导后续开发以及部署工作。
业务背景
随着学校规模的不断扩大,学生数量的增加,带来了如下问题:
效率问题:需要处理的信息日趋增大,花费大量的教师资源,导致处理效率十分低下。
管理成本:存储大量的学生信息数据,当需要大量修改学生信息时,需要对一些数据进行分析,导致花费大量时间。
规范化:需要管理的学生信息类型比较多,需要实现学生信息的系统化、规范化。
约束和限制
1、按照不同的功能模块进行部署和开发。
2、使用 Nginx 作为任务分配器。
3、数据存储使用 MySQL 关系型数据库进行存储。
4、MySQL 要实现主备的方式。
总体架构
架构分析
高性能
学生信息种类比较多,数据量也比较大,需要大量修改以及对数据进行分析,并要实现快速查询、修改等操作。综合分析,系统在处理数据时需要高性能。
高可用
学生信息种类繁多,数据存储量也比较大,如果数据丢失,再次进行搜集时,需要耗费大量的人力、物力以及时间成本。在数据存储方面需要实现高可用。
总体架构
1、将不同的功能分成不同的模块,相互独立开发与部署。
2、使用 Nginx 作为任务分配器来进行业务调度。
3、使用加权轮询的访问分配策略。
4、数据存储包含一台主 MySQL 和一台备 MySQL,内主备数据复制。
详细设计
核心功能
关键设计
1、数据存储可靠性
学生信息存储在 MySQL 中,有一主一备共计两台 MySQL 服务器,以保证数据存储高可用。MySQL 主从复制可能由于网络原因导致复制延迟,如果正好 MySQL 主服务器由于磁盘等原因导致数据无法使用,此时部分数据就不可避免的丢失了。可以针对复制延迟进行监控,设定一个阈值,当大于这个阈值时,进行告警并及时进行处理。
设计规范
1、采用 golang+gorm 进行开发。
2、MySQL 使用 Innodb 存储引擎。
3、采用 REST 风格的 API 设计。
4、实现服务自动注册,nginx 自动发现后端服务。
质量设计
可测试性
核心服务提供对应的接口,由测试进行接口测试或实现自动化测试。
可维护性
服务管理实现规范化,使用 supervisor 进行管理服务。
可观测性
1、实现对基础硬件的监控,比如 CPU 的使用率、CPU 饱和度、内存的使用率、内存的饱和度以及负载、磁盘等基础监控。
2、在业务层方便,实现对服务 QPS、RT、http code 等相关指标进行监控展示。
演进规划
数据一期
为加快访问,使用 Redis 作为缓冲,提升访问速度
版权声明: 本文为 InfoQ 作者【Kevin】的原创文章。
原文链接:【http://xie.infoq.cn/article/fb28b62537ddfffe3b8955ce8】。文章转载请联系作者。
评论