架构师训练营模块四作业
1.Redis 的数据结构设计
根据预估的结果:试卷请求 QPS:5 万/s,提交试卷 TPS:1700/s。
原始试卷选择用 redis 中 String 类型,key=学校 id+考试 id,value=试卷内容。
试卷提交后用 redis 中 hash 类型存储 hash 的 key=学校 id+考试 id,value 中 key=学生 id,value=提价试卷的作答内容。
试卷对应的考生信息使用 list 存储,key=学校 id+考试 id,value=学生 id。
2.具体的读写流程
2.1 考试试卷由教务管理员或老师在管理系统选择课程并上传发布,试卷提交后保存至 mysql 数据库并同步到 redis 中。
2.2 试卷提交后,管理系统根据课程查询对应的学生信息,将试卷-学生信息保存至 reids 中,同时管理系统根据对应的列表将考试待办任务发送到学生待办列表中,同时也在数据库学生考试表中保存学生对应的考试信息,在课程考试表中保存对应的课程考试信息。
2.3 学生申请试卷时,通过待办任务或课程页面中考试来获取试卷内容,通过学校 id+考试 id 从 redis 中获取信息。
2.4 学生提交试卷后,先保存至 redis 中,系统根据答案自动批改后,将学生试卷信息保存至学生考试表中,同时移除 reids 试卷-学生信息中该学生的 id,将分数信息保存至课程考试表中。
3.集群的服务器数量和性能
集群数量
由于试卷的 QPS 在高峰期达到 5 万/s,考虑到还有其他的业务也存在访问 redis 的需求,如登录等功能,所以预估集群在最高峰时 qps 在 6 万左右,所以 sentinel 节点部署三台,多加一台可以防止两节点部署时某一台节点宕机导致集群的性能无法满足查询需求,同时 redis 也选择三主三从的部署架构.服务器数量三台,sentinel 节点每台服务器一台,redis 服务节点主备穿插部署,防止某一节点的数据由于服务器硬件问题丢失。
性能
QPS:15 万/s,单节点 TPS:5000/s
版权声明: 本文为 InfoQ 作者【刘帅】的原创文章。
原文链接:【http://xie.infoq.cn/article/e9e4ffc0d69801b6697903421】。未经作者许可,禁止转载。
评论