架構實戰營模塊四課後作業

InfoQ 2022-01-07 23:30:28 阅读数:620

設計千萬級學生管理系統的考試試卷存儲方案

【作業要求】
基於模塊4第6課的估算結果和 Redis sentinel 的初步方案設計,完善考試試卷存儲方案,具體包括:
•完善Redis的數據結構設計,明確具體使用哪種 Redis 數據結構。
•設計具體的讀寫流程(可以文字描述也可以序列圖描述,序列圖要有文字輔助說明)。
•對照模塊4第6課的性能估算結果,計算 Redis sentinel 集群的服務器數量和性能。

答案:
  • Redis數據結構
用 String 類型的數據結構來存考卷。
數據結構設計:
Key: 學校ID + 科目ID + 考試ID
Value:試卷內容 Json

  • 讀寫流程
試卷平時存儲在mysql或者hdfs等文件式存儲中,在考試開放之前通過key加載到redis集群中,redis集群完成主從複制。
考試開始時,客戶端或瀏覽器調用服務端接口,通過計算節以及對應的key取出對應的考試Json串解析,並加載到前端。

  • 讀寫性能、集群規模
請求試卷:1000萬* 20(課)/ 20(周末不考試)/ 4(每天4堂考試)/ 1分鐘= 250萬請求/分鐘≈ 5萬/每秒。
Redis單機已經能滿足5萬每秒的簡單查詢,哨兵模式至少三個哨兵實例,所以采用一主兩從,由於寫入不頻繁,所以不用做讀寫分離,預計整體集群可支持15萬QPS。
存儲要求:500(學校數)*
20(20 門課)*2 (考試次數)*2(學期)
 
*
20KB ≈ 800M 假設每5年更新一輪試卷,總存儲量在4000M = 4G內存 留50%富餘量,則集群為8G內存機器三臺搭建Redis sentinel集群即可滿足存儲要求。 

版权声明:本文为[InfoQ]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201072330277444.html