【從一台 Server 到分散式架構】第 25 篇:小明他們的系統變成這樣——完整架構總覽

小明坐在白板前,準備向新加入的工程師介紹系統架構。

他拿起筆,從最左邊開始畫:

「一開始,我們只有這樣……」

他在白板上畫了一個框:「前端」→「後端」→「資料庫」。

「然後,用戶越來越多,這樣就不夠了……」

接著,他一個元件一個元件加上去,每加一個都說了一個故事。二十分鐘後,白板上密密麻麻,新工程師眼睛都直了。

「等等,」新工程師說,「這些東西是怎麼一步一步長出來的?每個都是為了解決什麼問題?」

這就是這篇要做的事:把整個演進過程梳理一遍,給你一張看得懂的全景圖。


從起點到現在:架構演進的主軸

整個系列,架構演進可以分成幾個大的里程碑:

第一階段:單體起點(第 01-03 篇)

[前端] → [後端 API] → [資料庫]

一前一後一 DB。流量小時,完全夠用。

第二階段:資料庫優化(第 04-06 篇)

[前端] → [後端 API] → [Redis Cache] → [主庫(寫)] + [從庫(讀)]

加了索引、加了快取、做了讀寫分離——在不加機器的前提下,讓系統撐得更久。

第三階段:非同步化(第 07-08 篇)

[後端 API] → [Message Queue] → [Background Workers]

耗時的工作(發信、產生 PDF、推送通知)丟進佇列,非同步處理。

第四階段:水平擴充(第 03、09-10 篇)

[Load Balancer] → [後端 API × N 台]
                   ↑ Session 放 Redis,無狀態設計

多台後端、無狀態設計,CAP 理論成為選型依據。

第五階段:微服務化(第 11-12 篇)

[API Gateway] → [訂單服務] [支付服務] [通知服務] [用戶服務]……

單體拆成多服務,各自部署、各自擴展。

第六階段:高流量防護(第 13-15 篇)

Rate Limiter → 限流 / 降級 / 熔斷
DB Sharding → 水平分片
多讀庫 → 讀流量分散

第七階段:多樣化儲存 + 即時能力(第 16-17 篇)

PostgreSQL(關聯)+ Elasticsearch(搜尋)+ InfluxDB(時序)
WebSocket Server + Redis Pub/Sub(即時推送)

第八階段:可觀測性 + 容器化(第 18-22 篇)

Prometheus + Grafana(監控)
結構化 Log + Jaeger(追蹤)
Docker(容器化)+ Kubernetes(編排)
etcd(分散式協調)

第九階段:AI 能力(第 23-24 篇)

LLM API + RAG + pgvector(AI 助理)
SSE 串流 + 推理佇列(AI 架構)

完整架構圖


每個元件,解決了哪個問題

元件引入篇章解決的問題
Load Balancer第 03 篇流量分散到多台後端
Redis Cache第 05 篇降低 DB 讀取壓力,加快熱門資料存取
讀寫分離第 06 篇讀多寫少場景下的 DB 擴展
Message Queue第 08 篇非同步處理,削峰填谷
無狀態設計第 09 篇多台後端可以不依賴本機狀態
Rate Limiter第 13 篇防止流量突增壓垮系統
DB Sharding第 15 篇單一 DB 容量不夠時水平分片
Elasticsearch第 16 篇全文搜尋,關聯式 DB 做不好
WebSocket + Pub/Sub第 17 篇即時推送通知
分散式鎖 / etcd第 18 篇多台機器協調,避免重複執行
Prometheus + Grafana第 19 篇監控指標、視覺化、告警
結構化 Log + Jaeger第 20 篇Log 分析、跨服務追蹤
Docker第 21 篇環境一致性、部署標準化
Kubernetes第 22 篇容器排程、自癒、自動擴縮
LLM + RAG + pgvector第 23 篇AI 根據私有知識庫回答問題
SSE 串流 + 推理佇列第 24 篇AI 回應體驗、GPU 資源管理

但大部分系統不需要所有這些

看到這張完整架構圖,可能會覺得:「好複雜,我們要全部都做嗎?」

不需要。

每個元件的引入,都是因為系統發展到某個規模,某個地方出現了真實的痛點。

重要的不是架構有多完整,而是每個元件你知道它解決什麼問題、什麼時候應該引入。

如果你的系統只有幾百個同時在線用戶,一前一後一 DB 加個 Redis 快取,可能完全夠用。你不需要 K8s,不需要 Kafka,不需要 Sharding。

引入複雜度,是要付出代價的:學習成本、維運成本、除錯複雜度。

小明在這個過程中學到最重要的一件事:

好的系統設計,是用當下夠用的最簡單架構,同時知道當哪個地方開始痛了,要往哪個方向走。


小結與預告

這篇不是新概念,而是一次完整的回顧——把 25 篇的演進壓縮成一張全景圖和一張對照表。

接下來的幾篇,我們要用同一套思維,去看幾個知名的系統是怎麼設計的:

  • 第 26 篇:YouTube——大規模影片儲存與 CDN
  • 第 27 篇:Uber——即時位置與派車佇列
  • 第 28 篇:Twitter/社群動態——讀多寫多與時序設計
  • 第 29 篇:ChatGPT 類系統——串流、佇列與模型服務

同樣的思維框架,不同的場景,看不同的取捨。

相關推薦

2026-04-07
【從一台 Server 到分散式架構】第 31 篇:從面試題反推架構——用本系列思維拆解系統設計考題
「設計一個 URL 短網址服務」「設計一個訊息系統」——系統設計面試問的不是背答案,而是思考方式。這篇整理了一套可以重複使用的面試框架,並用兩道例題示範如何從需求出發,一步步推導出架構、說清楚取捨。
2026-04-06
【從一台 Server 到分散式架構】第 30 篇:限流、排隊與降級實戰——開賣與直播場景
平常流量是 1000 QPS,但「開賣」的那一刻,瞬間湧入 50 萬個請求——系統要怎麼活下來?這篇用課程平台的限量課程開賣和直播開播場景,把第 13 篇學到的限流、降級、熔斷,落地到一個真實的高流量設計,走過每個防護層是怎麼工作的。
2026-04-05
【從一台 Server 到分散式架構】第 29 篇:用同樣的思維看 ChatGPT——AI 聊天系統架構
ChatGPT 看起來像一個聊天視窗,背後卻有幾個特殊的設計挑戰:回應是串流的、推理非常耗資源、每輪對話要記住上下文、系統要支援幾千萬用戶同時使用。這篇用熟悉的架構思維,拆解 AI 聊天系統的關鍵設計。
2026-04-04
【從一台 Server 到分散式架構】第 28 篇:用同樣的思維看 Twitter——社群動態與時序設計
Twitter 的核心功能看起來很簡單:發推文、看動態、按讚留言。但「動態牆」背後藏著一個棘手的設計問題:你追蹤 200 個人,每個人都可能隨時發文——你打開 App 時,那條時序動態要怎麼快速組出來?這篇來看社群動態系統的兩種策略:推(Fan-out on Write)與拉(Fan-out on Read)。