Distributed System
Distributed System 分散式系統設計,Net 8 服務,啟用 nginx upstream 從單機到多實例後,遇到的設計問題。
核心概念:Stateless Service 什麼是 Stateless? 定義:服務的每個實例不保留任何與特定請求或使用者相關的狀態資訊。
為什麼需要 Stateless? ┌─────────┐ ┌──────────────┐ ┌──────────┐ │ Client │────▶│ Load Balancer│────▶│Instance A│ └─────────┘ └──────────────┘ ├──────────┤ │ │Instance B│ │ ├──────────┤ └─────────────▶ │Instance C│ └──────────┘ 當你的系統從 1 台機器擴展到 N 台時:
請求分散:用戶的連續請求可能落在不同實例 實例隨時變動:Auto-scaling 會新增/移除實例 故障轉移:某個實例掛掉,流量會轉到其他實例 ❌ 禁止使用的狀態儲存方式 方式 為什麼不行 實際案例 IMemoryCache 只存在單一實例 User A 的資料在 Instance A,但下次請求到 Instance B static 變數 無法跨實例共享 計數器在每個實例都是獨立的 Singleton 內部狀態 每個實例有自己的 Singleton Session 資料只存在啟動該請求的實例 檔案系統 本地儲存 上傳的檔案只在一台機器上 ✅ 狀態必須外部化 所有狀態都必須存放在所有實例都能存取的外部系統: