架构训练营模块四作业
千万级学生管理系统的考试试卷存储方案
一、数据结构设计
[数据结构设计]
Key: 学校 ID+考试 ID
Value:sorted set 结构,存储 test paper 试卷、result 学生答卷,其中 test paper 和 result 都是 json 格式
[具体方案]
Value 第 1 个位置 Set[0]存放这门考试的 test paper,一个学校某一门考试的试卷都是一样的,和学员无关;
Value 按照学员 ID 进行排序,假定学员 ID 是连续的,从第 2 个位置 Set[1]连续插入 result;
[读写分析]
1、 考试前老师存储试卷,直接根据 Key 插入相应的 test paper 到 Set[0];
2、 学生获取试卷,直接根据 Key 获取 test paper;
3、 学生提交试卷,首先根据 Key 检索,然后直接根据学员 ID 序号将 result 插入到对应位置;(如果某个学员 ID 对应到没有学员,result 为空即可)
4、 老师获取学生答卷,首先根据 Key 检索,然后直接根据学员 ID 序号查询对应位置的 result;
二、Redis Sentinel 集群的服务器数量和性能
1、TPS/QPS 估算:
之前考试试卷存储方案的 TPS/QPS 估算如下:
请求试卷:1000 万* 20(课)/ 20(周末不考试) / 4(每天 4 堂考试)/ 1 分钟= 250 万请求/分钟≈ 5 万/每秒
提交试卷: 1000 万* 20(课)/ 20(周末不考试) / 4(每天 4 堂考试)/ 30 分钟= 1700/每秒
2、架构设计
TPS 1700/每秒单机就能满足;redis 单机 QPS 也在 5-10 万,因此 redis sentinel 仅需两台 redis 服务器即可,采用 Redis Sentinel 实现主从复制、读写分离,当主机故障自动切换到从机,架构图如下:
版权声明: 本文为 InfoQ 作者【Neil43】的原创文章。
原文链接:【http://xie.infoq.cn/article/012c14d120d9b0abf2969baca】。文章转载请联系作者。
评论