架构实战营 - 模块四作业
Redis 数据结构设计
采用 string 类型:
Key:学校 ID + 专业 ID + 考试 ID
Value:题目内容,采用 JSON 格式
过期时间为考试结束后 1 周
读写流程
写流程
考试题录入提前几天写入 Redis 即可,没有太多的性能要求,复杂度较低
考试结果写入即写入 HBase
读流程
获取试卷即从 Redis 读取即可
考试结果从 HBase 获取
整体流程
注:查询考试结果不是此设计的重点,此处没有画出
集群设计
存储量级估算
假设每门考试的题型是 20 判断题、20 选择题、4 道大题。假设每道判断题题干 100 字以内,每道选择题题干 400 字以内,每道大题题干 800 字以内。
每份试卷存储字节=20*100*2 + 20*400*2 + 4*800*2 = 26400 字节≈26KB,以 50KB 计算
假设全国 2000 所学校,每个学校 50 个专业,每个专业 10 张试卷
总计试卷存储占用=50KB*2000*500=50_000_000KB≈50GB
请求量级估算
请求试卷:(课上已作出估算,直接作为参考)
1000 万* 20(课)/ 20(周末不考试) / 4(每天 4 堂考试)/ 1 分钟= 250 万请求/分钟≈ 5 万/每秒
服务器规划
3 台 Redis,主-从-从
3 台 sentinel
每台服务器 128G 内存
Redis 部署设计
3 台 Redis 均提供读服务。根据估算,Redis 预计有 5wQPS,而实际生产环境中,单台 Redis 的读写性能接近 5w,3 台 Redis 共同提供读服务足以满足读写性能需求。由于考试期间不会有写入,因此所有主库从库都能读取,无需考虑一致性问题
采用 redis-sentinel 模式
其他说明
如果没有 128G 内存的机器,或者考虑到 Redis 实例太大有风险,那么可以将 Redis-sentinel 架构改为集群架构
评论