我花了近十年時間撰寫文章,探討如何幫助工程師學習新技能並提升職涯發展。所以,如果我們之前有過交流,你可能已經知道我人生中有兩大嗜好:
首先是系統設計。
簡而言之, 系統設計是理解系統需求並建立滿足這些需求的架構的過程。
在人工智慧時代,僅僅成為一名才華橫溢的程式設計師是不夠的。要想在這個行業真正脫穎而出,你需要成為一個能夠架構系統的工程師。這意味著你需要了解關鍵元件如何協同工作、如何擴展,以及如何在巨大的壓力下保持穩健運作。
很少有學科像系統設計那樣重視嚴謹的思考。
從一開始就確保軟體架構正確,就能打造出像 Zoom 一樣在新冠疫情期間引領遠距辦公新時代的強大韌性。如果忽略了任何細節,就可能釀成像 Okta 那樣的重大災難,導致攻擊者在 2023 年劫持多個客戶的管理員會話。事關重大——不僅關乎世界,也關乎你的職業生涯——因此,你必須對系統設計理論擁有絕對的精通。
至於我的第二大愛好呢?那就是咖啡了。
我認為這種熱情無需特別解釋。不過,這兩種興趣之間存在著一些明顯的相似之處,這一點應該也不足為奇。
就像咖啡師為早晨的繁忙時段做準備,調整研磨機,並完美地把握每一杯咖啡的萃取時間一樣,系統設計專業的學生必須評估流量模式,校準資源,並協調服務,以便每個用戶都能享受流暢、可靠的體驗。
在本指南中,我將以咖啡師的視角,幫助你理解關鍵的系統設計概念,咖啡師的任務是保持店鋪順利運營,讓顧客滿意地享用咖啡。
別擔心:我保證這不會變成那種谷歌搜尋新食譜的人都耳熟能詳的「奶奶家過暑假」的故事。但我確實認為,這個比喻有助於真正理解和應用系統設計的概念——尤其是在今天,隨著人工智慧的融入,現代系統的複雜性達到了前所未有的高度。
最後要說明的是,本指南並非僅針對軟體工程師,也針對產品經理、資料科學家、機器學習工程師,以及任何在2026年需要設計可擴展系統的專業人士。
以下是您將獲得的物品:
系統設計從2000年代初到如今的人工智慧時代是如何演變的。
現代軟體架構的十大核心概念。
智慧、可擴展系統的基本功能性和非功能性考量。
主要建築類型和風格及其應用場景。
真實案例研究,包括備受矚目的系統設計成功案例、失敗案例和後續改進案例。
以下是一些拓展閱讀建議,可幫助您補充學習。
那麼,請找個座位坐下(當然,最好再來杯濃縮咖啡),讓我們開始吧。
我每天都能看到才華洋溢的工程師們,他們精通演算法和資料結構,編寫出優雅且無bug的程式碼。這固然很棒。但是,當需要建立服務數百萬用戶、處理PB級資料或驅動下一代人工智慧的系統時,則需要不同的技能。
到了 2026 年,這方面的技能與十年前相比已經大不相同。

儘管許多基本模式仍然適用,但現代系統設計正處於兩股強大潮流的交匯點:成熟的雲端原生實踐和人工智慧原生工作負載的爆炸性增長。單憑編碼技能已不足以帶領團隊跨越這一交會點——而周密的架構才能做到。
亞馬遜透過AWS將服務導向的架構和雲端基礎設施主流化,從而鋪平了道路;而Google則憑藉MapReduce、Spanner和Kubernetes等技術提高了行業標準。它們的共同影響推動了整個產業從緩慢的單體部署轉向模組化、自癒式服務。

