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 相关文章推荐
pip 错误unused-command-line-argument-hard-error-in-future解决办法
Jun 01 Python
github配置使用指南
Nov 18 Python
Python下使用Psyco模块优化运行速度
Apr 05 Python
python在控制台输出进度条的方法
Jun 20 Python
Django中针对基于类的视图添加csrf_exempt实例代码
Feb 11 Python
pandas去除重复列的实现方法
Jan 29 Python
基于python if 判断选择结构的实例详解
May 06 Python
python射线法判断检测点是否位于区域外接矩形内
Jun 28 Python
Python底层封装实现方法详解
Jan 22 Python
用Python生成HTML表格的方法示例
Mar 06 Python
Python 读取WAV音频文件 画频谱的实例
Mar 14 Python
Tensorflow之MNIST CNN实现并保存、加载模型
Jun 17 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来写记数器(详细介绍)
2006/10/09 PHP
PHP生成sitemap.xml地图函数
2013/11/13 PHP
使用WAMP搭建PHP本地开发环境
2017/05/10 PHP
PHP实现电商订单自动确认收货redis队列
2017/05/17 PHP
JavaScript多线程的实现方法
2007/05/08 Javascript
document.designMode的功能与使用方法介绍
2007/11/22 Javascript
基于jquery的给文章加入关键字链接
2010/10/26 Javascript
js数组中如何随机取出一个值
2014/06/13 Javascript
详谈javascript中的cookie
2015/06/03 Javascript
JS 对java返回的json格式的数据处理方法
2016/12/05 Javascript
js实现适合新闻类图片的轮播效果
2017/02/05 Javascript
Vue 2.x教程之基础API
2017/03/06 Javascript
JavaScript实现简单的树形菜单效果
2017/06/23 Javascript
js限制输入框只能输入数字(onkeyup触发)
2018/09/28 Javascript
Vue移动端右滑屏幕返回上一页附源码下载
2019/06/26 Javascript
Vue的编码技巧与规范使用详解
2019/08/28 Javascript
Vue 设置axios请求格式为form-data的操作步骤
2019/10/29 Javascript
[32:56]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.11
2020/12/16 DOTA
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
TensorFlow模型保存/载入的两种方法
2018/03/08 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
2019/06/04 Python
django的分页器Paginator 从django中导入类
2019/07/25 Python
Django 大文件下载实现过程解析
2019/08/01 Python
python Django里CSRF 对应策略详解
2019/08/05 Python
Python 异步协程函数原理及实例详解
2019/11/13 Python
Pytorch实现神经网络的分类方式
2020/01/08 Python
python实现替换word中的关键文字(使用通配符)
2020/02/13 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
Python识别验证码的实现示例
2020/09/30 Python
英国亚马逊官方网站:Amazon.co.uk
2019/08/09 全球购物
vue+django实现下载文件的示例
2021/03/24 Vue.js
爱护公共设施演讲稿
2014/09/13 职场文书
工资收入证明
2014/10/07 职场文书
2014年大堂经理工作总结
2014/11/21 职场文书
运动会入场词
2015/07/18 职场文书
mysql查询结果实现多列拼接查询
2022/04/03 MySQL