架构实战营 - 模块 4- 作业
概述
基于 Redis Sentinel 集群,设计千万级学生管理系统的考试试卷存储方案。
关键性能需求回顾如下:
试卷请求 TPS:5 万/s
数据结构设计
试卷数据采用 List 进行存储,具体格式如下:
Key 格式为:
TestQuestions:<学校标识>:<科目标识>:<考试时间>:<试题版本>
Value 采用 List 进行存储,每道试题按顺序依次存储在 List 的元素中。
简要分析如下:
按照学校、科目作为标识,可将不同学校不同科目的试题分别存储到到不同的 k-v 数据中,一方面 5 万 QPS 请求会分散到不同的 k-v 上,另一方面也便于对数据进行管理维护
按照学校科目分 key 之后,其对应 Value 的 List 不会太长(不会有一门考试有成千上万道试题的情况),因此,获取整个 List 的数据可以在短时间内完成,不会存在性能问题
读写流程设计
顺序写入考试试题时,通过 RPUSH 操作写入试题内容。
修改某道考试试题时,通过 LSET 操作进行修改。
删除某道考试试题时,通过 LREM 操作进行删除。
获取试题列表时,通过 LLEN 获取总题数、通过 LRANGE 获取试题列表。
服务器资源估算
基于上述数据结构设计,对服务器资源估算分析如下:
按照学生管理系统总共承载 3000 所高校、平均每所高校 1000 门考试,平局试题内容 100K 计算,每年总共需存储的试题容量约为 300G。
假设 Redis 集群存储 2 年的数据作为热数据,其余数据每年在非考试期间进行归档。
对服务器性能进行一定程度的冗余以应对突发情况。
综合上述考虑,拟定服务器资源需求如下:
评论