下一個飛躍將由大型語言模型(LLM)、檢索增強生成(RAG)和自主代理驅動。智慧不再被附加在邊緣——它駐留在請求路徑中,即時學習、推理和適應。這種轉變為延遲、可用性和吞吐量這三個經典問題帶來了新的挑戰:
隨著資料變化,各個元件將如何學習與適應?
即時知識儲存在哪裡?由誰來管理?
當自主代理人在人類指令之前採取行動時,控制流程是什麼樣的?
當模型推斷的成本遠遠超過帳單的其他部分時,我們如何控製成本?
如果規模化是您目前面臨的痛點,建議您收集我們關於可擴展系統的入門指南。如果您想從架構角度出發,可以查看關於大規模微服務的詳細講解以及對當今微服務主流技術的研究。
在此背景下,讓我們來探討構成周全有效的系統設計的關鍵概念。
系統設計將產品理念轉化為可靠、可擴展的服務。
無論你是追求毫秒延遲的工程師、制定產品路線圖的產品經理,或是為平台未來發展做好準備的架構師,都會一再遇到這十個相同的概念。你可以把它們看作是系統設計的基本組成部分。
下面,每個概念都會得到一個簡單易懂的英語定義、一個簡短的權衡說明,以及(在有幫助的情況下)一個來自咖啡吧的簡單類比。

讓我們逐一探討這些概念:
資料儲存策略決定了資訊在系統架構中的組織、存取和擴展方式。在設計系統時,工程師必須根據資料結構、查詢模式、延遲要求和一致性需求選擇合適的儲存方法。
有關一致性的更多深入資源,請參閱《理解因果一致性模型》和《強一致性模型與最終一致性模型》 。
PostgreSQL 或 MySQL 等關係型資料庫通常適用於需要強一致性和結構化關係的事務型系統。相較之下,Cassandra 或 MongoDB 等 NoSQL 資料庫可能更適合需要高寫入吞吐量、靈活模式或橫向擴展的應用。雲端原生應用程式還可以利用 Amazon S3 等物件儲存服務來有效管理大型檔案或非結構化資料。

除了選擇資料庫類型之外,儲存策略還必須考慮如何應對規模擴張帶來的成長和效能問題。這涉及一些技術,例如使用索引來加快查詢速度、設計讀寫密集型優化方案,以及使用時間序列資料庫來儲存遙測資料。
咖啡豆放在密封的料斗裡,咖啡粉放在把手裡,牛奶放在冷奶缸裡。用錯容器會很快損壞保鮮罐。
資料分區和分片是將大型資料集拆分成更小、更易於管理的資料區塊,從而提升效能和可擴展性的策略。在分區中,資料在單一資料庫執行個體內被劃分,通常基於日期範圍或使用者 ID 等邏輯規則,跨表或檔案進行劃分。這有助於減少查詢負載,並透過限制每次查詢需要掃描的資料量來提高存取速度。分區通常在資料庫層級進行,對應用程式邏輯透明。分區分為兩種:水平分區和垂直分區,如下圖所示:

另一方面,分片將資料分佈在多個資料庫執行個體或伺服器上,每個分片包含一個獨特的資料子集。這對於單一資料庫容量已無法滿足需求的系統至關重要。然而,分片會增加跨分片查詢路由、資料一致性維護和連接處理的複雜性。有效的分片鍵設計至關重要,因為糟糕的設計會導致熱點或資料分佈不均。分片支援大規模系統的橫向擴展,使系統能夠隨著用戶需求和資料量的增加而無縫增長。
將訂單分配到兩個咖啡吧台:咖啡師 A 負責奇數號訂單,咖啡師 B 負責偶數號訂單。這樣飲品出品速度更快,但現在你需要同時注意兩個吧台的咖啡豆庫存和萃取時間。
冗餘是指複製系統的關鍵元件,以提高其可靠性、可用性和容錯能力。透過部署備份或備用實例,冗餘可以消除單點故障,確保即使某個元件發生故障,系統也能繼續運作。例如,在不同的機器或區域執行服務的多個實例,可以讓系統在某個實例發生故障時無縫重定向流量。這極大地提高了正常執行時間和整體用戶體驗。

複製與冗餘協同工作,保持重複元件的同步。它確保資料或系統狀態在冗餘資源之間保持一致。在資料庫系統中,複製通常採用主副本模型實現,其中主節點處理所有寫入操作,副本節點接收並近乎即時地應用這些變更。這種設定提高了讀取可擴展性,支援災難恢復,並增強了系統的整體彈性。複製還可以跨地理區域擴展,以降低延遲並在區域性故障期間保持可用性。

