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 相关文章推荐
Django中实现一个高性能计数器(Counter)实例
Jul 09 Python
python插入排序算法实例分析
Jul 03 Python
设计模式中的原型模式在Python程序中的应用示例
Mar 02 Python
好的Python培训机构应该具备哪些条件
May 23 Python
Python带动态参数功能的sqlite工具类
May 26 Python
Python英文文本分词(无空格)模块wordninja的使用实例
Feb 20 Python
python 获取等间隔的数组实例
Jul 04 Python
python实现一个函数版的名片管理系统过程解析
Aug 27 Python
解决django中form表单设置action后无法回到原页面的问题
Mar 13 Python
python实现3D地图可视化
Mar 25 Python
python使用pyecharts库画地图数据可视化的实现
Mar 25 Python
总结Pyinstaller打包的高级用法
Jun 28 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中{}大括号是什么意思
2013/12/01 PHP
php版阿里大于(阿里大鱼)短信发送实例详解
2016/11/30 PHP
PHP实现中国公民身份证号码有效性验证示例代码
2017/05/03 PHP
Javascript 的addEventListener()及attachEvent()区别分析
2009/05/21 Javascript
js null,undefined,字符串小结
2010/08/21 Javascript
JavaScript 大数据相加的问题
2011/08/03 Javascript
javascript日期对象格式化为字符串的实现方法
2014/01/14 Javascript
用模版生成HTML的的框架jquery.tmpl使用详解
2015/01/07 Javascript
AngularJs根据访问的页面动态加载Controller的解决方案
2015/02/04 Javascript
JavaScript中数据结构与算法(五):经典KMP算法
2015/06/19 Javascript
javascript回调函数的概念理解与用法分析
2017/05/27 Javascript
vue插件vue-resource的使用笔记(小结)
2017/08/04 Javascript
Vue使用mixins实现压缩图片代码
2018/03/14 Javascript
关于layui toolbar和template的结合使用方法
2019/09/19 Javascript
JS函数进阶之继承用法实例分析
2020/01/15 Javascript
[02:38]2018DOTA2亚洲邀请赛赛前采访-VGJ.T
2018/04/03 DOTA
python和C语言混合编程实例
2014/06/04 Python
Python实现的一个自动售饮料程序代码分享
2014/08/25 Python
tensorflow获取变量维度信息
2018/03/10 Python
利用python如何处理nc数据详解
2018/05/23 Python
python操作redis方法总结
2018/06/06 Python
解决yum对python依赖版本问题
2019/07/05 Python
Python @property及getter setter原理详解
2020/03/31 Python
Python操作word文档插入图片和表格的实例演示
2020/10/25 Python
德国婴儿推车和儿童安全座椅商店:BABYSHOP
2016/09/01 全球购物
小学教师自我鉴定
2013/11/07 职场文书
仓库门卫岗位职责
2013/12/22 职场文书
文化宣传方案
2014/03/13 职场文书
松材线虫病防治方案
2014/06/15 职场文书
乡镇八一建军节活动方案
2014/08/24 职场文书
三问三解心得体会
2014/09/05 职场文书
优秀教师先进事迹材料
2014/12/15 职场文书
2015年度个人思想工作总结
2015/04/08 职场文书
2016年助残日旅游活动总结
2016/04/01 职场文书
2016年读书月活动总结范文
2016/04/06 职场文书
个人落户申请书怎么写?
2019/06/28 职场文书