部署圖在軟件工程領域中扮演著關鍵藍圖的角色。它可視化系統的物理架構,詳細說明軟體組件如何分布在硬體節點上。與專注於靜態結構的類圖或著重於時間上互動的序列圖不同,部署圖將應用程式落實於現實之中。它回答了程式碼實際運行位置的問題。
理解此實體對 DevOps 實務人員、系統架構師和後端工程師而言至關重要。它彌補了抽象設計與實際基礎設施之間的差距。本指南探討部署圖的核心元素、構建方法以及戰略性應用。

🔍 什麼是部署圖?
部署圖是一種統一建模語言(UML)圖表。它描繪了稱為節點的硬體元件,以及其上所存放的軟體實體。它提供了執行時期架構的靜態視圖。此可視化對於理解系統拓撲至關重要。
考慮一個現代的網路應用程式。它很少是單一的巨無霸系統運行於一台機器上。相反地,它涉及多個伺服器、資料庫、負載平衡器以及客戶端裝置。部署圖會標示這些實體及其通訊管道。
關鍵目標
- 基礎設施規劃:協助團隊在配置資源前,可視化資源需求。
- 通訊映射:定義不同節點之間如何進行通訊。
- 安全邊界:說明防火牆、閘道器與可信區域。
- 可擴展性分析:顯示系統如何進行水平或垂直擴展。
🧩 核心元件
要構建精確的部署圖,必須理解其基本構成單元。每個圖表都由節點、實體與連接組成。
1. 節點
節點代表實體或虛擬的計算資源。它是實體的容器。節點通常以三維方框表示,並在名稱上方標示 <<node>> 的範疇。
- 運算節點:這些是處理資料的裝置。範例包括伺服器、工作站、大型主機與行動裝置。
- 執行環境:主機應用程式邏輯的軟體平台。這可能是特定語言的執行時期環境,或作業系統。
- 資料儲存:專門用於持久化儲存的節點。範例包括資料庫伺服器、檔案伺服器與物件儲存系統。
每個節點都有名稱,且在實際應用中通常會關聯到 IP 位址或網域名稱。
2. 實體
實體是部署到節點上的實際軟體組件。它們代表開發流程的交付成果。若無實體,節點僅僅是空的硬體。
- 可執行檔:在伺服器上執行的編譯後程式碼。
- 程式庫:執行檔運作所需的相依性。
- 組態檔:決定軟體在特定環境中行為的設定。
- 資料庫:儲存在資料庫節點內的結構定義或資料檔案。
- 網頁:提供給客戶端的靜態 HTML 檔案或範本。
元件通常以帶有範型 <<artifact>> 的小矩形來表示。它們通常顯示在所屬的節點內部。
3. 連接
連接用來表示節點之間的通訊路徑。它們顯示資料如何透過系統架構流動。這些線條代表網路連結。
- 網路協定:線條上的標籤表示所使用的協定,例如 TCP/IP、HTTP、HTTPS 或 SQL。
- 通訊頻道:粗線通常代表高頻寬連接,而較細的線可能表示管理流量。
- 相依性:虛線可表示一個節點的運作依賴於另一個節點。
📋 圖示圖例與符號
標準化確保來自不同團隊的工程師能夠閱讀相同的圖表。下表概述了部署圖中常用的符號。
| 符號 | 名稱 | 描述 |
|---|---|---|
| 3D 方框 | 節點 | 軟體執行的實體或虛擬運算資源。 |
| 帶有 <<artifact>> 的矩形 | 元件 | 可部署的軟體組件,例如 jar 檔案或資料庫。 |
| 實線 | 關聯 | 兩個元素之間的結構性連結。 |
| 虛線 | 依賴 | 一個元素需要另一個元素才能運作。 |
| 開放箭頭 | 導航 | 表示依賴方向或資料流路徑。 |
| 雲形 | 外部系統 | 代表第三方服務或外部網路。 |
| 帶有 <<device>> 的矩形 | 裝置 | 如路由器或交換器等特定硬體裝置。 |
| 帶有 <<interface>> 的矩形 | 介面 | 定義節點之間互動的合約。 |
🛠️ 如何建立佈署圖
建立佈署圖是一個系統性的過程,需要了解系統的需求與基礎架構的限制。遵循以下步驟,即可建立可靠的圖示。
步驟 1:識別硬體
首先列出所有相關的實體裝置,不要忽略邊緣裝置。在分散式系統中,這包括:
- 客戶端裝置(筆電、手機、平板電腦)。
- 網路設備(路由器、防火牆、負載平衡器)。
- 應用伺服器。
- 資料庫伺服器。
- 儲存系統。
如果系統使用雲端基礎架構,這些節點是虛擬執行個體,而非實體機箱,但仍然在圖中以節點表示。
步驟 2:映射軟體
硬體定義完成後,將軟體元件放置於其上。此步驟決定邏輯所在的位址。
- 確認哪台伺服器執行後端 API。
- 找出主機前端的網頁伺服器。
- 指定儲存使用者資料的資料庫。
- 標示快取層的位置。
確保每個元件都放置在相容的節點上。例如,Java 應用程式若無執行環境,無法直接在資料庫節點上執行。
步驟 3:定義連接
繪製連接節點的線條,並以所使用的通訊協定標示這些線條。
- 前端至後端:通常透過 TCP 使用 HTTP 或 HTTPS。
- 後端至資料庫:通常使用特定的驅動程式,例如 JDBC 或 ODBC。
- 內部服務:可能使用 gRPC、REST 或訊息佇列。
明確指出通訊協定。這有助於安全審計與效能調校。
步驟 4:檢視安全區域
部署圖通常包含安全邊界。這些是邏輯容器,用來將具有相同安全立場的節點分組。
- DMZ(非軍事區):包含公開對外的伺服器,例如網頁伺服器。
- 內部網路:包含無法直接從網際網路存取的資料庫與應用伺服器。
- 信任區域:包含敏感的管理系統。
使用不同顏色或陰影區域,以視覺方式區分這些區域。
📈 清晰度的最佳實務
過於複雜的圖表無法有效傳達訊息。遵循這些原則,以維持圖表的清晰度與實用性。
- 保持高階層次:若微服務位於同一節點上,無需逐一列出。應邏輯性地將其分組。
- 使用一致的命名:在專案的所有圖表中,對節點使用標準名稱。
- 標示通訊協定:絕不可讓連接線未標示。模糊不清會導致設定錯誤。
- 分離關注點: 如果系統規模龐大,請將圖示分為多層(例如:客戶端層、應用層、資料層)。
- 定期更新: 部署圖僅在反映當前狀態時才有用。在基礎設施變更期間,請更新此圖。
❌ 應避免的常見錯誤
工程師在建模基礎設施時經常犯錯。識別這些陷阱可避免文檔中產生技術負債。
1. 忽略網路延遲
在頁面上將節點放置得過於接近,可能暗示它們在物理上相距很近。實際上,一個區域的資料庫與另一個區域的應用程式之間會產生延遲。請使用註解來標示地理上的分離。
2. 資產過載
在單一節點上放置太多資產會使圖示混亂。如果伺服器承載多個服務,可考慮將它們歸類於子節點或特定容器之下。
3. 遺漏外部依賴
系統很少孤立存在。通常,它們依賴第三方 API 或 SaaS 平台。務必包含系統所連接的外部雲端或服務。
4. 靜態與動態混淆
部署圖是靜態的。它不會顯示流量量或請求速率。不要僅用靜態線條試圖表現動態負載平衡行為。應使用額外的符號或獨立圖示來呈現此類資訊。
🔗 與其他圖示的關係
部署圖並非孤立存在。它與其他建模工件協同運作。
- 類圖: 類圖定義了程式碼結構。部署圖則定義了該程式碼執行的位置。
- 組件圖: 組件圖顯示程式碼的邏輯分組。部署圖則將這些分組對應到實際節點。
- 順序圖: 順序圖顯示互動流程。部署圖則提供該流程發生的上下文環境。
理解這些關係可確保架構文檔的一致性。當類圖中進行變更時,若新組件需要不同的資源,部署圖可能也需要更新。
🌐 實際應用情境
部署圖在軟體生命週期的各個階段都有應用。
1. 災難恢復規劃
在規劃故障應對時,團隊會使用部署圖來識別單點故障。若關鍵資料庫位於單一節點且無備份連接,圖示會立即突顯此風險。
2. 成本優化
雲端成本由資源使用量驅動。透過可視化基礎設施,團隊可識別出使用率低下的節點。將服務整合到更少但更強大的節點上,可降低營運成本。
3. 安全審計
安全團隊會審查部署圖,以確保敏感資料不會經過不安全的通道。他們會尋找應用程式與資料庫之間未加密的連接。
4. 新工程師的入職引導
新團隊成員經常難以理解系統架構。清晰的部署圖可作為導航地圖,幫助他們了解代碼應部署於何處,以及應在哪裡查找日誌。
🔄 維護與演進
軟體系統會持續演進,新功能需要新增節點,舊節點則會被淘汰。部署圖必須隨著系統一同演進。
- 版本控制:將圖檔視為程式碼處理,與原始碼一同儲存在同一個程式庫中。
- 自動化生成:在現代環境中,某些工具可從基礎設施程式碼(IaC)自動生成部署圖,確保圖檔能自動同步。
- 審查週期:將圖檔更新納入重大架構變更的完成定義中。
忽略維護會導致「圖檔腐化」。這發生在文件不再與實際情況相符時。當開發人員根據過時的圖檔進行部署時,失敗是不可避免的。
📊 重點摘要
本指南涵蓋了部署圖的關鍵要點。總結核心內容如下:
- 節點代表硬體:它們是您軟體的容器。
- 元件代表軟體:這些是在節點上執行的檔案與資料。
- 連接代表通訊:它們定義了通訊協定與資料流。
- 清晰為王:保持圖檔清晰易讀,並聚焦於基礎設施。
- 持續更新:確保圖檔與實際執行環境一致。
掌握此技能,能讓您設計出穩健、可擴展且安全的系統。它能將抽象的需求轉化為具體的基礎設施規劃。
🚀 繼續前進
在您持續的工程旅程中,將這些原則應用於當前專案。從為下一個微服務繪製部署圖開始,識別節點、放置元件並繪製連接。與團隊共同審查,確保所有人對物理佈局有相同的理解。
文件是對系統穩定性的投資。一張繪製良好的部署圖,在故障排除、擴展與安全審查時都能帶來回報。請將其納入您架構流程的標準步驟中。