了解更多關於冗餘和複製的訊息,請參閱面向開發人員的可擴展性和系統設計模組。
負載平衡將傳入流量分配到多個伺服器上,以確保沒有單一伺服器成為瓶頸。負載平衡器透過均勻分配工作負載來提高系統響應速度和整體可靠性。它們還使應用程式能夠處理大量並髮用戶而不會降低效能。
無論採用硬體元件或軟體解決方案,負載平衡器都位於用戶端和後端伺服器之間。它根據預先定義的演算法(例如輪詢、最少連接數或伺服器回應時間)路由每個傳入請求。負載平衡器也會持續檢查伺服器的健康狀況,自動將流量從無回應或效能低的伺服器重新導向。這有助於維持高可用性,防止服務中斷,並支援分散式架構中的橫向擴展。

首席咖啡師會將每張飲品單分流到排隊最短的義式咖啡機——如果一台機器故障,訂單就會轉移到其他機器,從而保持排隊時間短、咖啡熱、壓力平衡。
快取是一種將頻繁存取的資料或運算結果儲存在稱為「快取」的臨時高速儲存區域中的技術。快取的主要目的是減少從速度較慢、距離較遠的來源(例如資料庫或遠端伺服器)重新計算或重新獲取資料的需要。

當應用程式需要特定資料時,它首先會檢查快取。如果快取中已有資料,則可以幾乎立即檢索。否則,資料會從資料來源獲取,進行處理,並通常儲存在快取中以便將來更快存取。此過程透過降低延遲和減少主資料來源的負載,顯著提高了系統效能,從而加快了回應速度並提高了資源利用效率。
咖啡師會沖泡一壺店內特製的滴濾咖啡,並將其儲存在保溫壺中。這樣,當顧客點慣常的咖啡時,咖啡師就可以直接從保溫壺(也就是儲存的咖啡壺)中倒出咖啡,而無需重新沖泡,從而縮短等待時間,減輕咖啡機的負擔。
內容分發網絡 (CDN) 是一個全球分散的伺服器網絡,這些伺服器協同工作,根據用戶的地理位置向其提供網絡內容、媒體和其他資源。 CDN 的主要目標是透過從距離用戶實體位置更近的伺服器提供內容來降低延遲並提高效能。

當使用者要求網頁、圖片或影片等內容時,CDN 首先會檢查附近的邊緣伺服器是否快取了該內容。如果快取已存在,則立即提供該內容。否則,邊緣伺服器會從來源伺服器取得內容,儲存本機副本,然後再提供給使用者。這種快取機制減少了對中央來源伺服器的重複存取,從而縮短了回應時間並降低了後端基礎設施的負載。
CDN還能透過自動將請求重新路由到正常運作的伺服器以及在多個節點之間平衡流量,從而提高可用性和容錯能力。它們在現代系統設計中發揮著至關重要的作用,尤其是在速度、可擴展性和全球覆蓋範圍至關重要的高流量應用中。
與其將所有顧客送到同一家烘焙店,不如在區域咖啡館儲存咖啡豆,以實現便利且可持續的服務。
速率限制是一種機制,用於限制使用者或用戶端在特定時間視窗內可以向服務發出的請求數量。這有助於防止濫用,確保公平使用,並保護系統資源免受流量高峰或惡意攻擊的影響。例如,API 可能允許使用者每分鐘僅發出 100 個請求。如果超過限制,則額外的請求將被拒絕,並傳回相應的錯誤回應。

有效的速率限制可以提高系統穩定性,有助於保持效能穩定,並保護後端服務免受過載影響。它通常在 API 閘道或負載平衡器層級實現,採用固定視窗、滑動視窗、令牌桶或漏桶等演算法。
咖啡師禮貌地請大量訂購的顧客稍等片刻,待排隊的顧客離開後再進行下一步,以防止磨豆機過載。
非同步處理允許系統在主執行流程之外處理任務,從而提高回應速度和可擴展性。系統不會等待任務完成(例如發送電子郵件或處理付款),而是將任務/訊息放入訊息佇列。然後,工作進程從佇列中取出任務並獨立處理。這種方法解耦了各個元件,平滑了流量高峰,並使系統能夠更優雅地從部分故障中恢復。 RabbitMQ 和 Amazon SQS 等工具通常用於實現可靠的訊息佇列,並提供重試邏輯和死信佇列等功能。

