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 获取本机ip地址的两个方法
Feb 25 Python
python解析xml文件实例分析
May 27 Python
python Django批量导入数据
Mar 25 Python
Python读取指定目录下指定后缀文件并保存为docx
Apr 23 Python
Python实现删除列表中满足一定条件的元素示例
Jun 12 Python
django数据库migrate失败的解决方法解析
Feb 08 Python
对python中的pop函数和append函数详解
May 04 Python
使用Python实现微信提醒备忘录功能
Dec 04 Python
opencv python统计及绘制直方图的方法
Jan 21 Python
Django实现文件上传下载
Oct 06 Python
Django多进程滚动日志问题解决方案
Dec 17 Python
Python实现自动签到脚本功能
Aug 20 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数组及条件,循环语句学习
2012/11/11 PHP
微信自定义菜单的处理开发示例
2015/04/16 PHP
一个选择最快的服务器转向代码
2009/04/27 Javascript
dotopAlert 提示用户需安装播放器的代码
2012/09/17 Javascript
解决js数据包含加号+通过ajax传到后台时出现连接错误
2013/08/01 Javascript
基于jquery自定义的漂亮单选按钮RadioButton
2013/11/19 Javascript
js跳转页面方法总结
2014/01/29 Javascript
使用cluster 将自己的Node服务器扩展为多线程服务器
2014/11/10 Javascript
jQuery实现HTML表格单元格的合并功能
2016/04/06 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
2016/06/20 Javascript
Angular.js实现动态加载组件详解
2017/05/28 Javascript
JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结
2017/08/10 Javascript
Nodejs 和Session 原理及实战技巧小结
2017/08/25 NodeJs
vue中遇到的坑之变化检测问题(数组相关)
2017/10/13 Javascript
利用node.js如何创建子进程详解
2017/12/09 Javascript
(模仿京东用户注册)用JQuery实现简单表单验证,初学者必看
2018/01/08 jQuery
Vue2.x通用条件搜索组件的封装及应用详解
2019/05/28 Javascript
详解小程序BackgroundAudioManager踩坑之旅
2019/12/08 Javascript
Vue路由守卫及页面登录权限控制的设置方法(两种)
2020/03/31 Javascript
python获取android设备的GPS信息脚本分享
2015/03/06 Python
详解Python中的文本处理
2015/04/11 Python
详解 Python中LEGB和闭包及装饰器
2017/08/03 Python
Python在不同目录下导入模块的实现方法
2017/10/27 Python
Python Socket使用实例
2017/12/18 Python
使用matplotlib绘制图例标签中带有公式的图
2019/12/13 Python
Pytorch 实现冻结指定卷积层的参数
2020/01/06 Python
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
2021/01/05 Python
用html5绘制折线图的实例代码
2016/03/25 HTML / CSS
惠普加拿大在线商店:HP加拿大
2017/09/15 全球购物
Strathberry苏贝瑞中国官网:西班牙高级工匠手工打造
2020/10/19 全球购物
一套带网友答案的.NET笔试题
2016/12/06 面试题
管理部部长岗位职责
2013/12/05 职场文书
2014副局长群众路线对照检查材料思想汇报
2014/09/22 职场文书
人身损害赔偿协议书
2016/03/22 职场文书
假期读书倡议书3篇
2019/08/19 职场文书
Windows下使用Nginx+Tomcat做负载均衡的完整步骤
2021/03/31 Servers