一個更好的可視化微服務架構的方式

【編者的話】如何快速地可視化一個微服務架構,本文做者有一個很酷的辦法,趕忙來看看吧!html

【3 天燒腦式容器存儲網絡訓練營 | 深圳站】本次培訓以容器存儲和網絡爲主題,包括:Docker Plugin、Docker storage driver、Docker Volume Pulgin、Kubernetes Storage機制、容器網絡實現原理和模型、Docker網絡實現、網絡插件、Calico、Contiv Netplugin、開源企業級鏡像倉庫Harbor原理及實現等。前端

我一直在用draw.io作一些和UML流程圖,圖表或者曲線圖相關的事情。它在豐富的功能和用戶的手工控制方面作出了合理的權衡。node

可是,接下來我會告訴你如何自動化一些無聊的鼠標點擊;)git

避免從一開始就犯錯


Daniel Woods的 「Microservices: The Right Way」 演講裏其中一張幻燈片

若是它不是這樣的話事情也不會變得這麼有趣。事實上,這裏最好能有一張更清晰地展示組件之間關係和職責的圖片。否則的話最終結果就是像上面看到的這樣 ;)github

訣竅即是在作的時候不斷審視它哪一個地方不對,這樣一來便不太可能作的這麼糟了。docker

在作圖的時候 —— 你也在同時給本身一個總體的感受,它們將會怎麼交互,問題域是什麼,上下文,邊界,等等。api

"光紙上談兵是沒用的,長期的戰略規劃纔是無價的。"
― Winston Churchill瀏覽器

行動起來!

假設咱們有一個簡單的社交應用。固然,這是一個很簡單的設定,可是你能夠注意到這裏面存在許多的關聯關係。
bash


客戶端:前端應用和瀏覽器擴展。
API網管:認證API和主服務API。
微服務:照片,圖表還有好友這些微服務。

我花了至關長的時間來排列方塊,拖放箭頭還有調整。而這只是由於我想要以一個更可讀的方式來對齊它們。網絡

你能夠想象排列50個這樣的方塊有多無聊嗎?100個呢?而後我若是再刪除一個?我敢打賭你會放棄這件事情,而後選擇回來繼續碼代碼。

和 Graphviz 結緣

我從Terraform得到了靈感 —— 一個建立和維護生產環境基礎設施的工具。它支持配置任意和基礎設施相關的服務,這裏麪包含了從AWS EC2的實例到來自於50個雲廠商提供的集羣和負載均衡。它還提供了一個有趣的terraform graph命令,能夠根據現有配置生成一個可視化的圖表展示。


‘terraform graph’ 命令的示例輸出

所以我決定採用相同的技巧,可是針對的是一個更高層面的微服務架構。如下是一個用DOT編寫的Graphviz配置。

digraph architecture {
rankdir=LR;

subgraph client_side_apps {
front_end -> {auth_api, my_app_api};
extension -> {auth_api, my_app_api};

{rank=same; front_end, extension, auth_api};複製代碼

}

subgraph api_gateways {
my_app_api -> {photos_ms, chats_ms, friends_ms};
}

subgraph microservices {
photos_ms -> {database};
chats_ms -> {database, cache};
friends_ms -> {database, facebook_api};
}
}

你只須要將它渲染成一個.png文件便可。你可使用在線編輯器或者直接在機器上渲染。爲了避免弄髒系統,我爲此建立了一個Docker鏡像:

cat file.dot | docker container run --rm -i vladgolubev/dot2png > file.png
經過執行上述這行簡單代碼,兩分鐘內你即可以獲得這樣一個使人驚歎的輸出結果!


提示:你能夠將代碼複製粘貼到一個在線的編輯器: dreampuf.github.io/GraphvizOnl…

在微服務之間添加一個新的依賴的想法實現起來從未如此簡單。我須要作的只是添加一行新的代碼,隨即 Graphviz 會很好地將它們組織在一塊兒。

做爲最後的點睛之筆,我喜歡添加一些顏色。所以你立馬能夠看到下面的效果:

  • 綠色 — node.js
  • 紅色 — api gateway
  • 黃色 — front-end
  • 藍色 — storage,database
  • 灰色 — 3rd-party API

這並非最優的顏色佈局,可是你已經知道能夠這樣作了 ;)
相信我,有大量圖表的狀況也很容易作到這一點。


所有代碼放在: gist.github.com/vladgolubev…

小結

我在給一張微服務架構圖頻繁添加修改時遇到了問題。每一次變動都要用箭頭手工修補。現在我能夠放心實驗,看看新的微服務是如何適配個人系統。固然,你還能夠作的更好,將它放到版本控制系統裏,這樣一來即可以獲得架構圖的修改變動歷史!

可是這取決於你。選擇一款最合適的工具吧。Google搜索微服務可視化的方案,你將會被一大票商業解決方案轟炸的。

可視化的設計會使得檢查和調試變得更容易。
― Unix的基本哲學

原文連接:A Better Way of Visualizing Microservice Architecture (翻譯:吳佳興)

相關文章
相關標籤/搜索