架构训练营 - 模块四 - 作业
存储选型
根据需求,请求试卷的 QPS 大概在每秒 5 万,延迟也不能太高,业务模型也为读多写少,并且试卷一旦确定好之后,基本上不会修改。
这样的需求用 Reids 来存储是比较合适的,满足查询的性能需求。因为试卷数据量不大,就无需分片集群。采用 Redis Sentinel 主从复制集群就可以满足要求。
Redis 数据结构
方案一
试卷包含多套,包含各个科目,不同学年的。
试卷分不同类型的题目,似乎没必要按照题目存储多条记录,用一个大的 Json 来存储。
Key: 年级:科目
方案二
试卷本身的设计不变,题目安装标题来存储,每个题目存储一个单独的数据结构。采用 Hash 来存储。
Key: 年级:科目
Field:题目 ID
Value:题目
读写流程
写流程
一次写入所有的试卷题目到 String 中
安装题目 ID 存储题目到 Hash 表中
读流程
一次性加载所有题目,反序列化 Json 为试卷
按照标题 ID 读取,或者读取整个 Hash 表,然后分别展示
性能估算
单机的 Redis 能满足 5w 到 10w 的并发请求,Redis Sentinel 集群使用三节点来部署,Sentinel 节点和 Redis 节点共用机器。需物理机部署,不要使用虚拟机。
试卷不会太多,也不会占用太大内存,32G 基本满足需求,查询请求量也不是特别大,16 核基本满足需求。
评论