架构实战 - 模块四
前言
本文档针对设计千万级学生管理系统的考试试卷存储方案进行详细说明,用于指导后续系统研发、运维和测试工作。
词汇表
Redis:缓存存储、KV 数据存储模式,支持字符串、集合、Hash 等数据结构
Hbase:分布式列式存储,Sorted Map 数据存储模式
Mysql:关系型数据库 RDBMS,数据复杂关联支持,保证事务一致性
1. 业务背景
目前学校需要规范化学生考试管理平台,能够支持考试试卷配置、学生参加考试、老师批改评分、学生考试成绩分析等一切相关需求,通常学校老师花费很多精力给学生安排考试事项、给学生批改试卷、帮学生计算成绩并作响应成绩评估,为了提升老师日常对学生考试事项管理效率和降低日常事务的错误率,我们推行学校信息管理系统的应用是非常需要的。
2. 约束和限制
1.必须在 2021.12.30 号完成
2.成本不能超过 100 万
3.数据库采用 Mysql、Nosql(Redis)
4.千万级学生数量
5.学生考试时间点比较集中、支持考试期间的大访问量
6.能快速分析学生考试成绩统计、分析
3. 总体架构
3.1 架构分析
根据学生考试所关联的场景分析,考试系统可拆分为实时考试系统、考试管理系统两个子系统,我们可以针对两个模块区分开设计、研发。
实时考试系统包括:学生阅题、答题、提交试卷等;
考试管理系统主要功能是考题内容管理、考试成绩管理。
3.1.1 高性能
千万级学生考试时间大多会集中在期中、期末时间点上,考试开始时,学生打开试卷阅读题目时访问量极高,需要考虑一个能够支持大并发访问的数据存储。
分页持续下一步答题式,都会对访问到,这期间学生提交的答案时访问相对较高,需要考虑一个能够支撑负责大量学生提交的答案的写入能力的存储方案。
3.1.2 高可用
学生考试的时候,系统不能有任何不可用问题,这样会严重影响考试的日程安排,所以对服务和存储的高可用性有很高要求,基于这一点,就需要评估考试系统的高峰访问量,对系统的性能需要做到可弹性扩展,在可预测的考试流量高峰期做出应对的性能提升。
3.2 总体架构
4. 详细设计
4.1 核心功能
学生登录考试系统参加考试,阅读考题、翻页答题提交,最终考试结束提交答卷,完成考试;后续待老师批改答卷后出成绩时可查阅。
教师登录开始考试管理系统,负责命题和答案等考试内容管理、审阅学生答案,可量化试卷答案交由考试系统自动批改,老师负责人工审阅的考题答案批改,最终给答卷评分,出考试成绩。
4.2 关键设计
学生考试属于高峰流量时期,每部阅题、答题对系统的读写性能要求都非常高,学生在每答完一页都会走下一步继续答题,系统就会自动将学生之前答过的题目答案写入高性能存储,合适存储必选 Hbase,具备高性能高并发高吞吐写入能力;学生阅读题目访问流量同样很高,而且考试题目固定不变,这种读多写少的场景首选考虑级联缓存方案,考试开始时,系统可负责或者人工触发将考试题目内容从 Mysql 读取同步到 Redis,此作为二级缓存,接着首次应用读取 Redis 时,将 Redis 中的考题内容缓存到本地一级缓存,这样更高效支持读取能力。
4.3 设计规范
1)应用服务采用 Spring Boot + MySql + Redis + Hbase 开发
2)MySQL 使用 Innodb 存储引擎
3)Hbase RowKey 要根据实际场景具体设计
4)Redis 缓存集合应用服务本地实现二级级联缓存
5. 质量设计
可测试性:测试接口,单元测试
可检测行:操作日志、资源负载监控
可维护性:架构设计文档、开发方案设计文档、测试文档
6. 演进规划
项目性质上看,所有功能都可考虑周全,考虑一次性部署上线成功交付,后续业务基本不在改变
评论