System Design - paulip114/blog GitHub Wiki
設計一個可承受高流量(High Traffic)的網路服務,需要兼顧可擴展性(Scalability)、高可用性(High Availability)與容錯能力(Fault Tolerance)。
🚀 一、整體架構設計總覽
Client (Browser/App)
↓
CDN(Cloudflare、Akamai)
↓
Load Balancer(如 AWS ELB / Nginx / HAProxy)
↓
Web Application Servers(多台,Stateless)
↓
Cache Layer(Redis / Memcached)
↓
Database(主從架構 + 分庫分表)
↓
Object Storage(如 AWS S3)
↓
Background Workers(排程/佇列)
🧱 二、核心設計原則
1. 前端加速與保護
-
CDN(內容分發網路)
- 儲存靜態資源(圖片、CSS、JS)
- 幫助全球快取、降低原始伺服器壓力
- 防止 DDoS(Cloudflare 等有防火牆)
-
前端壓縮與快取策略
- 使用 Gzip/Brotli
- 設定 Cache-Control headers
2. 流量分攤:Load Balancer
-
使用 Load Balancer 做流量分發(Layer 4 或 Layer 7)
- 如 AWS ELB、Nginx、HAProxy
- 支援健康檢查、流量導向健康節點
-
支援 Auto Scaling
- 搭配 Kubernetes HPA 或 AWS Auto Scaling Group 動態擴展
3. 應用層:Stateless + 可橫向擴展
-
設計 Stateless 的應用服務
- Session 放 Redis(或 JWT 無狀態驗證)
- 應用層可快速擴展多台實例
-
部署方式
- Kubernetes(K8s)管理容器化部署
- 或使用 Serverless(如 AWS Lambda)處理突發高峰
4. 快取策略
- 前端快取(CDN)
- 應用層快取(Redis/Memcached)
- 頁面快取(Full Page Cache)
- 熱門資料快取(查詢結果、排行榜)
- 資料庫查詢結果快取
- Read-heavy 的系統可以顯著降低 DB 負載
5. 資料庫設計
-
主從架構(Master-Slave)
- 主庫處理寫入,從庫處理讀取
-
分庫分表(Sharding)
- 按用戶 ID、地區等方式分資料表或資料庫
-
資料庫查詢優化
- 索引、避免 N+1 query、使用 EXPLAIN
-
備援策略
- 定期備份、異地備援
6. 非同步處理
- 背景任務與 Queue
- 使用 RabbitMQ、Kafka、SQS 等佇列系統處理繁重任務(如寄信、影像處理)
- 排程任務(CronJob)
- 使用 Sidekiq、Celery、Bull 等背景工作系統
7. 服務監控與容錯
- 監控工具
- Prometheus + Grafana、Datadog、New Relic
- 異常告警
- 設定 SLA、健康檢查、錯誤告警
- 容錯與自動修復
- Kubernetes 具備 Pod Restart、自癒能力
- 可用性 > 99.99% 需要多 AZ(Availability Zone)
8. API 設計與限流
-
Rate Limiting
- 保護服務避免被濫用
- 可用 Redis + Token Bucket 或 Leaky Bucket 演算法實作
-
API Gateway
- 統一入口管理、驗證、限流(如 Kong、AWS API Gateway)
🔒 三、安全性設計
- HTTPS(全站)
- WAF(Web Application Firewall)
- 限制 IP/國家來源
- CSRF/XSS/SQLi 保護
- 使用 OAuth2 / JWT 做身分驗證
💡 四、針對不同情境的設計策略
情境 | 解法 |
---|---|
高讀取量 | 前端 CDN + Redis Cache + 從庫 |
高寫入量 | 分庫分表 + 高效寫入 Queue |
熱門活動 | 流量預估 + Auto Scaling + 緩存預熱 |
用戶生成內容(圖片) | 上傳至 S3 / CDN 儲存,非同步轉檔 |
排行榜 / 動態 | Redis 排行榜 + 快取更新策略 |
🔁 五、彈性擴展設計(Scalability)
- 水平方向(Horizontal Scaling):
- Web Server、Redis、DB Slave 都能橫向擴展
- 垂直方向(Vertical Scaling):
- 預留空間給核心服務(DB、隊列)
🛠️ 六、推薦技術選型
類別 | 推薦技術 |
---|---|
Web Framework | Node.js / Go / Spring Boot / .NET Core |
快取系統 | Redis / Memcached |
Queue 系統 | Kafka / RabbitMQ / BullMQ |
部署平台 | AWS / GCP / Azure / Kubernetes |
監控工具 | Prometheus / Grafana / ELK / Datadog |
DB | PostgreSQL / MySQL / MongoDB(視需求) |
CDN | Cloudflare / Akamai / Fastly |