🈚
首頁
🌐 Web 系統設計
💡

🌐 Web 系統設計

這份指南依據現實中最常見的情境,提供概括性的思考方向,幫助工程師在初期規劃時,選擇適合的開發工具及系統架構。

Database Selection

在實際情況中,如何使用關聯式資料庫(Relational Database)並設計出靈活高效的 Schema,是影響系統效能與安全性的關鍵。

1. Read/Write Heavy,Latency

2. Security:Auditing,Access Control

Time-series Database 常用在 IoT 場景、NoSQL Database 常用於大量快速回應的場境;

但要小心不要因為「可以隨時 Scaling」、「可以應付突發的 Concurrency」等尚未發生的需求,而失去了資料庫 Schema 的主軸。

API Design

API Design 需要每個參與系統開發的人員充分討論並理解。

很重要的兩個原則

  1. 保持簡潔,努力維持一致性。有好的基礎,才會有好的擴展性
  2. 永遠要考量成本,搜尋成本、讀寫成本、回應時間成本、網路費、程式碼維護成本等等

使用正規語言來理解 API、討論如何設計 API

API Endpoint。(圖片來源:
一般的 URL。(圖片來源:
  • 風格、模式
    • RESTful
    • RPC(Remote Procedure Call)
    • GraphQL
    • 事件驅動:WebHooks
    • 持續連結的 HTTP:HTTP Streaming
    • 全雙工:WebSockets(非 HTTP)
  • 安全性
    • 身份驗證與授權:OAuth
    • 存取範圍,存取操作限制
    • 速率限制
  • 回應說明與錯誤處理
    • Microsoft Azure REST API Guidelines:有許多硬性規定
    • Microsoft Graph REST API Guidelines:有許多軟性建議
    • PayPal API Responses:如何撰寫清楚的回應說明
    • Google Cloud API Design Guide:如何做好錯誤處理
    • Stripe API:如何做好錯誤處理

Version Control & Code Review Processes

  • 使用 Git 進行版本控制是最基本的;Commit 流程以及 Commit Message 能有規範更好
  • Code Review 確實執行,可降低日後維護成本
  • 測試覆蓋率與耗費成本正相關

Deployment & Hosting

這些繁瑣的環境參數設定及流程,務必要有清楚的版本控制。

  • Backup and Recovery:Docker
  • 流程自動化:CI/CD
  • Monitoring and Alerting:有的人比較在乎紀錄搜尋速度及分析功能,有的人比較在乎視覺化及警告串接功能

Load Balancing

如果上列步驟有確實完成的話,Load Balancing 就不是問題。 機器如果是自架,錢主要會花在買設備、買頻寬; 機器如果在雲端,錢就花在買穩定、方便的服務。

其他

  • UI/UX
  • Web Accessibility
  • User Feedback and Analysis
  • SEO

從 3 個層面來檢視 System Design

可靠性 Reliability

  • 硬體故障
  • 軟體錯誤
  • 人為疏失

可擴展性 Scalability

  • Load Parameters(負載參數)
  • Latency Percentiles
  • Throughput

可維護性 Maintainability

  • 可操作性(Operability)
  • 簡單(Simplicity)
  • 演化能力(Evolvability)(或稱 Extensibility、Modifiability、Plasticity)
🈚 Thiann Bô