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多线程操作实例
Nov 21 Python
python使用sorted函数对列表进行排序的方法
Apr 04 Python
python中defaultdict的用法详解
Jun 07 Python
python与C互相调用的方法详解
Jul 14 Python
Python中常用信号signal类型实例
Jan 25 Python
Python使用add_subplot与subplot画子图操作示例
Jun 01 Python
opencv python 基于KNN的手写体识别的实例
Aug 03 Python
python re库的正则表达式入门学习教程
Mar 08 Python
Django上使用数据可视化利器Bokeh解析
Jul 31 Python
Python中zipfile压缩文件模块的基本使用教程
Jun 14 Python
Python xlwings插入Excel图片的实现方法
Feb 26 Python
基于PyQt5制作一个群发邮件工具
Apr 08 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中base64_decode与base64_encode加密解密函数实例
2014/11/24 PHP
PHP生成唯一订单号的方法汇总
2015/04/16 PHP
学习php设计模式 php实现装饰器模式(decorator)
2015/12/07 PHP
PHP静态延迟绑定和普通静态效率的对比
2017/10/20 PHP
jQuery each()方法的使用方法
2010/03/18 Javascript
初窥JQuery(二) 事件机制(1)
2010/11/25 Javascript
js实时监听文本框状态的方法
2011/04/26 Javascript
JS自动缩小超出大小的图片
2012/10/12 Javascript
jquery实现保存已选用户
2014/07/21 Javascript
js判断浏览器版本以及浏览器内核的方法
2015/01/20 Javascript
JS实现按比例缩放图片的方法(附C#版代码)
2015/12/08 Javascript
AngularJS使用ngOption实现下拉列表的实例代码
2016/01/23 Javascript
js+css实现回到顶部按钮(back to top)
2016/03/02 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
2016/10/27 Javascript
AJAX和jQuery动态加载数据的实现方法
2016/12/05 Javascript
JavaScript Uploadify文件上传实例
2017/02/28 Javascript
Vue.js更改调试地址端口号的实例
2018/09/19 Javascript
详解Vue基于vue-quill-editor富文本编辑器使用心得
2019/01/03 Javascript
Node.js Stream ondata触发时机与顺序的探索
2019/03/08 Javascript
Vue中对iframe实现keep alive无刷新的方法
2019/07/23 Javascript
JavaScript canvas绘制渐变颜色的矩形
2020/02/18 Javascript
vue 实现超长文本截取,悬浮框提示
2020/07/29 Javascript
使用python装饰器计算函数运行时间的实例
2018/04/21 Python
Flask框架Flask-Login用法分析
2018/07/23 Python
Django中日期处理注意事项与自定义时间格式转换详解
2018/08/06 Python
详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
2020/04/01 Python
不同浏览器对CSS3和HTML5的支持状况
2009/10/31 HTML / CSS
HTML5边玩边学(3)像素和颜色
2010/09/21 HTML / CSS
canvas线条的属性详解
2018/03/27 HTML / CSS
程序员机试试题汇总
2012/03/07 面试题
购房意向书范本
2014/04/01 职场文书
无财产无子女离婚协议书范文
2014/09/14 职场文书
党的群众路线学习笔记
2014/11/06 职场文书
初中教师个人工作总结
2015/02/10 职场文书
Python使用protobuf序列化和反序列化的实现
2021/05/19 Python