写点什么

架构实战营 - 模块 4- 作业

发布于: 2021 年 05 月 16 日

概述

基于 Redis Sentinel 集群,设计千万级学生管理系统的考试试卷存储方案。

关键性能需求回顾如下:

  • 试卷请求 TPS:5 万/s

数据结构设计

试卷数据采用 List 进行存储,具体格式如下:

Key 格式为:

TestQuestions:<学校标识>:<科目标识>:<考试时间>:<试题版本>

Value 采用 List 进行存储,每道试题按顺序依次存储在 List 的元素中。


简要分析如下:

  • 按照学校、科目作为标识,可将不同学校不同科目的试题分别存储到到不同的 k-v 数据中,一方面 5 万 QPS 请求会分散到不同的 k-v 上,另一方面也便于对数据进行管理维护

  • 按照学校科目分 key 之后,其对应 Value 的 List 不会太长(不会有一门考试有成千上万道试题的情况),因此,获取整个 List 的数据可以在短时间内完成,不会存在性能问题

读写流程设计

  1. 顺序写入考试试题时,通过 RPUSH 操作写入试题内容。

  2. 修改某道考试试题时,通过 LSET 操作进行修改。

  3. 删除某道考试试题时,通过 LREM 操作进行删除。

  4. 获取试题列表时,通过 LLEN 获取总题数、通过 LRANGE 获取试题列表。

服务器资源估算

基于上述数据结构设计,对服务器资源估算分析如下:

  1. 按照学生管理系统总共承载 3000 所高校、平均每所高校 1000 门考试,平局试题内容 100K 计算,每年总共需存储的试题容量约为 300G。

  2. 假设 Redis 集群存储 2 年的数据作为热数据,其余数据每年在非考试期间进行归档。

  3. 对服务器性能进行一定程度的冗余以应对突发情况。

综合上述考虑,拟定服务器资源需求如下:


用户头像

还未添加个人签名 2017.12.17 加入

还未添加个人简介

评论

发布
暂无评论
架构实战营 - 模块 4- 作业