---
# System prepended metadata

title: Blog 6｜系統設計 介紹
tags: [部落格]

---

# Blog 6｜系統設計 介紹

- Reference :
    - https://hogantechs.com/zh_tw/system-design-intro-software-frontend-backend/
- 系統設計是指在軟體工程和系統工程中，為滿足特定需求而規劃和規範系統各個組成部分的過程。這個過程包括選擇合適的技術、架構、流程和資源，以創建一個能夠高效運作且具備可維護性和可擴展性的系統

## 系統設計
- 可用性（Availability）: 可用停機時間來表達
    - | 可用性        | 停機時間（每年） | 停機時間（每月） | 停機時間（每天） |
      |---------------|------------------|------------------|------------------|
      | 99%           | 約 3.65 天       | 約 22 小時       | 約 1 小時        |
      | 99.9%         | 約 8.76 小時     | 約 43 分鐘       | 約 2.5 分鐘      |
      | 99.99%        | 約 52.56 分鐘    | 約 2.5 分鐘      | 約 15 秒         |
      | 99.999%       | 約 5.26 分鐘     | 約 0.25 分鐘     | 約 1.5 秒        |
      | 99.9999%      | 約 0.53 分鐘     | 約 1.5 秒        | 約 0.03 秒       |
- 可靠性（Reliability）：能夠承受故障的能力
    - MTBF: 平均故障間隔
    - MTTR: 平均修復時間
- 可擴展性（Scalability）：隨著需求增長而適應新的負載
    - 負載均衡（Load Balancing）、自動擴展（Auto-scaling）、分散式系統、消息隊列(Kafka, RabbitMQ)
    - 水平擴展 : 使用更多的伺服器
    - 垂直擴展 : 現有伺服器的裝置進行升級
- 可維護性（Maintainable）：易於修復、擴展和優化
    - 模塊化設計（Modular Design）: 分層架構、微服務架構
    - 自動化測試與部署 : Unit/Integration Test、CICD
    - 文檔與可讀性 : UML、Coding Style
- 容錯性（Fault Tolerance）: 部分元件故障仍能提供服務
    - 備份 (Replication)
    - 分區（Partitioning）
    - 檢查點 (Checkpointing)
- 高效性（Efficiency）: 提升系統效能
    - 緩存（Caching）
    - DB indexing
    - DB sharding
- 數據一致性（Data Consistency）: 確保數據在分散式系統中的一致性是可靠性的一部分。常見策略包括：
    - CAP 理論：Consistency、Availability、Partition Tolerance
    - 多版本控制（Version Control