結論先講

最佳化的順序比最佳化本身更重要。 Redis cache(+6.5 倍)的 ROI 是讀寫分離(+30%)的 20 倍,但很多人先做讀寫分離。Multi-worker(+93%)是改一行配置,但有人先去學 K8s。這篇把 61 篇文章的所有優化方案按 ROI 排序,告訴你「先做什麼、後做什麼、什麼不用做」。


五層結論總覽

F2E 前端

結論:差距只有 6 分,看生態不看效能。

發現數據篇章
Lighthouse 分數差距極小93~99 分[[micro-service/15-f2e-lighthouse-ranking|#15]]
Bundle size 才是真正差異Svelte 326KB vs Angular 784KB[[micro-service/15-f2e-lighthouse-ranking|#15]]
Astro Islands 簡單頁面反而慢> 2.5 秒 LCP[[micro-service/16-f2e-render-strategy|#16]]
SSR 增加 server 壓力CPU +30~50%[[micro-service/16-f2e-render-strategy|#16]]

行動:選你最熟的框架。React 是安全牌。不要為了 6 分換框架。

B2E 後端

結論:Go 最穩、Spring Boot 讀取最強、Express-TS 是安全牌。免費午餐比換框架效果大。

發現數據篇章
bcrypt 是所有框架的共同天花板9/9 框架觸發[[micro-service/06-bcrypt-bottleneck|#6]]
CRUD 和混合場景排名完全不同Spring Boot 8th→1st[[micro-service/24-mixed-overview|#24]]
WS/SSE 所有框架都能撐500 VU 零錯誤[[micro-service/26-websocket-sse|#26]]
Cold Start Go 最快6.7s vs NestJS 30.3s[[micro-service/27-queue-redis-coldstart|#27]]
免費午餐組合提升 13 倍Redis+keepalive+worker[[micro-service/21-infra-free-lunch|#21]]

行動:先做免費午餐,撐不住再考慮換框架或拆微服務。

DB 資料庫

結論:PG 通用、MySQL 寫入強、「怎麼寫」比「用什麼 DB」影響更大。

發現數據篇章
PG JSONB 比 MySQL JSON 快3.2 倍[[micro-service/17-db-pg-vs-mysql|#17]]
MySQL 寫入密集場景快2.5 倍[[micro-service/17-db-pg-vs-mysql|#17]]
Bulk Insert vs 逐筆26 倍![[micro-service/18-db-bulk-and-index|#18]]
ORM vs Raw SQL 差距小< 10%[[micro-service/18-db-bulk-and-index|#18]]
Pool=50 vs Pool=5 高壓+70%[[micro-service/19-db-pool-and-infra|#19]]
讀寫分離效果不如 Redis+30% vs +650%[[micro-service/61-db-read-write-splitting|#61]]

行動:用 PG、調 pool size、用 Bulk Insert。讀寫分離是最後手段。

Storage 儲存

結論:PG + Redis 夠用,需要時再加。

發現數據篇章
Redis KV 最快5,346 req/s[[micro-service/20-storage-redis-es|#20]]
PG JSONB ≈ MongoDB只差 4%[[micro-service/20-storage-redis-es|#20]]
ES 搜尋比 PG LIKE 快2.6 倍[[micro-service/56-search-mysql-pg-elk|#56]]

行動:起步用 PG。讀多加 Redis。搜尋量大加 ES。不要一次全裝。

Infra 架構

結論:免費午餐效果 > 換框架。1000 人以內不需要 K8s。

發現數據篇章
Redis cache 讀多場景+6.5 倍[[micro-service/21-infra-free-lunch|#21]]
nginx keepalive+7%(零成本)[[micro-service/21-infra-free-lunch|#21]]
Multi-worker+93%[[micro-service/21-infra-free-lunch|#21]]
水平擴展 2 台+53%(4 台卡 DB)[[micro-service/22-infra-scaling-and-k8s|#22]]
k3s < Docker Compose100 人以上報錯[[micro-service/41-docker-compose-vs-k8s|#41]]

行動:先做三個免費午餐,再考慮水平擴展,最後才上 K8s。


最佳化路線圖(按 ROI 排序)

Tier 1:零成本 / 改配置(先做完這些)

排序優化效果成本篇章
1nginx 開 keepalive+7%一行配置[[micro-service/21-infra-free-lunch|#21]]
2開多 worker(PM2/gunicorn)+93%一行配置[[micro-service/21-infra-free-lunch|#21]]
3調 DB connection pool+70%一行配置[[micro-service/19-db-pool-and-infra|#19]]
4批次寫入改用 Bulk+2600%改幾行 code[[micro-service/18-db-bulk-and-index|#18]]
5檢查 DB Index+300~500%加 migration[[micro-service/18-db-bulk-and-index|#18]]

Tier 1 合計效果:可能 5-10 倍提升,花不到一天。

Tier 2:低成本 / 加服務(Tier 1 做完才做)

排序優化效果成本篇章
6加 Redis cache(讀多場景)+650%加幾行 code + Redis 服務[[micro-service/33-cache-correct-usage|#33]]
7加 nginx 反向代理+7% + 安全性加 nginx 配置[[micro-service/21-infra-free-lunch|#21]]
8降低 bcrypt rounds(內部系統)+400% auth改一行[[micro-service/06-bcrypt-bottleneck|#6]]

Tier 3:中成本 / 架構調整(Tier 2 撐不住才做)

排序優化效果成本篇章
9水平擴展(2-4 台)+53%多台機器 + LB[[micro-service/22-infra-scaling-and-k8s|#22]]
10DB 讀寫分離+30~50%Replica + 路由邏輯[[micro-service/61-db-read-write-splitting|#61]]
11加 Elasticsearch(搜尋)搜尋 +260%ES 叢集 + 資料同步[[micro-service/56-search-mysql-pg-elk|#56]]
12換 DB(PG → MySQL 寫入場景)+250% 寫入遷移成本高[[micro-service/32-pg-migration-guide|#32]]

Tier 4:高成本 / 重構(確定需要才做)

排序優化效果成本篇章
13拆微服務看場景Event-Driven + 監控 + CI/CD[[micro-service/39-when-to-split|#39]]
14換後端框架4-5 倍(Django→Go)團隊學習 + 重寫[[micro-service/37-framework-selection-methodology|#37]]
15上 K8s自動化運維(不提升效能)學習 + 維護[[micro-service/41-docker-compose-vs-k8s|#41]]
16微服務間改 gRPC+30%(Protobuf).proto 定義 + code gen[[micro-service/58-communication-protocols|#58]]

常見的錯誤順序

錯誤正確做法
DB 慢 → 先做讀寫分離DB 慢 → 先調 pool + 加 index + 加 Redis
系統慢 → 換 Go系統慢 → 先做免費午餐(13 倍提升)
要擴展 → 上 K8s要擴展 → 先 Docker Compose + nginx LB
搜尋慢 → 上 Elasticsearch搜尋慢 → 先用 PG pg_trgm + GIN index
要微服務 → 全部重寫要微服務 → Strangler Fig 漸進式替換
前端慢 → 換 Svelte前端慢 → 先做 code splitting + lazy loading

每一個「正確做法」的 ROI 都比「錯誤做法」高 5-20 倍,而且風險低得多。


一張圖看完

UV 10:    什麼都不用做,先跑壓測確認基線
          ↓
UV 50:    Tier 1(keepalive + worker + pool + bulk + index)
          ↓
UV 100:   Tier 2(Redis cache + nginx)
          ↓
UV 500:   還是 Tier 1+2,確認都做了
          ↓
UV 1000:  Tier 3(水平擴展 2 台 + 讀寫分離考慮)
          ↓
UV 5000:  Tier 4(微服務 + Go 核心路徑 + K8s)

大部分應用永遠停在 UV 100-500。Tier 1 + Tier 2 就能解決 90% 的效能問題。


這是整個系列的最終地圖

第 1 篇「功能測試回答能不能動,壓力測試回答能撐多少人」出發,到這裡你有了完整的答案:

  • 能撐多少人第 23 篇 容量規劃表
  • 該先做什麼 → 本篇的 Tier 1-4 路線圖
  • 每一層選什麼 → 五層結論總覽(本篇上半部)
  • 具體怎麼做 → 61 篇各自的實作指南

完整目錄見 系列首頁



下一篇

F2E 結論:前端框架最終推薦 — 路線圖畫好了,接下來每一層各一篇結論,從前端開始。

本系列文章

完整 68 篇目錄見 系列首頁

← 上一篇:DB 讀寫分離:值不值得做?什麼時候做? → 下一篇:F2E 結論:前端框架與渲染策略最終推薦