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调用浏览器并打开一个网址的例子
Jun 05 Python
python使用正则表达式分析网页中的图片并进行替换的方法
Mar 26 Python
Python打印斐波拉契数列实例
Jul 07 Python
Python Socket传输文件示例
Jan 16 Python
numpy.std() 计算矩阵标准差的方法
Jul 11 Python
Python中关键字global和nonlocal的区别详解
Sep 03 Python
利用Python实现手机短信监控通知的方法
Jul 22 Python
在pycharm中实现删除bookmark
Feb 14 Python
Django import export实现数据库导入导出方式
Apr 03 Python
python 6种方法实现单例模式
Dec 15 Python
pandas按条件筛选数据的实现
Feb 20 Python
Python实现单例模式的5种方法
Jun 15 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读取数据库信息的几种方法
2008/05/24 PHP
php生成zip压缩文件的方法详解
2013/06/09 PHP
PHP中OpenSSL加密问题整理
2017/12/14 PHP
一个网马的tips实现分析
2010/11/28 Javascript
使用javascript实现监控视频播放并打印日志
2015/01/05 Javascript
JavaScript实现瀑布流布局
2020/06/28 Javascript
JavaScript+html5 canvas绘制的小人效果
2016/01/27 Javascript
基于JavaScript实现文字超出部分隐藏
2016/02/29 Javascript
JS控制页面跳转时未请求要跳转的地址怎么回事
2016/10/14 Javascript
微信小程序 配置文件详细介绍
2016/12/14 Javascript
canvas实现图片根据滑块放大缩小效果
2017/02/24 Javascript
Bootstrap响应式导航由768px变成992px的实现代码
2017/06/15 Javascript
JavaScript实现三级联动效果
2017/07/15 Javascript
JS实现的3des+base64加密解密算法完整示例
2018/05/18 Javascript
webpack多入口多出口的实现方法
2018/08/17 Javascript
vue给组件传递不同的值方法
2018/09/29 Javascript
vue-cli在 history模式下的配置详解
2019/11/26 Javascript
Python selenium 三种等待方式详解(必会)
2016/09/15 Python
node.js获取参数的常用方法(总结)
2017/05/29 Python
详解python中的文件与目录操作
2017/07/11 Python
python定时利用QQ邮件发送天气预报的实例
2017/11/17 Python
VScode编写第一个Python程序HelloWorld步骤
2018/04/06 Python
pygame游戏之旅 添加游戏介绍
2018/11/20 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
2019/01/29 Python
简单了解python元组tuple相关原理
2019/12/02 Python
Python gevent协程切换实现详解
2020/09/14 Python
一款利用纯css3实现的win8加载动画的实例分析
2014/12/11 HTML / CSS
高校生生产实习自我鉴定
2013/09/21 职场文书
三年级学生评语
2014/04/23 职场文书
王力宏牛津大学演讲稿
2014/05/22 职场文书
调研汇报材料范文
2014/08/17 职场文书
技术股份合作协议书
2014/10/05 职场文书
幼儿园老师个人总结
2015/02/28 职场文书
离职信范本
2015/06/23 职场文书
python实现三次密码验证的示例
2021/04/29 Python
Redis分布式锁Redlock的实现
2021/08/07 Redis