架构实战营 - 模块三作业
前言
本文档主要用来介绍外包学生管理系统的整体技术架构设计方案,旨在帮助产品、开发、测试、运维了解项目整体架构设计,促进项目各角色之间的沟通与协作,推动项目持续演进与迭代。
1. 业务背景
为了响应国家对于人才培养策略的调整,近期学校对现有的教育制度与体系进行了改进,准备构建一套新的学生管理系统以适应新的教育制度与体系,期望系统能够满足以下两个新的教育场景:
课程选修:为促进学生德智体美全面发展,学校会在每学期开设音乐、绘画、体育、计算机等各类不同的线下课程,学生可以根据自己的兴趣选修
教学评价:搭建教师、学生、课程三维评价体系,帮助学校不断完善教育体系,提高教育水平
教师管理:增加教师管理功能
2. 约束和限制
项目整体周期三个月
项目成本需控制在百万内,包含开发成本、运维成本
系统安全必须严格把控,能防范各类常见的攻击手段,防范数据泄漏
编程语言必须使用 Java,采用 SpringBoot,建议进行功能服务化
前后端必须分离
3. 总体架构
3.1 技术选型
前端:Vue + ElementUI
后端:SpringBoot、SpringCloud
数据库:MySQL
中间件:Redis
3.2 架构分析
高可用:
课程选修由于部分课程较热门,会出现大量同学进行选报的情况(选修报名有时间限制,必须再指定时间段内登陆系统进行选报),但课程可容纳学生数量有限制,系统需要做好控制,不可出现超额的情况;
高性能:
整体页面响应时间不超过 2 秒,服务多实例,提高计算能力,提高响应时间
安全性:
做好数据权限控制与数据脱敏,防范数据泄漏与丢失,数据库采用主备库设计
3.3 总体架构
前后端分离,使用 Nginx 进行反向代理与实现服务负载均衡
服务拆分为教师、学生、课程、评价、权限五个模块,每个模块采用服务化方式部署,且每个服务至少两个实例,保证服务可用性
数据库采用 MySQL,且使用主备架构,防止数据丢失,提高可用性
4. 详细设计
支持学生、教师、课程基本信息的录入,包括手动录入、批量导入,支持修改、删除学生、教师、课程信息,对于已经参与管理系统各类业务活动的数据,不允许删除;
系统管理员或者课程管理员可设置选报的课程,包括课程基本信息、课程教师信息、课程选报人员、课程选报时间等,待到达选报时间后,开放选报入口,学生可登陆系统根据自身需要选报课程,防止超额选报;
学生课后可对老师、课堂内容进行评价,老师在每个课程周期内可对学生进行两次评分,时间分别为期中跟期末;
4.1 核心功能
课程选修核心流程序列图
4.2 关键设计
课程选修高可用
学生子系统、课程子系统均采用多实例部署,基于 Nginx 轮询实现负载均衡;
使用 Redis 生成选修名额,获取到选修名额后可选报课程,取消选报归还选报名额,保证 Redis、MySQL 数据一致性;
数据库使用学生 ID + 课程 ID 唯一主键,防止重复报名;
课程选修高性能
教师、学生、课程基本信息可做缓存,缓存有效期 60 秒;
每个业务子系统多实例部署,提高服务响应能力;
课程选修数据存储
采用 MySQL 进行数据存储;
课程选修信息存储在课程子系统,由课程子系统进行统一管理;
数据库采用主备方案,防止数据丢失;
4.3 设计规范
服务采用 SpringCloud、SpringBoot 开发,服务之间 feign 调用,且开启 Apache HttpClient
数据库采用 MySQL,必须使用 InnoDB 引擎,各表不设置外健,业务层面进行处理,但表的外健必须设置索引
项目工程采用分层架构,分为 api、rest、service、manager、dao 五层
5. 质量设计
基于阿里云部署,购买云产品进行系统监控报警与运维维护;购买云盾等安全产品提高系统安全性
项目开发过程中包含规范的单元测试用例,版本发布之前进行单元测试回归,通过 SonarQube 发现代码坏味道与潜在 Bug
成本计算
云服务器 ECS:8vCPU 16G * 5,成本预计 5 万/年
云数据库 MySQL:8vCPU 32G + 500G SSD 云盘(高可用版,支持主备),成本预计 4 万/年
云数据库 Redis:Redis 5.0 16G 标准版,成本预计 2 万/年
再添加各类云产品,每年成本预计 12~15 万,除去人工成本,百万内可以保证系统安全稳定的运行 5 年以上
6. 演进规划
分为三个迭代,首期主要完成学生、教师、课程基本信息以及系统基础工程的开发;二期主要完成课程选修、评价体系开发;三期进行项目收尾,交付各类文档
评论