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程序中实现分布式进程的教程
Apr 28 Python
Python爬虫利用cookie实现模拟登陆实例详解
Jan 12 Python
TensorFlow安装及jupyter notebook配置方法
Sep 08 Python
python模仿网页版微信发送消息功能
Feb 24 Python
Python读取系统文件夹内所有文件并统计数量的方法
Oct 23 Python
Python实现钉钉发送报警消息的方法
Feb 20 Python
Opencv实现抠图背景图替换功能
May 21 Python
Python生成指定数量的优惠码实操内容
Jun 18 Python
python中dict()的高级用法实现
Nov 13 Python
pytorch ImageFolder的覆写实例
Feb 20 Python
学python需要去培训机构吗
Jul 01 Python
python opencv实现直线检测并测出倾斜角度(附源码+注释)
Dec 31 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实现scws中文分词搜索的方法
2015/12/25 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
php项目中类的自动加载实例讲解
2019/09/12 PHP
php源码的安装方法和实例
2019/09/26 PHP
PHP内存溢出优化代码详解
2021/02/26 PHP
非常强大的 jQuery.AsyncBox 弹出对话框插件
2011/08/29 Javascript
Javascript获取窗口(容器)的大小及位置参数列举及简要说明
2012/12/09 Javascript
关于jQuery中的each方法(jQuery到底干了什么)
2014/03/05 Javascript
详解JavaScript中的blink()方法的使用
2015/06/08 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
详解Vue微信公众号开发踩坑全记录
2017/08/21 Javascript
详解使用vue-cli脚手架初始化Vue项目下的项目结构
2018/03/08 Javascript
对vue v-if v-else-if v-else 的简单使用详解
2018/09/29 Javascript
Vue.js实现大转盘抽奖总结及实现思路
2019/10/09 Javascript
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
2020/04/03 Javascript
JavaScript实现简易计算器小功能
2020/10/22 Javascript
python中字符串前面加r的作用
2015/06/04 Python
python中Switch/Case实现的示例代码
2017/11/09 Python
python psutil库安装教程
2018/03/19 Python
Python判断对象是否相等及eq函数的讲解
2019/02/25 Python
python yield和Generator函数用法详解
2020/02/10 Python
python实现全排列代码(回溯、深度优先搜索)
2020/02/26 Python
matplotlib基础绘图命令之imshow的使用
2020/08/13 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
python 元组和列表的区别
2020/12/30 Python
python中把元组转换为namedtuple方法
2020/12/09 Python
Html5适配iphoneX刘海屏的简单实现
2019/04/09 HTML / CSS
在C语言中"指针和数组等价"到底是什么意思?
2014/03/24 面试题
高中生毕业学习总结的自我评价
2013/11/14 职场文书
优秀教师主要事迹
2014/02/01 职场文书
幼儿园大班毕业教师寄语
2014/04/03 职场文书
厕所文明标语
2014/06/11 职场文书
企业介绍信范文
2015/01/30 职场文书
为什么阅读对所有年龄段的孩子都很重要?
2019/07/08 职场文书
创业计划书之婴幼儿游泳馆
2019/09/11 职场文书
Python循环之while无限迭代
2022/04/30 Python