欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python利用Diagrams繪制漂亮的系統(tǒng)架構(gòu)圖

 更新時間:2023年01月12日 11:08:00   作者:Ckend  
Diagrams  是一個基于Python繪制云系統(tǒng)架構(gòu)的模塊,它能夠通過非常簡單的描述就能可視化架構(gòu)。本文將利用它繪制漂亮的系統(tǒng)架構(gòu)圖,感興趣的可以了解一下

Diagrams  是一個基于Python繪制云系統(tǒng)架構(gòu)的模塊,它能夠通過非常簡單的描述就能可視化架構(gòu),并支持以下6個云產(chǎn)品的圖標:

AWS、Azure、GCP、K8s、阿里云 和 Oracle 云

基于Diagrams提供的節(jié)點,你只需要指定一個云產(chǎn)品(實際上選哪個都一樣,我們只需要那個產(chǎn)品相應(yīng)的圖標,你可以選一個自己覺得好看的產(chǎn)品),使用其內(nèi)部自帶的云產(chǎn)品的圖標,就能簡單繪制基于某云產(chǎn)品圖標的架構(gòu)圖。

比如下面的代碼,繪制了一個簡單的基于數(shù)據(jù)庫集群的網(wǎng)絡(luò)服務(wù)架構(gòu):

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

非常非常適合用來做論文的架構(gòu)圖繪制,強烈推薦。

1.準備

開始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細Python安裝指南 進行安裝。

(可選1) 如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda,它內(nèi)置了Python和pip.

(可選2) 此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點

請選擇以下任一種方式輸入命令安裝依賴

1. Windows 環(huán)境 打開 Cmd (開始-運行-CMD)。

2. MacOS 環(huán)境 打開 Terminal (command+空格輸入Terminal)。

3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.

pip install diagrams

看到 Successfully installed xxx 則說明安裝成功。

Diagrams 使用了 graphviz 作為渲染工具,因此為了順利使用 Diagrams ,還需要下載 graphviz:

https://www.graphviz.org/download/

macOS用戶可以直接brew安裝:

brew install graphviz

2.基本使用與例子

2.1 初始化與導出

使用 Diagram 類初始化一個繪圖上下文,這個類接收到的第一個參數(shù)將會成為架構(gòu)圖的文件名,而一當代碼運行完畢,它將會以該文件名保存(空格會被下劃線所替代):

from diagrams import Diagram
from diagrams.aws.compute import EC2

with Diagram("Simple Diagram"):
    EC2("web")

此外,它還可以選擇導出的文件格式,在Diagram類里增加outformat參數(shù),也可以不以第一個參數(shù)為文件保存名稱,增加filename參數(shù)指定名稱即可:

with Diagram("Simple Diagram", outformat="jpg", filename="my_diagram")

2.2 節(jié)點類型

由于節(jié)點類型比較多,我們無法一一展示出來,所有類型的節(jié)點里都可以在官方文檔里找到,比如:

阿里云:https://diagrams.mingrammer.com/docs/nodes/alibabacloud

K8S:https://diagrams.mingrammer.com/docs/nodes/k8s

AWS:https://diagrams.mingrammer.com/docs/nodes/aws

接下來以AWS為例子,講解幾個基本的數(shù)據(jù)流例子:

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

# show參數(shù)表示是否自動打開圖像
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")

幾個操作符:

 >> 表示從左到右的數(shù)據(jù)流

 << 表示從右到左的數(shù)據(jù)流

  表示沒有箭頭的數(shù)據(jù)流

還可以用變量賦值的形式簡化代碼:

from diagrams import Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB

with Diagram("Workers", show=False, direction="TB"):
    lb = ELB("lb")
    db = RDS("events")
    lb >> EC2("worker1") >> db
    lb >> EC2("worker2") >> db
    lb >> EC2("worker3") >> db
    lb >> EC2("worker4") >> db
    lb >> EC2("worker5") >> db

可以看到這里箭頭的方向變了,這是因為Diagram加了direction參數(shù),TB 表示數(shù)據(jù)流向 top to bottm, 即從上到下,可選的其他參數(shù)還有:LR(左至右)、BT(底至上)、RL(右至左)。

上面的代碼還可以用數(shù)組的形式進一步簡化:

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")

2.3 集群塊

使用Cluster 類 并用with以上下文的形式,你可以非常方便地生成一個集群塊:

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

而且還可以做得相當復雜:

這里代碼很簡單,但是比較長,后續(xù)還有一個比較重要的例子,這里就不展示了

