(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的寫入是依靠硬碟的而快取是依靠記憶體,有基本計算機常識的話就可以知道...