最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

比如下面的代碼,繪制了一個(gè)簡(jiǎn)單的基于數(shù)據(jù)庫(kù)集群的網(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

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

1.準(zhǔn)備

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

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

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

請(qǐng)選擇以下任一種方式輸入命令安裝依賴(lài)

1. Windows 環(huán)境 打開(kāi) Cmd (開(kāi)始-運(yùn)行-CMD)。

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

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

pip install diagrams

看到 Successfully installed xxx 則說(shuō)明安裝成功。

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

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

macOS用戶(hù)可以直接brew安裝:

brew install graphviz

2.基本使用與例子

2.1 初始化與導(dǎo)出

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

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

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

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

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

2.2 節(jié)點(diǎn)類(lèi)型

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

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

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

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

接下來(lái)以AWS為例子,講解幾個(gè)基本的數(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ù)表示是否自動(dòng)打開(kāi)圖像
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")

幾個(gè)操作符:

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

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

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

還可以用變量賦值的形式簡(jiǎn)化代碼:

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

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

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

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 類(lèi) 并用with以上下文的形式,你可以非常方便地生成一個(gè)集群塊:

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

而且還可以做得相當(dāng)復(fù)雜:

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

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 自定義線(xiàn)的顏色與屬性

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

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

下面是一個(gè)比較復(fù)雜的例子,但是你如果認(rèn)真閱讀了,會(huì)發(fā)現(xiàn)它其實(shí)很簡(jiǎ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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

禹城市| 中超| 瑞昌市| 蒙阴县| 岳西县| 乳源| 西充县| 宁阳县| 富川| 恩施市| 颍上县| 哈巴河县| 普兰店市| 马公市| 茶陵县| 鄂伦春自治旗| 枣强县| 灵宝市| 云南省| 巍山| 闽侯县| 舟曲县| 双江| 金坛市| 会昌县| 京山县| 罗平县| 靖州| 玉树县| 深水埗区| 富锦市| 光山县| 襄城县| 东明县| 清流县| 莆田市| 阿荣旗| 平定县| 双鸭山市| 拜泉县| 无锡市|