Tungsten Fabric SDN — SmartNIC vRouter
1010
2025-03-31
一 背景
通過圖可以用 Python 代碼繪制云系統架構。它的誕生是為了在沒有任何設計工具的情況下對一個新的系統架構設計進行原型化。您還可以描述或可視化現有的系統體系結構。圖目前支持的主要供應商包括: AWS,Azure,GCP,Kubernetes,阿里巴巴云,甲骨文云等。它還支持 On-Premise 節點、 SaaS 以及主要的編程框架和語言。
代碼關系圖還允許您跟蹤任何版本控制系統中的體系結構關系圖更改。注意: 它不控制任何實際的云資源,也不生成云形成或地形代碼。它只是用于繪制云系統體系結構圖。
相比于在 UI 上對各種圖標進行拖拽和調整,這種DaC(Diagram as Code)方式更符合我們程序員的使用習慣。
二 支持范圍
三 示例圖片
四 安裝部署
4.1 Python環境
python環境版本為3.6以上,由于我本地python環境管理使用anconda,也可以使用其他工具。
conda create -n py-diagrams python=3.6 conda activate py-diagrams
4.2 graphviz安裝
它使用Graphviz來呈現圖表,因此您需要安裝Graphviz來使用圖表。安裝graphviz(或已經安裝)之后,安裝這些關系圖。
apt-get install graphviz # macos brew install graphviz
五 使用
5.1 編寫代碼
# diagram.py from diagrams import Diagram from diagrams.aws.compute import EC2 from diagrams.aws.database import RDS from diagrams.aws.network import ELB with Diagram("Grouped Workers", show=False, direction="TB"): ELB("lb") >> [EC2("worker1"), EC2("worker2"), EC2("worker3"), EC2("worker4"), EC2("worker5")] >> RDS("events")
5.2 生成圖片
python diagram.py
六 邏輯簡介
6.1 繪圖對象
6.1.1 Diagram
Diagram:這是表示圖的最主要的對象,代表一個架構圖
使用 Diagram 類來創建圖環境上下文,使用 with 語法來使用這個上下文。Diagram 的第一個參數是會被用作架構圖的名稱以及輸出的圖片文件名(轉換為小寫+下劃線)。
Diagram 支持參數:
outformat:指定輸出圖片的類型,默認是 png,可以是 png、jpg、svg 和 pdf
show:指定是否顯示圖片,默認是 False
graph_attr、node_attr 和 edge_attr:指定 Graphviz 屬性選項,用來控制圖、點、線的樣式,詳情查看 參考鏈接
6.1.2 Node
Node:表示一個節點或系統組件,比如快速開始中的SLB、ECS和RDS都是架構圖中的節點。
節點之間的關系使用操作符來表示,分別是:
>>:左節點指向右節點
<<:右節點指向左節點
-:節點互相連接,沒有方向
6.1.3 Cluster
Cluster:表示集群或分組,可將多個節點放到一個集群中,它也是一個上下文管理器,使用 with 語法。
6.2 貢獻云廠商
需要在 resources/aws 文件夾中更新資源圖片,然后執行 ./autogen.sh 即可。./autogen.sh 會對 resources/ 做這么幾件事:
將特定云供應商的 svg 圖片轉換為 png
將特定云供應商的圖片調整為圓角圖片
自動生成節點類代碼
自動生成文檔
使用 black 格式化自動生成的代碼
6.3 自定義圖片
定義圖片變量,將鏈接地址urlretrieve為icon,就可以使用。
from urllib.request import urlretrieve from diagrams import Cluster, Diagram from diagrams.aws.database import Aurora from diagrams.custom import Custom from diagrams.k8s.compute import Pod # Download an image to be used into a Custom Node class #rabbitmq_url = "https://jpadilla.github.io/rabbitmqapp/assets/img/icon.png" rabbitmq_url = "https://img2018.cnblogs.com/blog/1538609/201907/1538609-20190720105324996-496731759.jpg" rabbitmq_icon = "rabbitmq.png" urlretrieve(rabbitmq_url, rabbitmq_icon) with Diagram("01-Broker Consumers", show=False): with Cluster("Consumers"): consumers = [ Pod("worker"), Pod("worker"), Pod("worker")] queue = Custom("Message queue", rabbitmq_icon) queue >> consumers >> Aurora("Database")
生成圖片
參考鏈接
https://github.com/mingrammer/diagrams
https://github.com/blushft/go-diagrams
https://diagrams.mingrammer.com/docs/getting-started/installation
https://diagrams.mingrammer.com/docs/getting-started/examples
https://blog.csdn.net/wangbinxin001/article/details/104344692
https://www.tonyballantyne.com/graphs.html
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。