diagrams雲系統架構原型圖制作庫
官網 https://diagrams.mingrammer.com/
github地址 https://github.com/mingrammer/diagrams
1.准備
Diagrams 使用 Graphviz 來渲染圖表,先安裝 Graphviz
2.安裝 diagrams
pip install diagrams
3.示例
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("Web Service", show=False): ELB("lb") >> EC2("web") >> RDS("userdb")
運行
python diagram.py
Diagram 類的第一個參數,會成為架構圖的文件名(轉為小寫,空格被下划線所替代)
web_service.png
4.主要對象
(1)Diagram 架構圖
使用with Diagram()
from diagrams import Diagram from diagrams.aws.compute import EC2 with Diagram("Simple Diagram"): EC2("web")
生成一個包含 EC2 節點的架構圖,在當前目錄的 生成 simple_diagram.png
常用參數說明:
outformat:指定輸出圖片的類型,默認是 png,可以是 png、jpg、svg 和 pdf
show:指定是否顯示圖片
(2)Node 節點或系統組件
支持的雲資源節點有五類:AWS、Azure、AlibabaCloud、GCP 和 K8S
節點之間的關系
>>:左節點指向右節點 <<:右節點指向左節點 -:節點互相連接,沒有方向
eg:
from diagrams import Diagram from diagrams.aws.compute import EC2 from diagrams.aws.database import RDS from diagrams.aws.network import ELB from diagrams.aws.storage import S3 with Diagram("Web Services", show=False): ELB("lb") >> EC2("web") >> RDS("userdb") >> S3("store") ELB("lb") >> EC2("web") >> RDS("userdb") << EC2("stat") (ELB("lb") >> EC2("web")) - EC2("web") >> RDS("userdb")
(3)Cluster 集群或分組
集群使用with Cluster()
支持集群嵌套,實現方法:嵌套使用with Cluster()
from diagrams import Cluster, Diagram from diagrams.aws.compute import ECS from diagrams.aws.database import RDS from diagrams.aws.network import Route53 with Diagram("Simple Web Service with DB Cluster", show=False): dns = Route53("dns") web = ECS("service") with Cluster("DB Cluster"): db_master = RDS("master") db_master - [RDS("slave1"), RDS("slave2")] dns >> web >> db_master
(4)Edge 邊
自定義線的顏色(color)與樣式(style)以及備注(label)
eg:
from diagrams import Cluster, Diagram, Edge from diagrams.onprem.analytics import Spark from diagrams.onprem.compute import Server from diagrams.onprem.database import PostgreSQL from diagrams.onprem.inmemory import Redis from diagrams.onprem.aggregator import Fluentd from diagrams.onprem.monitoring import Grafana, Prometheus from diagrams.onprem.network import Nginx from diagrams.onprem.queue import Kafka with Diagram(name="Advanced Web Service with On-Premise (colored)", show=False): ingress = Nginx("ingress") metrics = Prometheus("metric") metrics << Edge(color="firebrick", style="dashed") << Grafana("monitoring") with Cluster("Service Cluster"): grpcsvc = [ Server("grpc1"), Server("grpc2"), Server("grpc3")] with Cluster("Sessions HA"): master = Redis("session") master - Edge(color="brown", style="dashed") - Redis("replica") << Edge(label="collect") << metrics grpcsvc >> Edge(color="brown") >> master with Cluster("Database HA"): master = PostgreSQL("users") master - Edge(color="brown", style="dotted") - PostgreSQL("slave") << Edge(label="collect") << metrics grpcsvc >> Edge(color="black") >> master aggregator = Fluentd("logging") aggregator >> Edge(label="parse") >> Kafka("stream") >> Edge(color="black", style="bold") >> Spark("analytics") ingress >> Edge(color="darkgreen") << grpcsvc >> Edge(color="darkorange") >> aggregator