Python利用Diagrams绘制漂亮的系统架构图

目录
  • 1.准备
  • 2.基本使用与例子
    • 2.1 初始化与导出
    • 2.2 节点类型
    • 2.3 集群块
    • 2.4 自定义线的颜色与属性

Diagrams  是一个基于Python绘制云系统架构的模块,它能够通过非常简单的描述就能可视化架构,并支持以下6个云产品的图标:

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

基于Diagrams提供的节点,你只需要指定一个云产品(实际上选哪个都一样,我们只需要那个产品相应的图标,你可以选一个自己觉得好看的产品),使用其内部自带的云产品的图标,就能简单绘制基于某云产品图标的架构图。

比如下面的代码,绘制了一个简单的基于数据库集群的网络服务架构:

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

非常非常适合用来做论文的架构图绘制,强烈推荐。

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,可以访问这篇文章:超详细Python安装指南 进行安装。

(可选1) 如果你用Python的目的是数据分析,可以直接安装Anaconda,它内置了Python和pip.

(可选2) 此外,推荐大家用VSCode编辑器,它有许多的优点

请选择以下任一种方式输入命令安装依赖

1. Windows 环境 打开 Cmd (开始-运行-CMD)。

2. MacOS 环境 打开 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 类初始化一个绘图上下文,这个类接收到的第一个参数将会成为架构图的文件名,而一当代码运行完毕,它将会以该文件名保存(空格会被下划线所替代):

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

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

此外,它还可以选择导出的文件格式,在Diagram类里增加outformat参数,也可以不以第一个参数为文件保存名称,增加filename参数指定名称即可:

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

2.2 节点类型

由于节点类型比较多,我们无法一一展示出来,所有类型的节点里都可以在官方文档里找到,比如:

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

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

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

接下来以AWS为例子,讲解几个基本的数据流例子:

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参数表示是否自动打开图像
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")

几个操作符:

 >> 表示从左到右的数据流

 << 表示从右到左的数据流

  表示没有箭头的数据流

还可以用变量赋值的形式简化代码:

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参数,TB 表示数据流向 top to bottm, 即从上到下,可选的其他参数还有:LR(左至右)、BT(底至上)、RL(右至左)。

上面的代码还可以用数组的形式进一步简化:

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

而且还可以做得相当复杂:

这里代码很简单,但是比较长,后续还有一个比较重要的例子,这里就不展示了

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函数,你可以自定义线的颜色与属性以及备注,比如:

Edge(color="firebrick", style="dashed", label="test")
# 使用火砖色,线的类型为虚线,备注为test

下面是一个比较复杂的例子,但是你如果认真阅读了,会发现它其实很简单:

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

