軟體程式開發流程 – 系統設計

這個系列是根據Amazon面試準備內容,軟件開發工程師面試準備 (Software Development Engineer Interview Preparation, SIP) 進行整理,該部分說明了一個系統設計問題以及軟體工程師應如何處理、分析和解決此類技術問題。


概述

萬事起頭難,設計系統也是一樣的,因此這邊我整理了,當我們要開始設計一個系統應該要怎麼起頭。這邊我們除了講述概念也會使用範例去說明。

架設我們這次的題目是 – 『線上書店』

釐清問題

首先不要第一時間直接就開始,多和案方進行討論,不要擔心問得太多,只要能多先想到一個情境,對未來的討論都會很有幫助。

基礎功能

  1. 系統規模
    1. 多少使用者
    2. 使用者分佈(國家、地區)
    3. 每秒要處理多少請求
    4. 每個請求反應時間要小於多少
  2. 效能要求
    1. 每秒要處理多少請求
    2. 什麼請求會是最大的負擔(訂購、預定、查看等等)
  3. 主要的服務有哪些
    1. 有哪些主要的使用者案例
    2. 資料要儲存哪一些(有哪些主要物件)
## 線上書店使用情境

1. 系統規模
    1. 多少使用者 → 6百萬
    2. 使用者分佈(國家、地區) → 只在台灣
2. 效能要求
    1. 每秒要處理多少請求→ 300TPS
    2. 每個請求反應時間要小於多少 → 0.3 s
    3. 什麼請求會是最大的負擔 → 查詢書籍 和 最新書籍
3. 主要的服務有哪些
    1. 有哪些主要的使用者案例
        → 買書
        → 查書
        → 收藏書
    2. 資料要儲存哪一些
        → 書本
        → 顧客
        → 訂單

設計流程

系統架構主要可以分成三大部分

  1. 資料儲存 Data
    • 儲存的方式: 資料庫、記憶體、檔案
    • 儲存的類型: 長文字、圖像
  2. 提供服務 Service
    • 有哪些資料會進行傳輸
    • 有哪些子服務
    • 子服務會怎麼樣互相互動
  3. 應用端口 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
            - 查看書籍頁面 → 訂購按鈕
            - 搜尋頁面 → 搜尋按鈕

這邊我們簡述了幾個範例,但概念都有述說到,下次再開發新功能、或是面試時被問到關於開發新產品時,就可以使用這個當成概要,既不會少討論到,也比較不會緊張。


Add a Comment

發佈留言必須填寫的電子郵件地址不會公開。