Bootstrap

【初恋系列】那年的试卷我们再肝一遍(试卷存储详细设计)

学生系统试卷存储详细设计

一 性能背景及架构

【登录】

1.登录次数:3000/s;

2.登录记录:存储数据量36亿条,存储容量43G,写入TPS =登录TPS = 3000/s,读取TPS无需特别设计。

【注册】

1.注册TPS = 3/s,可以忽略不计;

2.在校学生数据存储:基本数据= 2G,图片数据= 10T;

3.离校学生数据存储:基本数据每年增长500M,图片数据增长2.5T。

【考试】

1.在校学生考试结果存储:2.4T;

2.离校学生考试结果存储:每年增长0.6T;

3.试卷请求QPS:5万/s;

4.提交试卷TPS:1700/s。

二 需求内容及详细设计

基于模块4第6课的估算结果和Redis sentinel的初步方案设计,完善考试试卷存储方案,具体包括:

 

1 完善Redis的数据结构设计,明确具体使用哪种Redis数据结构。

【方案】

Key:学校id+试卷ID + paper;

Value:选择String,试卷对象序列化数据。

【具体方案】

新增试卷:直接新增试卷数据;

删除试卷:直接删除试卷数据。

更新试卷:直接更新试卷

查询试卷:直接查询试卷

【方案分析】

增删改查都直接根据学校id+试卷id操作的,效率高。

 

2 设计具体的读写流程(可以文字描述也可以序列图描述,序列图要有文字辅助说明)。

写:(1)试卷类需实现序列化

(2)将试卷信息写入到试卷对象中

(3)将试卷对象序列化

(4)根据学校id+试卷id将序列化的数据设置到redis中

读:(1)根据学校id+试卷id获取试卷的序列化数据

(2)将序列化数据反序列为试卷对象

 

3 对照模块4第6课的性能估算结果,计算Redis sentinel集群的服务器数量和性能。

试卷写入:试卷写入没有高性能、高可用需求,

试卷读取:根据性能估算结果可以看到试卷请求的QPS为5万/s,redis单台的QPS性能为5万至10万/s,所以单纯性能上来讲,一台redis就足够了。但考试的时间来不及等待,是非常的重要,所以需要做到高可用,采用 Redis sentinel集群,而Redis sentinel集群的特点至少需要3台机器支撑才能实现高可用,所有选择部署3台机器。机器1部署master节点、sentinel节点,机器2和机器3都部署一套slave节点、sentinel节点。

 

综上所述需要3台机器作为试卷的Redis sentinel集群