from diagrams import Cluster, Diagram
from diagrams.aws.compute import ECS, EKS, Lambda
from diagrams.aws.database import Redshift
from diagrams.aws.integration import SQS
from diagrams.aws.storage import S3

with Diagram("Event Processing", show=False):
    source = EKS("k8s source")

    with Cluster("Event Flows"):
        with Cluster("Event Workers"):
            workers = [ECS("worker1"),
                       ECS("worker2"),
                       ECS("worker3")]

        queue = SQS("event queue")

        with Cluster("Processing"):
            handlers = [Lambda("proc1"),
                        Lambda("proc2"),
                        Lambda("proc3")]

    store = S3("events store")
    dw = Redshift("analytics")

    source >> workers >> queue >> handlers
    handlers >> store
    handlers >> dw

2.4 自定義線的顏色與屬性

使用Edge函數(shù),你可以自定義線的顏色與屬性以及備注,比如:

Edge(color="firebrick", style="dashed", label="test")
# 使用火磚色,線的類型為虛線,備注為test

下面是一個比較復雜的例子,但是你如果認真閱讀了,會發(fā)現(xiàn)它其實很簡單:

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.logging 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

到此這篇關(guān)于Python利用Diagrams繪制漂亮的系統(tǒng)架構(gòu)圖的文章就介紹到這了,更多相關(guān)Python Diagrams繪制系統(tǒng)架構(gòu)圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python第三方常用模塊openpyxl的簡單介紹

    Python第三方常用模塊openpyxl的簡單介紹

    openpyxl模塊是一個讀寫Excel?2010文檔的Python庫,如果要處理更早格式的Excel文檔,需要用到額外的庫,openpyxl是一個比較綜合的工具,能夠同時讀取和修改Excel文檔,下面這篇文章主要給大家介紹了關(guān)于Python第三方常用模塊openpyxl的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • django+xadmin+djcelery實現(xiàn)后臺管理定時任務(wù)

    django+xadmin+djcelery實現(xiàn)后臺管理定時任務(wù)

    這篇文章主要介紹了django+xadmin+djcelery實現(xiàn)后臺管理定時任務(wù),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • Pandas的MultiIndex多層索引使用說明

    Pandas的MultiIndex多層索引使用說明

    這篇文章主要介紹了Pandas的MultiIndex多層索引使用說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • pyside6-uic生成py代碼中文為unicode(亂碼)的問題解決方案

    pyside6-uic生成py代碼中文為unicode(亂碼)的問題解決方案

    這篇文章主要介紹了如何解決pyside6-uic生成py代碼中文為unicode(亂碼)的問題,文中通過代碼和圖文介紹的非常詳細,對大家解決問題有一定的幫助,需要的朋友可以參考下
    2024-02-02
  • python模塊導入的細節(jié)詳解

    python模塊導入的細節(jié)詳解

    這篇文章主要給大家介紹了關(guān)于python模塊導入細節(jié)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-12-12
  • 用python繪制極坐標雷達圖

    用python繪制極坐標雷達圖

    大家好,本篇文章主要講的是用python繪制極坐標雷達圖,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • pytorch1.60 torch.nn在pycharm中無法自動智能提示的解決

    pytorch1.60 torch.nn在pycharm中無法自動智能提示的解決

    這篇文章主要介紹了pytorch1.60 torch.nn在pycharm中無法自動智能提示的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python 專題九 Mysql數(shù)據(jù)庫編程基礎(chǔ)知識

    python 專題九 Mysql數(shù)據(jù)庫編程基礎(chǔ)知識

    在Python網(wǎng)絡(luò)爬蟲中,通常是通過TXT純文本方式存儲,其實也是可以存儲在數(shù)據(jù)庫中的;同時在WAMP(Windows、Apache、MySQL、PHP或Python)開發(fā)網(wǎng)站中,也可以通過Python構(gòu)建網(wǎng)頁的,所以這篇文章主要講述Python調(diào)用MySQL數(shù)據(jù)庫相關(guān)編程知識
    2017-03-03
  • 在Python中使用M2Crypto模塊實現(xiàn)AES加密的教程

    在Python中使用M2Crypto模塊實現(xiàn)AES加密的教程

    這篇文章主要介紹了在Python中使用M2Crypto模塊實現(xiàn)AES加密的教程,例子中的方法使用aes_128_ecb算法,需要的朋友可以參考下
    2015-04-04
  • Python如何檢驗樣本是否服從正態(tài)分布

    Python如何檢驗樣本是否服從正態(tài)分布

    這篇文章主要介紹了Python如何檢驗樣本是否服從正態(tài)分布問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02

最新評論