這個系列是根據Amazon面試準備內容,軟件開發工程師面試準備 (Software Development Engineer Interview Preparation, SIP) 進行整理,該部分說明了一個系統設計問題以及軟體工程師應如何處理、分析和解決此類技術問題。
概述
萬事起頭難,設計系統也是一樣的,因此這邊我整理了,當我們要開始設計一個系統應該要怎麼起頭。這邊我們除了講述概念也會使用範例去說明。
架設我們這次的題目是 – 『線上書店』
釐清問題
首先不要第一時間直接就開始,多和案方進行討論,不要擔心問得太多,只要能多先想到一個情境,對未來的討論都會很有幫助。
基礎功能
- 系統規模
- 多少使用者
- 使用者分佈(國家、地區)
- 每秒要處理多少請求
- 每個請求反應時間要小於多少
- 效能要求
- 每秒要處理多少請求
- 什麼請求會是最大的負擔(訂購、預定、查看等等)
- 主要的服務有哪些
- 有哪些主要的使用者案例
- 資料要儲存哪一些(有哪些主要物件)
## 線上書店使用情境
1. 系統規模
1. 多少使用者 → 6百萬
2. 使用者分佈(國家、地區) → 只在台灣
2. 效能要求
1. 每秒要處理多少請求→ 300TPS
2. 每個請求反應時間要小於多少 → 0.3 s
3. 什麼請求會是最大的負擔 → 查詢書籍 和 最新書籍
3. 主要的服務有哪些
1. 有哪些主要的使用者案例
→ 買書
→ 查書
→ 收藏書
2. 資料要儲存哪一些
→ 書本
→ 顧客
→ 訂單
設計流程
系統架構主要可以分成三大部分
- 資料儲存 Data
- 儲存的方式: 資料庫、記憶體、檔案
- 儲存的類型: 長文字、圖像
- 提供服務 Service
- 有哪些資料會進行傳輸
- 有哪些子服務
- 子服務會怎麼樣互相互動
- 應用端口 View
- 有哪些主要接口: 網頁、手機
- 主要的組成有哪些:
- 有哪些主要的頁面 Page
- 有哪些主要要顯示的內容 Content
- 有哪些主要要輸入的地方 Box
- 有哪些主要要開始行動的按鈕 Button
雖然說沒有固定順序,但通常會根據自己角色負責(或是擅長的地方)開始討論:
- Backend: Data → Service → View
- Frontend: View → Service → Data
## 線上書店設計流程範例
1. 資料儲存
→ 資料庫
→ 顧客
- 名稱
- 顧客編號
→ 書本
- 書名
- 作者
- 書本編號
→ 訂單
- 訂單號
- 付款方式
- 顧客編號
- 書本編號(多個)
2. 提供服務
→ 資料傳輸方式
→ API
- XYZ.com / BOOKS / {id,Author,Price} [GET,POST...]
- XYZ.com / CUSTOM / {id,Name} [GET,POST...]
- XYZ.com / ORDER / {id,payment} [GET,POST...]
→ 子服務
- 圖片存取服務
- 書籍內容服務
- 付款服務
- 訂購服務
→ 子服務互動
→ 從 書籍內容服務 進入 訂購服務 ,隨後呼叫 付款服務
3. 應用端口
- 主要以網頁為主
- 有哪些主要的頁面 Page
- 查看書籍頁面
- 搜尋頁面
- 有哪些主要要顯示的內容 Content
- 查看書籍頁面 → 書名、簡介、封面圖
- 搜尋頁面 → 搜尋指引、搜尋方式說明
- 有哪些主要要輸入的地方 Box
- 搜尋頁面 → 查詢框
- 有哪些主要要開始行動的按鈕 Button
- 查看書籍頁面 → 訂購按鈕
- 搜尋頁面 → 搜尋按鈕
這邊我們簡述了幾個範例,但概念都有述說到,下次再開發新功能、或是面試時被問到關於開發新產品時,就可以使用這個當成概要,既不會少討論到,也比較不會緊張。