幾個月前,我決定進入軟體架構師的領域,將自己的軟體開發技能提升到一個新的層次。之前,我已經參與過幾個項目了,但我深深意識到,了解如何構建和設計可擴展、可維護的軟體與編寫乾淨的代碼是非常重要的。
我首先開始探索軟體架構中的基本最佳實踐、原則與方法。
我聯繫了一些經驗豐富的資深軟體架構師,諮詢他們每天使用的工具。我越深入地研究,就越清楚,選擇正確的工具對於任何架構師來說都非常必要的。
從繪製系統組件到建模基礎設施,運用正確的工具使架構決策更加結構化和有效。
為了運用所學知識,我決定使用開源工具來設計金融科技應用程序。
在此過程中,我得出一些結論來,實際上並沒有一種軟體架構的最佳工具。
你正在開發的架構類型、你的角色以及組織規模都會影響到所需要的工具。對於小型 SaaS 應用程序,個人開發人員可能會使用代碼優先的輕量級工具,而創建分散式系統的企業架構師可能需要正式的建模框架。
我還根據工作確定了軟體架構工具的幾個邏輯類別。這些包括建模和圖表繪製、設計和分析、雲架構設計、協作和文檔、代碼分析和可視化以及測試。雖然我主要關注建模工具,但這些更廣泛的分類更有助於滿足各種架構需求。
對於軟體架構師來說,圖表對於理解系統組件、數據流和基礎設施至關重要。
我整理了一份個人認為最有用和最容易使用的工具列表。我更傾向於使用那些有助於可視化、記錄和構建架構的工具,希望對大家有所幫助。
1. Graphviz
Graphviz是我們列表中的第一個工具,因為有幾種建模和圖表工具以某種方式擴展和使用它。它是一種提供基於代碼的方法來生成圖形建模圖的軟體。
注意:本文中將交替使用基於文本和基於代碼這兩個詞。它們的意思相同 - 使用某種形式的語法來繪製圖表和模型。另一個需要注意的是,基於代碼的圖表生成可以輕鬆添加版本控制並將 CI/CD 集成到圖表/模型創建過程中。
架構師應該關心圖形可視化的原因是,許多應用程序(尤其是大型應用程序)與許多依賴項、微服務、API、第三方集成等高度互連。為了清楚地了解這些互連及其關係,架構師需要以可視化的方式映射它們。
Graphviz 提供了一種定義和呈現這些圖形的有效方法。下面總結Graphviz 的主要功能如下:
- 它使用DOT 語言,這是一種簡單但功能強大的生成圖形的語法。
- Graphviz 具有命令行界面實用程序,允許用戶快速將 DOT 腳本轉換為圖表。這允許您使用腳本自動執行圖表生成工作流程。
- Graphviz 提供多種布局引擎,使用專門的演算法來構造圖形。這讓架構師可以選擇在圖形呈現中使用分層、徑向或力導向布局。
- 建築師可以使用其可自定義的布局功能來控制節點定位、邊緣連接和層次結構。這可確保您生成的圖表適合您的特定需求。
- 它支持多種輸出格式,例如 PNG、SVG、PDF 和 JSON。這些選項可讓您輕鬆將 Graphviz 生成的視覺效果集成到 Web 應用程序和文檔中。
我認為 Graphviz 是一種可擴展的工具,可用作其他建模工具的基礎組件。但對於圖形連接,使用基於圖表的工具和拖放功能來繪製它們很容易。
Graphviz 的官網:
https://GitLab.com/graphviz/graphviz
DOT語言官網:
https://en.m.wikipedia.org/wiki/DOT_(graph_description_language)
2. PlantUML
列表中的下一個工具叫做 PlantUML。這是一個基於瀏覽器的圖表工具,使架構師能夠使用簡單的基於文本的語法創建圖表。
PlantUML的主要特點如下:
- 軟體架構師可以生成的圖表:
- UML 圖,如序列圖、用例圖、類圖、部署圖等。
- 非 UML 圖,如 ER 圖、甘特圖、EBNF 樹等。
- 可以通過添加超鏈接和工具提示來創建互動式圖表以提供更多背景信息。
- PlantUML 允許使用 Unicode、圖標和富文本格式來創建視覺增強的圖表,從而提高可讀性和演示效果。
- 在底層,PlantUML 使用各種渲染引擎來生成圖表,為您提供多種選擇。其中一些引擎包括 Graphviz(前面介紹過)、Smetana(基於 Graphviz)、Puma 等。
- 導出圖表很靈活,它可以輸出 PNG、SVG、LaTeX 甚至 ASCII 藝術。
為了獲得更好的圖表,建議你調整渲染引擎,不同的引擎可能會渲染略有不同的圖表。
3.D2
在列表中接下來要講的一個工具是D2 。
聲明式圖表 (D2) 是由Terrastruct創建的基於代碼的圖表工具。它通過允許人們執行以下操作來簡化創建和維護圖表的過程:
- 通過模塊化圖表來組織大型圖表,這類似於將代碼分解為更小、更易於管理的組件。你還可以使用其容器功能對圖表進行分組,以提高複雜可視化中的可維護性和可重用性。
- 使用glob可以輕鬆地在圖表中進行更改。
- 使用工具提示和超鏈接為圖表提供額外的背景和交互性。
- 為圖表添加動畫。
- 使用其在線遊樂場快速創建和共享圖表,無需安裝任何東西。
- 使用幾乎任何自然語言來創建圖表。
- 直接從命令行輕鬆導出 SVG、PNG 和 PDF 文件。
我喜歡 D2 文檔的深度和隨之而來的用戶友好性。渲染的圖表也很優秀,精細而流暢。然而,它不是像軟體那樣的獨立工具,因為它是一種語言。除非你使用它的操場或 CLI,否則你需要集成它才能直觀。
4. Gaphor
Gaphor是一款符合 UML 2 的建模軟體,它實現了 UML、SysML和RAAML標準,並支持C4 模型,使其可用於不同的架構需求。
與架構師有關的關鍵功能,接下來列表如下:
- 它支持多種建模標準。
- 添加到模型中的每個元素都以圖表的形式直觀呈現,去掉了隱藏屬性或側面板。使模型更加易於理解和導航。
- 可以使用插件來擴展其功能,以實現代碼生成、文檔導出和其他集成。
- 使用其樹形視圖導航功能,快速定位和管理模型中的不同元素。此功能簡化了複雜圖表和大型項目的工作。
它更適合那些將標準合規性放在首位的人士。
此外呢,由於它是一款獨立軟體,維護人員的更新不會像基於瀏覽器的工具那樣即時更新,需要下載才能獲得最新的版本。
5.Mermaid
Mermaid是一款基於瀏覽器的圖表工具,可將基於文本的定義轉換為動態視覺效果。它允許開發人員使用類似 Markdown 的語法編寫圖表,並能夠即時動態地呈現。
它的主要特點,下面總結如下:
- 一種易於使用的語法,就像在寫 Markdown 一樣,可以輕鬆創建和修改視覺效果,而無需複雜的工具。
- 動態渲染,即你可以使用實時編輯器動態修改圖表,並在編輯時立即看到更新。
- 多圖表支持允許架構師創建流程圖、序列圖、狀態圖等。
- 許多可用的集成可與 GitHub、GitLab、Notion、Obsidian 等其他流行工具配合使用。
對於那些想要一款在集成方面表現出色的工具的架構師來說,Mermaid 是最好的選擇。具有 JavaScript 開發背景的開發人員也許會更喜歡它。
6. ArchiMate
隨著系統架構變得越來越複雜,像 TOGAF 這樣的企業架構框架以及像ArchiMate這樣的建模語言變得越來不可缺少。
但是,架構師如何在沒有昂貴專有工具的情況下創建清晰、結構化的模型?
我們發現的一個開源解決方案便是Archi。
這款 ArchiMate 建模軟體,專為各種規模的企業架構師和組織而設計,無需專有軟體的高昂價格成本。
ArchiMate 的一些功能包括:
- Magic Connector - 這項功能可自動正確連接模型元素。這有助於減少手動工作量並提高準確性。
- ArchiMate Views & ViewPoints 用於將模型與利益相關者的觀點相結合,有助於確保不同目標受眾的清晰度和相關性。
- 提示視圖可對您的模型元素和關係提供反饋,幫助您應用正確的建模約定和最佳實踐。
- 顯示關係的可視化器提供了複雜模型連接的清晰、結構化的視圖。
- 在建立模型之前,可以使用 Sketch View 和 Canvas Modelling 進行頭腦風暴、設計和構建想法。
對於 Linux 用戶,你可能會發現使用此軟體時會出現一些用戶界面問題,比如下載頁面中指出的那樣。需要更新它,你可能還需要卸載一些版本,不確定這是否適合你。
它的用戶指南是一個 PDF 文件,這意味著如果架構師即使下載了 PDF 文件,可能會遵循過時的手冊指南,但是免費的還好用的工具,其它多注意一下也沒問題。
7. Modelio
現在向大家介紹的是一個以企業架構建模為傲的工具叫做Modelio。
它支持多種行業標準,使其成為從軟體設計到企業架構等不同領域工作的絕佳選擇。
藉助 Modelio,軟體架構師可以做到以下幾點:
- 支持 UML、BPMN、ArchiMate 和 TOGAF 標準,因此可以對業務流程和企業架構進行建模。
- 使用其 XMI 導入/導出功能輕鬆地在不同工具之間交換 UML2 模型
- 使用 HTML 發布器模塊以 HTML 形式發布和共享模型
- 利用其可擴展性添加自定義方法和技術,使他們能夠根據特定的項目需求修改工具。
- 利用 Jython 腳本自動執行重複任務並有效提高生產力。
我觀察了一下,該工具的文檔、網站和 GitHub 代碼並沒有做定期更新,需要各位小夥伴做一番斟酌來使用。
8. Diagrams.net(以前稱做 Draw.io)
有時,你可能不需要嚴格的 UML 建模工具。像Diagrams.net這樣簡單但功能強大的圖表工具是一個不錯的選擇。
它與雲平台、流行應用程序和版本控制系統集成。它還提供安全第一的設計和高級協作功能。
雖然此工具非常適合 UML 圖表,但它的功能不止於此。您還可以創建其他圖表類型,如流程圖、思維導圖等。
它的一些功能包括如下:
- 多種存儲選擇,讓用戶根據自己的需求安全、高效地工作。
- 豐富的模板庫,可訪問 AWS、Azure、GCP、IBM 等平台的各種預構建模板,實現快速系統建模。
- 使用自動布局和格式化功能自動排列元素,提高可讀性。
- 協作和集成功能可用於與團隊合作並將圖表集成到您最喜歡的生產力工具中。使用共享游標功能,您可以在處理同一張圖表時看到其他團隊成員的游標和實時編輯,從而確保團隊合作順暢。
協作功能僅在生產版本中可用,而不在 GitHub 版本中,正如項目的README中指出的那樣。
- 它完全可定製,甚至可嵌入定製軟體中以獲得完全集成的體驗。
- 最後,由於其 PlantUML 和 Mermaid 支持,您可以使用基於代碼的圖表自動創建圖表。
此工具功能豐富,是那些想在圖表工作流程中使用多種功能的人的最佳選擇。我甚是喜歡這個工具。
9. Excalidraw
Excalidraw是列表中的另外一個工具。它是一款輕量級的基於瀏覽器的白板工具,建築師可以使用它來繪製和集思廣益建模想法。它的風格給人一種手繪草圖的印象。選擇 Excalidraw 的一些原因包括如下:
- 支持離線工作。它還會自動將工作保存到瀏覽器,這樣您可以在關閉瀏覽器後從當前位置繼續工作。
- 由於端到端的加密功能,數據交換變得很安全。
- 多用戶編輯支持團隊協作,由於之前強調的加密功能,該功能是安全的。
- 圖像上傳功能允許您重複使用圖像中的圖表。
- 預先創建的形狀和組件,可輕鬆創建圖表。
- 它入門比較簡單,可生成可靠的架構圖。
10. tldraw
tldraw 的使用方式與 Excalidraw 類似,兩者具有相同的功能,因此我這裡就不重複討論 tldraw 的功能了。
但是值得向大家一提的,tldraw 的一個功能是它的SDK。開發者21可以使用 SDK 將白板集成到應用程序中。由於本文面向軟體架構師,因此不深入討論 SDK。
我對它的評價與對 Excalidraw 的評價相同 — 它非常適合用來做集思廣益。
11. Cerbos PDP
排名第 11 位的是 Cerbos Policy Decision Point (PDP)。
Cerbos PDP與其他工具的不同之處在於,雖然所有其他工具都專註於圖表和可視化,但 Cerbos PDP 卻還有著不同的用途。
它提供了一個可以在幾分鐘內啟動並運行開源授權解決方案。在設計軟體架構時,擁有安全的訪問控制與定義系統組件和數據流一樣重要。
因此,使用 Cerbos PDP,我們可以做到如下:
- 從單一位置定義和管理授權策略,確保整個系統的策略更新之一致性。
- 根據用戶角色、屬性和其他上下文因素實施細粒度的訪問控制,確保根據特定用戶情況調整訪問許可權。
- 在提出訪問請求時立即評估並執行策略,確保安全性而不影響系統性能。
- 使用你選擇的身份驗證服務提供商,Cerbos PDP 支持幾乎所有提供商。
工具的功能總結與比較
這份清單的最後是這些工具所含主要功能的並排比較表。該表可能有助於各位選擇要用於滿足架構需求的工具。
當然,架構師還可以利用更多出色的開源工具。但是我們將這些留到下一篇文章再繼續討論。
工具 | 基於代碼/文本 | 基於拖放 | 內置協作支持 | 基於瀏覽器 |
Graphviz | 是 | 否 | 否 | 否 |
PlatUML | 是 | 否 | 否 | 是 |
D2 | 是 | 只在控制台 | 不 | 沒有 |
Gaphor | 否 | 是 | 否 | 否 |
Mermaid | 是 | 否 | 是 | 是 |
ArchiMate | 否 | 是 | 否 | 否 |
Modelio | 是 | 是 | 否 | 否 |
Diagrams.net | 否 | 是 | 是 | 是 |
Excalidraw | 否 | 是 | 是 | 是 |
tldraw | 否 | 是 | 否 | 是 |
結語
以上,是幾款圖表即代碼工具供各位架構師們選擇,重要的提醒的是請仔細考量哪種最適合自己的用例。
一些關鍵事項,包括如下幾點:
- 開源許可證和維護項目的團隊。
- 支持您希望使用的標準和圖表類型。
- 對於需要使用該工具的人來說,訪問和學習曲線。