在更動態、事件驅動的架構中,發布/訂閱(pub/sub)系統能夠實現服務間的即時通訊。生產者(或發布者)向主題發送訊息,多個消費者(訂閱者)可以獨立地接收這些訊息。這種模型非常適合事件通知、系統監控和即時分析等用例。像 Google Cloud Pub/Sub、Redis Streams 或 Apache Kafka 這樣的發布/訂閱系統能夠實現高吞吐量和服務間的鬆散耦合,使其成為可擴展、響應式系統設計的核心模式。
了解更多關於訊息佇列系統設計的訊息,包括啟用非同步處理和服務解耦。
CAP 定理是系統設計領域的一個基本定理。它指出,分散式系統只能同時滿足兩個屬性:一致性、可用性和分區容錯性。該定理形式化地描述了存在分區時一致性和可用性之間的權衡。下圖進一步解釋了 CAP 定理:

CAP 定理無法回答的一個問題是,當不存在網路分割區時,分散式系統有哪些選擇。 PACELC 定理回答了這個問題。 PACELC 定理對資料複製系統作瞭如下描述:
如果存在分割區,分散式系統可以在可用性和一致性之間進行權衡。
else 語句:當系統在沒有分割區的情況下正常運作時,系統可以在延遲和一致性之間進行權衡。

PAC 定理的前三個字母與 CAP 定理相同。 ELC 是 CAP 定理的擴展。該定理假設我們透過複製來維持高可用性。當發生故障時,CAP 定理適用。如果沒有故障,我們仍然需要考慮複製系統的一致性和延遲之間的權衡。
如果主磨豆機卡住(隔板故障),你需要權衡利弊:要么使用備用磨豆機繼續萃取略微不均勻的咖啡以維持營業(可用性),要么暫停服務直到主磨豆機修復以達到完美的萃取一致性。當一切運作正常(無隔板故障)時,選擇就變成了:要么精準地壓實每一杯咖啡以保證風味(一致性),要么加快萃取速度以縮短排隊時間(延遲)。
現在你已經有了系統設計的核心建構模組,讓我們更進一步。
系統設計的基本考慮因素是指導系統結構和建構方式的核心原則。
這些考慮確保系統能夠應對成長、提供流暢的使用者體驗、從故障中恢復並保持適應性。忽視這些考慮會導致系統脆弱,在高負載下崩潰、成本高或難以升級。
在系統設計術語中,與系統架構相關的考慮因素通常被稱為非功能性需求。
系統設計的一些核心考慮因素包括:
可擴展性
可靠性
可用性
表現
安全和認證
讓我們逐一詳細探討各項設計考量,先從可擴展性開始:
可擴展性是指系統在保持效能穩定的同時,有效率地擴展和應對不斷增長的需求的能力。例如,線上學習平台必須能夠應對報名期或直播課程期間的流量高峰,而不會出現速度下降或服務中斷的情況。為了實現這一點,系統主要依賴兩種擴展方式:橫向擴展和縱向擴展。
水平擴展(也稱為橫向擴展)是指向現有系統中加入更多伺服器或節點。這種方法透過將工作負載分配到多台機器上來提高運算能力。
垂直擴展,也稱為向上擴展,是指透過增加 CPU、記憶體或儲存空間來升級現有伺服器。這可以增強單台機器的效能,使其能夠獨立處理更大的負載。

對角線擴展是一種結合了垂直擴展和水平擴展的混合方法。在實踐中,系統可以先垂直擴展至目前硬體的極限,然後透過增加額外的節點進行水平擴展。這種方法能夠實現經濟高效且操作靈活的漸進式擴展,尤其適用於成長初期或需要動態調整擴展策略的情況。
兩種擴展方式各有優缺點。在某些情況下,您需要權衡利弊,並決定哪種擴充方式最適合您的用例。
可靠性是指系統在一段時間內持續穩定地執行其預期功能而不發生故障的能力。它確保使用者即使在不利條件下也能依賴系統正常運作。例如,像 Google Drive 這樣的雲端文件儲存服務必須能夠可靠地儲存和檢索使用者文件,而不會發生資料遺失、損壞或意外停機的情況。
可靠性能夠建立用戶信任、減少營運中斷並確保業務連續性。缺乏可靠性,即使是運作良好的系統也可能導致嚴重故障,進而造成資料遺失、用戶不滿和經濟損失。
義式咖啡機在換班之間會自動進行清洗和壓力檢查,因此無論是周一早上 6 點還是周五晚上 9 點,每一杯咖啡的味道都一樣。
可用性衡量的是系統是否隨時可用,具體而言,是指系統保持運作和可存取狀態的時間。例如,網路銀行系統必須全天候可用,以便客戶隨時查詢餘額、轉帳或付款。

