架构实战营 - 第 6 期 模块三课后作业
前言
本文是学生管理系统架构设计文档,用于指导学生管理系统后续的开发,测试和运维。
词汇表
暂无
1. 业务背景
1、随着学校的规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。不仅花费大量的教师资源,
处理效率也十分低下。
2、为提高学生管理的管理水平,优化资源,尽可能降低管理成本成为学生管理的新课题,学生管理系统是从
学生管理现状出发,根据学生管理的新要求进行开发设计的,它需要解决学生信息管理数据信息量大修改
不方便,对一系列数据进行分析时花费时间长等问题,帮助学生管理人员有效管理学生信息。
3、因此学生信息管理系统可以通过系统规范化地管理、科学性统计和快速查询、修改、增加、删除等,提高
信息的准确度以及日常管理的工作效率。
4、本系统主要是应用于学生各类信息的管理,总体任务是实现学生信息关系的系统化、规范化、自动化,其
主要任务是统计学生各类信息进行日常管理,如查询、修改、增加、删除、以及学生选课、成绩的查询等功能设计的管理系统。
2. 约束和限制
1、从开发到上线,时间需要在 2 个月内完成。
2、开发团队总共 3 个人。
3、要求成本在 30 万以下。
4、数据库采用 Mysql,并且保证数据不丢失。
5、使用学校自有机房,项目不必上云。
3. 总体架构
3.1 架构分析
3.1.1 高可用
1、 对于学生管理系统来说,如果学生或老师的相关数据丢失,需要重新录入和审核,导致学校管理成本增加。如果课程子系统数据丢失,可能会导致,老师和学生无法正常上课,课程排期混乱,严重影响学校的正常教学秩序。如果权限子系统数据丢失,则可能导致学生管理系统运营失控,学生,老师,课程等相关数据泄露,产生不稳定因素。
综上所述,学生管理系统,必须保证数据的不丢失,准确性,高可用,所以数据存储使用主备模式。
2、如果把学生管理系统里面涉及到的,学生,课程,权限等模块,都放到一个服务上,如果一个模块发生问题,会导致别的模块也不可用,最终导致整个学生管理系统不能提供服务,影响整个教学流程和学生管理。
综上所述,所以把学生管理系统,拆分成三个独立的子模块,这样假如某权限模块宕机停服了,可通过业务降级等手段,继续让学生和课程模块继续提供服务,不影响学生的基本上课,也这个角度看,提高了业务的高可用。
3.1.2 高性能
1、对于学生管理提供来说,应为该系统的服务目标只针对当前学校的老师和学生,而我们学校,目前所有师生加起来也就 3 千左右,所以对系统性能要求并不是很高,所以高性能的优先级,并不是很高。
3.2 总体架构
Role: Nginx,业务服务器,Mysql
Relation:
1、对学生管理系统进行业务拆分,拆分成三个子系统,每个子系统负责自己单独的业务逻辑。
2、用 Nginx 做反向代理,为项目提供整体入口和路由分发。
3、三个子系统公用一个 Mysql 数据库,可以保证数据的一致性。然后在部署一台备份数据库,做数据备份,保证数据的安全性。
4. 详细设计
4.1 核心功能
4.1.1 学生子系统流程
系统登录,文件上传下载,信息查询等
4.1.2 课程子系统流程
课程录入,选课功能,教材选择等
4.1.3 权限子系统流程
创建,审核,删除用户,分配权限,设置角色等
4.2 关键设计
1、数据存储可靠性
数据存储在 Mysql 主服务器上,然后再部署一台 Mysql 从服务器,两台服务器之间通过同步增量复制,保证消息的存储高可用。如果主备间出现复制延迟,恰好此时 MySQL 主服务器宕机导致数据无法恢复,则部分消息会永久丢失,这种情况不做针对性设计,DBA 需要对主备间的复制延迟进行监控,当复制延迟超过 30 秒的时候需要及时告警并进行处理。
2、业务服务稳定性
对学生管理系统进行业务拆分,拆分成三个子系统,每个子系统负责自己单独的业务逻辑。 如果把学生管理系统里面涉及到的,学生,课程,权限等模块,都放到一个服务上,如果一个模块发生问题,会导致别的模块也不可用,最终导致整个学生管理系统不能提供服务,影响整个教学流程和学生管理。所以要对整个学生管理系统,进行业务模块拆分。
4.3 设计规范
4.3.1、前后端分离,通过 API 接口实现交互。
4.3. 2、后端业务开发编程语言使用 Golang,开发框架使用 Gin 框架。
4.3.3、整体业务对外使用 Http 协议提供服务,各个子系统之间,使用 Http 协议进行通信。
4.3.4、Mysql 使用 Innodb 存储引擎。
4.3.5、前后端参数和返回值,均使用 Json 格式进行交互。
5. 质量设计
5.1 成本:
整个业务使用 6 台服务器,硬件成本控制在合理范围;
把项目分成 3 个子系统,可以进行并发开发,提高人力使用率,减少时间成本
5.2 可测试性:
通过 Nginx 统一入口,对各个子系统的接口进行功能和压力测试,保证相对较高的可用性。
5.3 可观测性
可以在开发过程中,可对接口的调用次数,和每个接口的入参和出参,以及各个业务当中,处理关键逻辑的地方,对请求和报错日志进行收集,然后通过前端展示的方式,输出到一个可观看的面板上,用以观测业务接口的调用状态和错误产生的原因。
5.4 可维护性
使用 gitlab+runner 的代码部署方式,进行项目自动化 CI/CD,支持 bug 热修复和快速迭代和回滚。
6. 演进规划
项目一期:完成学生管理系统的基本业务功能,为学校提供稳定的服务
项目二期:开发考试模块,并加入到学生管理系统当中。
项目三期:把项目进行微服务化,提高整体性能,为将来所有学校提供学生管理系统服务。
版权声明: 本文为 InfoQ 作者【乐邦】的原创文章。
原文链接:【http://xie.infoq.cn/article/8f4eecff48898702af092c815】。未经作者许可,禁止转载。
评论