在做 System Design 時,可以有幾個階段來協助思考,分別是:
- 釐清探索需求 Requirement,而對於產品有所謂的 :
- Functional 功能需求 : 是從使用者的角度來看,可以用「User要能夠…」做為開頭句來思考產品本身要達到的功能
- Non-Functional 非功能需求 : 從系統的角度來看,可以用「系統要能夠…」做為開頭句來思考,可以把這類需求理解成「品質」要求,例如 : 可擴展性、可靠性 reliability 、高 Performance 低 latency、可承受高 QPS 等等
- 架構 High-Level Architecture Design : 給初步的系統架構,依照資料流把會用到的相關元件題出,思考每一個部件優缺點,並概略把流程串起來
- Detail Deep dive : 更深入的說明要用的工具、算法、資料結構、框架,流程上資料怎麼進入、儲存、處理、輸出格式等等
除了以上事情之外,其實定義出「什麼不在討論範圍內 (out of scope)」,也是非常重要的,可以展示出「排定優先順序的能力」。雖然 System Design 範圍很大,但其實也是有不少模板和套路可以練習。可以多看看各式各樣系統的 high-level 設計,順便把其中自己不熟悉的知識補上。
Continue reading