(InterviewBit) System Design - Design Cache System
前言 這是InterviewBit中Storage Scalabiliy第一題,設計一個快取系統。 我希望可以透過InterviewBit中的文章與題目,打開自己系統設計的視野,並且重裡面中得到關鍵詞彙,透過這些關鍵詞彙補足自己知識的不足。 其中會參考許多 jyt0532神 的許多文章 題目 替Twitter或是google設計快取系統,概念圖如下: 分析步驟 列出需求情境 估算 立定設計目標 深入探討設計方法 需求情境 需要多大的快取 我們的快取清除策略要如何 因為快取大小所以必須將舊資料刪掉 快取的寫入策略 Write through cache 當資料寫入時,同時寫入DB和Cache中 寫入因為需要寫入兩個系統(DB/Cache)所以有較高的延遲 Write around cache 當資料寫入時先寫入DB,當快取被讀取發現遺失資料時,再將資料從DB同步到快取中 因為讀取是從快取中讀取,但是在讀取時判斷到有新增資料沒進入快取,會有較高的讀延遲。 但寫和重複讀不會有特別的延遲 Write back cache 直接將資料寫入到快取中,在同步到資料庫裡 風險 - 畢竟快取是in-memory會有遺失風險 優點 - 高寫入效率(寫得快可附合的流量大) 可以透過replica快取降低memory消失的風險 評估 預先知識 QPS - Queries Per Second TPS - Transactions Per Second UV - Unique Visitor RPS - Requests Per Secornd 獲取設計前條件 目前得知的條件 快取大小會是30TB QPS會是10M(每秒一千萬) 估算機器數量 假設我們每台機器都有72G的記憶體,則要存入30TB的資料則需要 30TB / 72G = 420(大約),而這是剛剛好的數目,有可能需要增加,因為我們每秒要附和10M的搜尋流量。 設計目標 設計目標三巨頭 Latency(延遲) Consistency(一致性) Availability(可使用性) 快取系統的設計目標 快取的用意就在於降低延遲,DB的寫入是依靠硬碟的而快取是依靠記憶體,有基本計算機常識的話就可以知道...