實現高可用性依賴於透過多執行個體和資料複製實現冗餘,從而消除單點故障。實施故障轉移策略和持續健康檢查能夠快速檢測並替換故障元件,最大限度地減少停機時間。
可靠性和可用性經常被混淆,但它們衡量的是系統性能的不同方面。可靠性衡量的是系統持續穩定運作而不發生故障的程度,而可用性則反映的是系統在需要時能夠被存取的頻率。如果恢復或維護耗時過長,即使系統可靠性很高,其可用性也可能很低。
效能是指系統回應使用者請求和處理資料的速度和效率。例如,視訊串流服務必須提供流暢的播放體驗,即使在高峰使用期間也能最大限度地減少緩衝。

快取等技術透過將頻繁存取的資料儲存在更靠近使用者的位置來降低延遲,而負載平衡則透過分配流量來最佳化資源利用。對繁重任務採用非同步處理可以確保反應速度,尤其是在使用者介面方面。
數位點餐板會在顧客下單後立即點亮小票,讓咖啡師可以立即製作下一杯飲品,而無需尋找紙條,從而節省每杯飲品的時間,並保持隊伍的快速移動。
系統設計中的安全是指保護系統和資料免受未經授權的存取、濫用和網路威脅。這對於處理敏感資料的應用程式尤其重要。例如,電子商務平台必須保護客戶的付款詳情、個人資訊和交易記錄,以防止資料外洩和詐欺。如果沒有強而有力的安全措施,即使是架構良好的系統也可能成為安全隱患。

現代安全策略依賴一種稱為縱深防禦的原則,該原則涉及在網路、應用和資料等多個層面上進行分層保護。身份驗證用於驗證使用者身份,最佳實踐包括實施多因素身份驗證 (MFA) 以降低未經授權存取的風險。授權則確保使用者和服務只能存取其被允許使用的資源,遵循最小權限原則。
為了進一步保護資料,系統應採用傳輸中加密(TLS/SSL 協定)和靜態加密(使用 AES 等技術保護儲存資料)。此外,使用安全的 API 閘道、定期輪調憑證、記錄安全事件以及執行例行審計對於維護安全可靠的架構至關重要。
在充分了解關鍵考慮因素之後,現在重要的是要探索不同類型的系統設計,這些設計指導如何根據系統的規模、複雜性和用途來建立系統。
為了更好地理解系統設計的功能性需求和非功能性需求之間的關鍵區別,想像一下你正在準備最神聖(也最美味)的晨間儀式:沖泡一杯完美的咖啡。
功能需求具體描述了咖啡機必須執行哪些任務才能滿足使用者期望。您可以將這些視為基本功能:
按下按鈕即可煮咖啡:只要按下一個按鈕,咖啡就會準時出現。
選擇咖啡類型:濃縮咖啡、滴濾咖啡、卡布奇諾——選項可根據使用者喜好量身定制。
調節沖泡濃度:無論您喜歡口味清淡還是濃鬱的咖啡,機器都會進行調節以滿足您的口味。
提供熱水或蒸氣:除了沖泡咖啡,它還能滿足更廣泛的需求,例如泡茶或蒸牛奶。
這些功能要素直接影響使用者交互,定義了咖啡機實現其主要目的所必須具備的核心功能。
另一方面, 非功能性需求則詳細描述了咖啡機執行其功能的效率。這些需求決定了產品的整體品質和使用者長期滿意度。主要範例包括:
表現(快速沖泡):沒有人願意等太久才能喝到咖啡。咖啡機的沖泡速度會大大影響使用者的滿意度。
可靠性(溫度穩定):機器必須能夠穩定地提供最佳溫度的咖啡,確保每一杯咖啡的品質都保持一致。
可維護性(易於維護和清潔):定期、輕鬆的維護可使機器保持良好狀態並防止故障。
使用者體驗(靜音運作):機器噪音過大可能會擾亂環境,因此靜音運作至關重要,尤其是在共享空間中。
可擴展性和彈性(能源效率和耐用性):高效的能源利用和強大的耐用性確保咖啡機即使在高強度使用下也能長期保持良好的性能。
這些非功能性屬性並不能定義咖啡機的功能,但卻會顯著影響咖啡機的滿意度和易用性,進而影響使用者忠誠度和品牌聲譽。
既然你已經掌握了核心元件和基本考慮因素——現在讓我們來聊聊不同類型的系統設計。
作為一個在 MAANG 公司從事系統建置和擴展多年工作的人,我深知真正掌握這門學科意味著要理解建置穩健、可靠且持久的系統所需的不同視角和類型。這些視角和類型可以分為兩大類:
架構風格:定義元件如何結構化和互動的基本藍圖,例如單體架構、微服務架構和事件驅動架構。
領域特定係統設計:這涵蓋了針對特定領域的獨特需求量身定制的設計方法,例如前端系統設計、生成式人工智慧系統設計等。
架構風格是核心藍圖,它決定了整個系統的結構、元件間的交互,並最終決定了系統的可擴展性、可維護性和效能。架構風格選對了,就打下了堅實的基礎;選錯了,就如同在流沙上建造。
建築風格主要包括:

