不管是長官還是同事甚至下屬,在公司無時無刻都需要跨團隊進行溝通,當系統架構或流程越來越複雜的時候,如果沒有按照當下情況記錄下來,對於未來接手的同事,或者是自己都會不小心忘記,而在記憶最清楚的當下用文字或流程圖記錄下來,對團隊及自己是有相當大的幫助。而有沒有工具可以快速畫出系統架構或流程圖?我們可以分幾種情境來討論。
第一種是程式碼架構流程圖,跟開發團隊一起開發功能時,開發者可以先將程式的流程圖先畫出來,跟團隊進行第一輪討論,避免實作下去時,考慮太少,多與團隊進行溝通,對自己是非常有幫助的。
第二種是專案剛開始,或發展到一定程度,需要將全部系統架構整理下來,團隊可能用了 AWS 或 GCP 等服務,有一個全貌的系統架構圖,可以協助團隊釐清專案到底使用了哪些工具?讓剛加入的同事可以透過此架構圖快速了解並進入狀況。底下來介紹三套我個人蠻推薦的三種繪製工具。
教學影片
1
2
3
4
5
6
7
| 00:00 為什麼需要畫系統架構圖
00:49 第一種情境
01:28 第二種情境
02:07 第一套好用工具 PlantUML
05:50 第二套 Diagrams
07:40 第三套 Excalidraw
09:08 使用時機
|
其他線上課程請參考如下
PlantUML
PlantUML 是可以用純文本語言繪製圖表的開源軟體,由於是純文字語言,所以可以搭配版本控制做紀錄,非常適合團隊或跨團隊合作溝通,尤其是架構初期,會需要常常修改,所以用 PlantUML 非常適合,跟同事進行快速討論迭代修正。
強大的 PlantUML 有提供線上版本進行撰寫,叫做 PlantText,除了線上版本讓大家可以測試之外,開發者也可以透過 VSCode 的 PlantUML 套件進行整合,一邊撰寫流程,一邊預覽,如下圖
拿一個實際案例來看看
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| @startuml Converter CLI
queue "AWS SQS" as queue order 20
actor "User" as user order 10
database "AWS S3" as s3_storage order 15
participant "API Server" as api_server order 50
box "Docker Container" #LightBlue
participant "Go Service" as go_cli order 30 #99FF99
participant "Python CLI" as python_cli order 40 #99FF99
database "Local Storage" as local_storage order 35
end box
autonumber
go_cli -> queue: Listen Notification Queue
user -> s3_storage: Upload Dataset
queue <- s3_storage: Send Notification
go_cli <- queue: Receive Notification
go_cli -> local_storage: Create /tmp folder
go_cli <- s3_storage: Download Origin Dataset
go_cli -> local_storage: Save Dataset to /tmp folder
go_cli -> python_cli: Execute CLI command
python_cli -[#0000FF]> local_storage: Save Progress Number to /tmp folder
go_cli -> api_server: Upload Convert Progress
python_cli -[#0000FF]> local_storage: Save output.zip and dataset.yml to /tmp
go_cli -> api_server: Upload dataset type and class number
go_cli -> s3_storage: Upload output.zip to S3
go_cli -> api_server: Upload Status to Success
go_cli -> queue: Remove Notification
@enduml
|
產生的圖如下,或線上編輯測試看看
從上圖就可以知道透過 CLI 工具上傳 Dataset 到 AWS S3 會經過哪些步驟跟流程。假設沒有先把流程圖畫出來,其實很難想像跨團隊要怎麼合作。
Diagrams
上面的 PlantUML 協助團隊釐清開發流程圖,假設您需要更多工具或圖形介面來描述整體的系統架構圖,也或者是需要對上對下報告有一個更完整的全貌,推薦大家使用 Diagrams,裡面有完整的圖庫跟功能,也支援離線桌面版或線上修改。可以把檔案放在 GitHub 內由線上版讀取。來看看底下可以教學影片體驗 Diagrams 的強大
繪製完成後,可以輸出任何檔案格式。底下看看一張系統架構圖
Excalidraw
除了上述兩套工具外,如果你想要快速畫出一個流程圖,又不想裝一大堆工具,強烈推薦 Excalidraw 這套線上流程圖軟體,它也是開源軟體。底下看看實際案例,我放在 redisdb-stream 專案內的架構圖。
另外可以參考 Signoz 公開的文件:Logs Overview,裡面大量用到 Excalidraw 畫出來的流程圖。
心得結論
上面有三套好用的畫圖工具,我個人使用的時機不盡相同,如果是簡易的流程圖,我都直接用 Excalidraw 快速搞定,不想花太多時間進行繪製,尤其是時間很趕的時候。跨團隊或內部開發溝通時,我就會用 PlantUML,將開發流程描述清楚,避免在合作上面出現差錯,讓其他開發同仁產生誤會。到專案中期或後期,整體架構比較確定後,我會在用 Diagrams 繪製系統流程,讓團隊或長官可以更加了解專案的全貌。