写点什么

模块四作业

作者:心怀架构
  • 2021 年 11 月 21 日
  • 本文字数:711 字

    阅读完需:约 2 分钟

一.数据量及调用量预估

1.在校学生(试卷+试题): 2.4T

  • 2.离校学生(试卷+试题)(增量):每年 250 万,存储量为 0.6T

    3.试卷请求 QPS:5 万/秒

  • 4.提交试卷 TPS:1700/秒

  • 二.redis 数据结构存储设计

    1.试卷设计 - 使用 hash 结构

    (1)key:学校 ID + 课程 ID

    (2)field:页码 NO

    (3)value:试卷页具体内容,JSON 串

    学生作答速度不一样,所以按页请求数据,降低每次返回所占带宽。redis 单线程读取数据,提高请求响应速度。

    2.提交试卷 - 使用 Sorted Set 结构

    (1)key:学校 ID + 课程 ID + 学生 NO

    (2)score:题号 NO

    (3)value:题号作答结果,JSON 串

    按题号存储方便老师批改,方便指定老师批指定题目

    3.试卷批改、打分 - 使用 Sorted Set 结构

    (1)key:学校 ID + 课程 ID + 学生 NO + "score"

    (2)score:题号 NO

    (3)value:分数 + 批语

    与提交试卷结构对照,方便学生查看试卷和教师协作

    三.数据交互流程

    1. 出题,存储到 mysql 当中,题目整体的量级较小,选型 mysql 较为合适,普通的主备架构即可

    2. 数据预热同步,mysql 的试卷同步到 redis 集群当中,增加读取性能(redis 用于缓存,需要设置数据过期时间)

    3. 试卷读取

    4. 试卷提交,临时存储到 redis 中,提高 TPS

    5. 试卷持久化,redis 内存资源太贵,写入 redis 后使用消息队列异步落盘。由于试卷数据量大,且为非关系型数据,最终使用 hbase 存储。

    四.Redis sentinel 集群的服务器数量和性能

    1.单机 redis QPS 5~10W/s,满足最高 QPS 5W/s。所以 redis 服务一主一从即可。

    (如果成本足够,最好一主两从,防止主宕机之后,从再次宕机导致缓存穿透。即使临时加从节点,主从同步时 fork 会导致 redis 请求阻塞)

    2.哨兵最少 3 个,即 3 台机器(不能与服务部署在一台机器,防止机器异常导致剩 2 个哨兵选不出执行哨兵;哨兵节点为基数,防止脑裂)


    用户头像

    心怀架构

    关注

    还未添加个人签名 2020.05.26 加入

    还未添加个人简介

    评论

    发布
    暂无评论
    模块四作业