請查看這篇博客,了解微軟如何在 Azure 中處理微服務。



模組化單體架構:模組化單體架構保留了單體架構的單一可部署單元,但將其內部結構組織成定義明確、鬆散耦合的模組。這種方法兼顧了簡潔性和可維護性,使團隊能夠在不承擔微服務全部複雜性的情況下,強制執行邊界並擴展開發規模。下圖展示了一個電子商務系統的模組化單體架構,其中所有服務都以獨立模組的形式組織在單一部署中。

建築風格構成框架,設計層次定義結構,而真正的精通在於理解不同應用領域的具體需求。每個領域都面臨獨特的挑戰,需要針對性地應用設計原則。以下是一些特定領域的系統設計範例:
想了解如何建立響應迅速、性能卓越且能吸引用戶的用戶介面嗎?歡迎探索前端系統設計課程。
準備好應對最複雜的擴展性場景並建立強大的後端系統了嗎?我們的《洞悉現代系統設計面試》課程建立在來之不易的經驗之上,精心挑選了系統設計問題並提供了詳細的解決方案。
透過「掌握生成式人工智慧系統設計」課程,大膽邁向未來。本課程將幫助您建立、訓練和部署生成式人工智慧模型,從而產生實際影響,讓您自信地引領這一前沿領域。
了解系統設計原則如何在規模化和實際應用中發揮作用,將有助於你掌握現實世界的最佳實踐和當前的設計趨勢。
以下是一些代表性的例子,說明了周詳的設計如何轉化為強大且有影響力的解決方案。
這些系統展示了領先企業如何解決與可擴展性、彈性、效能和不斷變化的用戶需求相關的複雜挑戰。
如果你讀到這裡,我想說,恭喜你(當然,再來一杯濃縮咖啡也值得)。你正朝著2026年建立可擴展、高彈性的軟體的目標穩步前進。
如果本指南為您提供了一種看待軟體架構的全新視角——從核心概念到保持系統健康的權衡取捨——我衷心鼓勵您採取下一步措施來補充您的學習。
首先,花點時間閱讀《系統設計面試學習指南》 。它能完美補充你剛剛學到的所有知識。然後:
透過我們精心整理的系統設計面試題目及答案來檢驗你的思考能力。
探索React等特定語言的細粒度設計模式和圖表。
與其他軟體專業人士交流心得,並參與Reddit、GitHub和LinkedIn等社群中一些最精彩的系統設計討論。
我們的實作課程旨在彌合理論與實踐之間的鴻溝,透過真實案例研究、互動場景和成熟的架構模式,引導您掌握相關知識。您將學習如何設計一個可擴展、高彈性且能夠應對實際工程挑戰的系統。
原文出處:https://dev.to/fahimulhaq/complete-guide-to-system-design-oc7