架构训练营 -- 模块三
前言
外包学生管理系统的架构文档
词汇表
Spring Boot: Web 开发框架
Nginx: 高性能的 HTTP 和反向代理 web 服务器,在本架构中进行路由转发
MySQL: 开源关系型数据库存储,本架构使用主备方案
Git: 代码版本控制软件
1. 业务背景
随着学校的规模的不断扩大,学生数量的增加,需要处理的信息也日趋增大。不仅花费大量的教师资源,
处理效率也十分低下。
为提高学生管理的管理水平,优化资源,尽可能降低管理成本成为学生管理的新课题,学生管理系统是从
学生管理现状出发,根据学生管理的新要求进行开发设计的,它需要解决学生信息管理数据信息量大修改
不方便,对一系列数据进行分析时花费时间长等问题,帮助学生管理人员有效管理学生信息。
因此学生信息管理系统可以通过系统规范化地管理、科学性统计和快速查询、修改、增加、删除等,提高
信息的准确度以及日常管理的工作效率。
本系统主要是应用于学生各类信息的管理,总体任务是实现学生信息关系的系统化、规范化、自动化,其
主要任务是统计学生各类信息进行日常管理,如查询、修改、增加、删除、以及学生选课、成绩的查询等
功能设计的管理系统。
总结如下:
解决学生信息管理数据信息量大修改不方便
解决对一系列数据进行分析时花费时间长
规范化地管理、科学性统计和快速查询、修改、增加、删除
2. 约束和限制
使用关系型数据库进行数据存储,适当进行 normalization
成本需要严格把控,3-5 万每年
基于 AWS 云进行实现
可支持 3-5 万的教职工使用
数据保证持久化
3. 总体架构
总体来看,基于业务背景,该架构适当放宽对于高性能和高可用性的要求,但是由于业务本身覆盖的内容比较广,同时需要做好后续的可扩展准备,因此对可扩展有一定的要求,同时为了满足数据的灾备,因此采用 MySQL 的主备机方案,确保系统异常时数据的可用性
架构整体分为三层,路由转发,业务系统,及存储系统层
路由转发:由 Nginx 根据请求内容将请求转发给后台服务器,对于比较繁忙的业务,譬如选课等子系统,如有需要可以进行单独的水平扩展
业务系统:业务子系统需要进行拆分,可以通过容器技术或采用 AWS 独立的 EC2 服务器进行隔离,确保单独子系统故障时不会影响到其他子系统。初步拆分为学生子系统,课程子系统,及权限子系统
存储系统:MySQL 主服务器可进行读写请求处理,MySQL 备用服务器仅作为数据备份,不提供读服务
4. 详细设计
架构规范
交互协议:客户端与服务器端通过 HTTP 进行请求与响应
数据格式:客户端与服务器端统一使用 JSON 进行数据交互
开发框架:SSM(Spring+SpringMVC+Mybatis),但也可以根据团队能力确定开发框架
架构质量
可测试性设计:子系统进行模块化开发确保可独立测试部署上线
可维护性设计:通过容器化技术降低系统的迁移成本
可观测性设计:使用 Splunk 进行日志收集及分析
4.1 核心功能
4.1.1 用户登录/注册场景
学生用户登录时进行身份验证,验证通过则展示登录界面
新用户注册需进行学生身份验证
学生信息验证为实时验证,如失败需要通过学院处理,成功则注册新用户信息并展示登录界面
需要确保数据库查询时对于学生身份验证的快速响应
4.1.2 学生信息查询修改
学生信息查询仅展示个人信息
修改需要进行权限验证,同时通过日志记录系统记录修改请求信息
需要确保数据库更新的快速响应
4.1.3 学生查课选课
课程查询及选课与学生信息查询流程相似
权限子系统进行用户验证,课程子系统验证业务逻辑
针对并发引起的选课问题,通过 MySQL 事务进行并发控制
需要确保数据库设计满足课程查询,添加等的快速响应
4.2 关键设计
Nginx 根据请求内容进行路由转发,因此对于不同子系统需要在 HTTP 请求 resource 中进行区分,并通过 Nginx 进行配置
MySQL 进行主备配置,由于学生系统对高性能要求不高,同时用户数据量不打,因此两个数据库实例应该可以支撑,可以考虑同步复制,牺牲一定的性能的情况下换取数据一致性
采用 Spring Boot 进行模块化开发,便于后期的维护及扩展,以及独立测试等需求
如果采用同步复制,备用服务器可以承接读请求
使用 Git 进行版本控制,使用 CI/CD 进行持续集成部署上线,自动测试
4.3 设计规范
采用 spring boot 开发框架
采用 http 协议进行通讯
采用 json 通讯数据格式
采用 git 进行版本控制
进行单元测试与系统集成测试
5. 质量设计
可测试性:子系统保证独立的测试用力,核心业务逻辑考虑函数式编程增强系统的可测试性
伸缩性:
子系统之间可独立扩展,通过增加服务器数量提升某个特定子系统的计算能力
数据库采用主备,由备用服务器提供读服务,提升系统的读写能力
协作性:各个模块可并行开发
6. 演进规划
前后端分离,优化前后端的并行开发
数据库采用异步复制 + 浏览器缓存,确保数据的一致性的同时提升读写效率
服务注册中心,进一步解耦服务上下线以及配置更新
评论