到此这篇关于Python利用Diagrams绘制漂亮的系统架构图的文章就介绍到这了,更多相关Python Diagrams绘制系统架构图内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python3使用diagrams绘制架构图的步骤

    技术背景 对于一个架构师或者任何一个软件工程师而言,绘制架构图都是一个比较值得学习的技能.这就像我们学习的时候整理的一些Xmind那种思维逻辑图一样,不仅可以帮我们看到组件之间的联系和层级,还能够展示出组件的全貌.虽然我们也可以用Visio或者Edraw等专业绘图工具来绘制架构图,但是对于工程师而言,用代码来直接绘制架构图,会显得更加的优雅.这里我们介绍的diagrams,就是一个可以用来绘制架构图的python包. diagrams的安装 与其他python库一样的,diagrams也可以通过

  • Python利用Diagrams绘制漂亮的系统架构图

    目录 1.准备 2.基本使用与例子 2.1 初始化与导出 2.2 节点类型 2.3 集群块 2.4 自定义线的颜色与属性 Diagrams  是一个基于Python绘制云系统架构的模块,它能够通过非常简单的描述就能可视化架构,并支持以下6个云产品的图标: AWS.Azure.GCP.K8s.阿里云 和 Oracle 云 基于Diagrams提供的节点,你只需要指定一个云产品(实际上选哪个都一样,我们只需要那个产品相应的图标,你可以选一个自己觉得好看的产品),使用其内部自带的云产品的图标,就能简单

  • Python利用matplotlib绘制约数个数统计图示例

    本文实例讲述了Python利用matplotlib绘制约数个数统计图.分享给大家供大家参考,具体如下: 利用Python计算1000以内自然数的约数个数,然后通过matplotlib绘制统计图. 下图为约数个数的散点图及其分布情况的条形图. Python代码: import collections import matplotlib.pyplot as plt def countDivisors(num): ans = 1 x = 2 while x * x <= num: cnt = 1 wh

  • Python利用matplotlib绘制折线图的新手教程

    前言 matplotlib是Python中的一个第三方库.主要用于开发2D图表,以渐进式.交互式的方式实现数据可视化,可以更直观的呈现数据,使数据更具说服力. 一.安装matplotlib pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple 二.matplotlib图像简介 matplotlib的图像分为三层,容器层.辅助显示层和图像层. 1. 容器层主要由Canvas.Figure.Axes组成. Canvas位

  • Python利用matplotlib绘制散点图的新手教程

    前言 上篇文章介绍了使用matplotlib绘制折线图,参考:https://www.jb51.net/article/198991.htm,本篇文章继续介绍使用matplotlib绘制散点图. 一.matplotlib绘制散点图 # coding=utf-8 import matplotlib.pyplot as plt years = [2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019] turnovers =

  • Python利用 matplotlib 绘制直方图

    目录 1. 直方图概述 1.1什么是直方图? 1.2直方图使用场景 1.3直方图绘制步骤 1.4案例展示 2. 直方图属性 2.1设置颜色 2.2设置长条形数目 2.3设置透明度 2.4设置样式 3. 添加折线直方图 4. 堆叠直方图 5. 不等距直方图 6. 多类直方图 复习回顾: 经过前面对 matplotlib 模块从底层架构.基本绘制步骤等学习,我们已经学习了折线图.柱状图的绘制方法. matplotlib 模块基础:对matplotlib 模块常用方法进行学习 matplotlib 模

  • Python利用Matplotlib绘制图表详解

    目录 前言 折线图绘制与显示 绘制数学函数图像 散点图绘制 绘制柱状图 绘制直方图 饼图 前言 Matplotlib 是 Python 中类似 MATLAB 的绘图工具,如果您熟悉 MATLAB,那么可以很快的熟悉它. Matplotlib 提供了一套面向对象绘图的 API,它可以轻松地配合 Python GUI 工具包(比如 PyQt,WxPython.Tkinter)在应用程序中嵌入图形.与此同时,它也支持以脚本的形式在 Python.IPython Shell.Jupyter Notebo

  • Python利用Turtle绘制虎年图像

    目录 导语 一.代码展示 二.效果展示 导语 2022年是农历壬寅虎年,在自然界中,虎有“百兽之王”之称 它的王者之风与勇猛,被作为威仪和权势的象征,千百年来,人们崇虎.刻虎.画虎.剪虎……形成了极具特色的中国虎文化,而今天给大家用Turtle绘制虎年图像,带给大家虎年的祝福! 虎年送头虎,全家乐悠悠,虎蹄为你开财路,虎尾为你拂忧愁. 虎耳为你撞鸿运,虎背为你驮康寿,让这头虎伴你左右,你不虎也虎 也希望大家在新年里,虎虎生威.虎年大吉 一.代码展示 本文是基于Turtle绘制的小老虎呢!本文的全

  • Python利用Turtle绘制哆啦A梦和小猪佩奇

    目录 1.哆啦A梦 2.小猪佩奇 3.Python代码实现(哆啦A梦) 4.Python代码实现(小猪佩奇 ) 1.哆啦A梦 “只要把愿望系在竹竿上请求月亮女神,心愿便能达成”.我超喜欢这句话. 哆啦A梦的创造要追溯到1969年的某个截稿日,作者藤子·F·不二雄的家里突然闯进了一只小猫,虽然很快就要截稿了,但作者还是和小猫玩了起来,还替小猫挠虱子,而这一挠就是几个小时.等作者发现时间不够用的时候,已经来不及完成稿子.这时作者像热锅上的蚂蚁走来走去,突然踢到了女儿的不倒翁玩具,于是作者灵光一现,把

  • Python利用Seaborn绘制多标签的混淆矩阵

    Seaborn - 绘制多标签的混淆矩阵.召回.精准.F1 导入seaborn\matplotlib\scipy\sklearn等包: import seaborn as sns from matplotlib import pyplot as plt from scipy.special import softmax from sklearn.metrics import accuracy_score, confusion_matrix, precision_score, recall_sco

  • Python利用matplotlib绘制圆环图(环形图)的实战案例

    目录 一.概念介绍 二.数据展示 三.图像绘制 四.参数解释 (1) wedgeprops是我们绘图时的参数字典. (2) startangle是第一个数据起画点. (3) plt.text (4) 可以绘制如示例图一样的colorbar,或者legend吗? 总结 一.概念介绍 圆环图(Donut Chart),又称为环形图,甜甜圈图.它从饼图变形而来,单环的作用上与饼图相似,用于展示定性数据中小类占大类的比例关系. Q: 那既然都有饼图了,为什么还要圆环图呢? ① 从空间利用效果上,饼图的t

随机推荐