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


Posted in Python onApril 08, 2021

技术背景

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

diagrams的安装

与其他python库一样的,diagrams也可以通过pip来进行安装和管理,这里为了更快的安装,我们使用了腾讯的镜像源来加速:

[dechin@dechin-manjaro diagrams]$ python3 -m pip install diagrams -i https://mirrors.cloud.tencent.com/pypi/simple 
Looking in indexes: https://mirrors.cloud.tencent.com/pypi/simple
Collecting diagrams
  Downloading https://mirrors.cloud.tencent.com/pypi/packages/d6/4e/d4725222ac080375954d63d3c90243fdaa219fe085327d42b9dc68c71293/diagrams-0.19.1-py3-none-any.whl (19.2 MB)
     |????????????????????????????????| 19.2 MB 6.7 MB/s 
Requirement already satisfied: graphviz<0.17.0,>=0.13.2 in /home/dechin/anaconda3/lib/python3.8/site-packages (from diagrams) (0.16)
Requirement already satisfied: jinja2<3.0,>=2.10 in /home/dechin/anaconda3/lib/python3.8/site-packages (from diagrams) (2.11.2)
Requirement already satisfied: MarkupSafe>=0.23 in /home/dechin/anaconda3/lib/python3.8/site-packages (from jinja2<3.0,>=2.10->diagrams) (1.1.1)
Installing collected packages: diagrams
Successfully installed diagrams-0.19.1

基础逻辑关系图

首先我们用diagrams来绘制一个最简单的逻辑关系图,从负载均衡到服务器节点,再到具体的数据库:

# example1.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") # 箭头关系

在这个案例中我们使用了AWS提供的一些基础架构组件的标签,并且可以指定各个组件模块的名称。上述代码可以直接执行:python3 example1.py,然后会在当前目录下生成一个这样的架构图:

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

整体感觉还是比较精美的,只是如果使用专业工具如Visio等来画图的话,我们还可以直接对图片进行切割,操作起来会更加方便。

组件簇的定义

同样来自于官方文档中的示例,我们不仅可以定义单一的组件,还可以将概念中可以组成一个模块的多个组件组成一个耦合簇,在架构图中展现:

# example2.py

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

with Diagram("Web Service Cluster", show=False):
    with Cluster("DB Cluster"):
        db_master = RDS("master")
        db_master - [RDS("slave1"), RDS("slave2")] # 直线连接
    ELB("lb") >> EC2("web") >> db_master

运行方式也是通过python3 example2.py,同样的会在当前目录下生成一个这样的图像文件:

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

我们可以看到刚才定义的几个数据库组件,被统一的收纳到了一个数据库的耦合簇中。

总结概要

本文中通过python库diagrams展示了基础的架构图绘制的方法,库中提供了常用的AWS和k8S等场景下常用的组件标签,使得我们用python代码也可以绘制精美清晰的架构图。这里组件之间的连接和耦合关系,也可以通过简单的符号进行实现,这也得益于python中所特有的魔法函数。

以上就是python3使用diagrams生成架构图的步骤的详细内容,更多关于python 用diagrams生成架构图的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python urlopen()函数 示例分享
Jun 12 Python
Python中的super用法详解
May 28 Python
Python画图学习入门教程
Jul 01 Python
Python实现的微信公众号群发图片与文本消息功能实例详解
Jun 30 Python
python生成圆形图片的方法
Mar 25 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
Jun 28 Python
python 通过麦克风录音 生成wav文件的方法
Jan 09 Python
连接pandas以及数组转pandas的方法
Jun 28 Python
python Django中models进行模糊查询的示例
Jul 18 Python
关于Python中的向量相加和numpy中的向量相加效率对比
Aug 26 Python
深入浅析Python 中的sklearn模型选择
Oct 12 Python
python 基于DDT实现数据驱动测试
Feb 18 Python
python实现求纯色彩图像的边框
python爬取企查查企业信息之selenium自动模拟登录企查查
Python3 使用pip安装git并获取Yahoo金融数据的操作
Apr 08 #Python
Django 如何实现文件上传下载
Apr 08 #Python
python3 删除所有自定义变量的操作
Apr 08 #Python
pytorch显存一直变大的解决方案
Apr 08 #Python
Python文件的操作示例的详细讲解
You might like
php中mysql连接和基本操作代码(快速测试使用,简单方便)
2014/04/25 PHP
CodeIgniter分页类pagination使用方法示例
2016/03/28 PHP
php外部执行命令函数用法小结
2016/10/11 PHP
Ajax::prototype 源码解读
2007/01/22 Javascript
javascript 命名规则 变量命名规则
2010/02/25 Javascript
utf-8编码引起js输出中文乱码的解决办法
2010/06/23 Javascript
javascript列表框操作函数集合汇总
2013/11/28 Javascript
分享Javascript中最常用的55个经典小技巧
2013/11/29 Javascript
jQuery动画效果animate和scrollTop结合使用实例
2014/04/02 Javascript
JavaScript入门教程之引用类型
2016/05/04 Javascript
详细谈谈AngularJS的子级作用域问题
2016/09/05 Javascript
微信小程序 检查接口状态实例详解
2017/06/23 Javascript
jQuery基于cookie实现换肤功能实例
2017/10/14 jQuery
vue 父组件给子组件传值子组件给父组件传值的实例代码
2019/04/15 Javascript
axios实现简单文件上传功能
2019/09/25 Javascript
three.js 如何制作魔方
2020/07/31 Javascript
浅谈python中set使用
2016/06/30 Python
Python中str is not callable问题详解及解决办法
2017/02/10 Python
python文件名和文件路径操作实例
2017/09/29 Python
python对csv文件追加写入列的方法
2019/08/01 Python
Python简单实现词云图代码及步骤解析
2020/06/04 Python
python中zip()函数遍历多个列表方法
2021/02/18 Python
Silk’n激光脱毛器官网:silkn.com
2016/10/06 全球购物
Easy Spirit官网:美国休闲鞋履中的代表品牌
2019/04/12 全球购物
工厂仓管员岗位职责
2014/01/01 职场文书
土建专业大学生自荐信范文
2014/04/09 职场文书
青春奉献演讲稿
2014/05/08 职场文书
质量提升方案
2014/06/16 职场文书
汉语言文学专业求职信
2014/06/19 职场文书
党员批评与自我批评发言材料
2014/10/14 职场文书
2015员工年度考核评语
2015/03/25 职场文书
小学生光盘行动倡议书
2015/04/28 职场文书
2016年小学中秋节活动总结
2016/04/05 职场文书
html2 canvas svg不能识别的解决方案
2021/06/03 HTML / CSS
SpringBoot整合阿里云视频点播的过程详解
2021/12/06 Java/Android
html原生table实现合并单元格以及合并表头的示例代码
2023/05/07 HTML / CSS