千万级学生管理系统试卷存储方案(架构实战营 模块四作业)
数据结构设计
考虑到试卷有不同类型的题目,如选择题、单选题、填空题、判断题、简答题和问答题,因此使用 Redis 的哈希类型存储更为合适。
key: 学校 ID : 课程 ID:学期编码
value:题目类型作为哈希的 key,具体题目以 json 格式存储在哈希的 value 上。
读写流程设计
写流程:
老师提交试卷,试卷先存储在 mysql 上,再保存在 redis 上。
读流程:
考试开始,学生请求试卷,通过学校、课程、学期组合成 key 查询 redis 中的试卷信息。
Redis sentinel 集群预估
业务性能要求:
请求试卷 QPS:5 万/每秒
提交试卷 TPS:1700/每秒
假设使用该系统的高校有 500 所,每所每学年平均有 200 门课程,共计 10 万份试题。试题主要以文字为主,不需要太多的存储空间,因此上限设置为 200k,共计需要 19G 左右的存储空间。
服务器预估:
Redis 单机 TPS 5-10 万,基本能够满足业务的性能要求。但是为了保证存储高可用一集冗余一部分性能,考虑使用 3 台 Redis Sentinel 集群 + 3 台一主两从的 Redis 架构方式。Redis 为单线程模式,往往需要绑定一个物理核来保证 Redis 的性能,因此对多核要求不高,另外预留一部分 CPU 给操作系统,2 核足够。内存要覆盖到业务需要(19G),因此内存配置推荐 24G 以上。网络带宽要支持 5 万/每秒的传输速率,200k*50000/s 约为 10Gbps 左右。
服务器最终方案:
3 台 Redis Sentinel 集群 + 3 台一主两从,如果使用云服务平台,可以为 sentinel 与数据节点分别申请一个云服务器,共六个,其中 sentinel 为 1C2G*3,数据节点为 2C24G*3。如果不是使用云服务,可使用 3 台虚拟机 3C25G,每个虚拟机可以部署一个 sentinel 实例和数据实例。
版权声明: 本文为 InfoQ 作者【Gor】的原创文章。
原文链接:【http://xie.infoq.cn/article/4058f02e9a11ddb16b254c5aa】。未经作者许可,禁止转载。
评论