模块四 -- 作业
1、已知的存储性能估算结果
试卷请求:5W qps
试卷提交:1700 tps
2、情况分析
学校、学生、课程信息应该保存在 mysql 等关系数据库中
可以通过学校课程等信息直接查询到试卷信息
试卷题目是有序的且一般不会重复
3、数据结构设计
redis 数据结构选用 sortedset(zset),可以调整顺序且去重。
key:使用确定的唯一标记即可,如 学校编码+院系编码+科目编码+考试日期,需要一个在关系数据库中可查到的唯一识别到试卷的编码。
value:存放约定好格式的题目,比如 json 字符串等等 比如{question:"",choices:[],anwser:""}。
score:用来调节题目顺序。
4、读写流程
老师新建试卷:
创建试卷生成试卷的唯一编码,存入关系数据库中。
录入题目、编号及正确答案等相关信息以一对多的方式继续保存到关系数据库中。
由于不会出现录入试卷后立刻考试的情况,所以可以异步将试卷同步到 redis 集群中。
学生获取试卷:
查询关系数据库中学生、学校、课程相关信息获得试卷的唯一编码(学校编码+院系编码+科目编码+考试日期)。
根据唯一编码 key 在 redis 集群中按照 score 升序的方式读取并返回给前端解析展示。
5、计算 Redis sentinel 集群的服务器数量和性能
查询阿里云 redis 云数据库给出的 redis qps 参考值为 8W,因此认为单点 redis 已经可以满足。但是由于考试期间需要保证试卷读取功能可用性,选择使用 3 台 redis 组成集群 1 个 master2 个 slave,同时需要 3 个哨兵集群。
评论