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 01 Python
python通过exifread模块获得图片exif信息的方法
Mar 16 Python
使用Python读写文本文件及编写简单的文本编辑器
Mar 11 Python
Flask框架的学习指南之开发环境搭建
Nov 20 Python
Python实现自动为照片添加日期并分类的方法
Sep 30 Python
Python3 Random模块代码详解
Dec 04 Python
在PyCharm下使用 ipython 交互式编程的方法
Jan 17 Python
django框架基于模板 生成 excel(xls) 文件操作示例
Jun 19 Python
tensorflow 大于某个值为1,小于为0的实例
Jun 30 Python
使用OpenCV实现道路车辆计数的使用方法
Jul 15 Python
Python读取yaml文件的详细教程
Jul 21 Python
python中如何使用虚拟环境
Oct 14 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 download.php实现代码 跳转到下载文件(response.redirect)
2009/08/26 PHP
PHP 使用memcached简单示例分享
2015/03/05 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
2015/11/24 PHP
学习YUI.Ext第五日--做拖放Darg&amp;Drop
2007/03/10 Javascript
javascript多种数据类型表格排序代码分析
2010/09/11 Javascript
jquery获取css中的选择器(实例讲解)
2013/12/02 Javascript
JS实现关键字搜索时的相关下拉字段效果
2014/08/05 Javascript
用C/C++来实现 Node.js 的模块(一)
2014/09/24 Javascript
node.js中的fs.rmdir方法使用说明
2014/12/16 Javascript
jQuery实现DIV层淡入淡出拖动特效的方法
2015/02/13 Javascript
javascript生成随机数方法汇总
2015/11/12 Javascript
理解AngularJs指令
2015/12/10 Javascript
angular2使用简单介绍
2016/03/01 Javascript
详解React开发必不可少的eslint配置
2018/02/05 Javascript
vue2.0学习之axios的封装与vuex介绍
2018/05/28 Javascript
Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法
2018/09/15 Javascript
vue中路由跳转不计入history的操作
2020/09/21 Javascript
Vue仿Bibibili首页的问题
2021/01/21 Vue.js
python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
2014/07/18 Python
在Mac OS上使用mod_wsgi连接Python与Apache服务器
2015/12/24 Python
使用python将请求的requests headers参数格式化方法
2019/01/02 Python
Django中在xadmin中集成DjangoUeditor过程详解
2019/07/24 Python
Python进程间通信 multiProcessing Queue队列实现详解
2019/09/23 Python
Python基于Tkinter编写crc校验工具
2020/05/06 Python
python 制作网站小说下载器
2021/02/20 Python
男女时尚与复古风格在线购物:RoseGal(全球免费送货)
2017/07/19 全球购物
北欧最好的童装网上商店:Babyshop
2019/09/15 全球购物
Hotels.com泰国:酒店预订网站
2019/11/20 全球购物
在使用非全零作为空指针内部表达的机器上, NULL是如何定义
2014/11/09 面试题
SQL SERVER面试资料
2013/03/30 面试题
第二批党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
个人先进事迹材料范文
2014/12/29 职场文书
2015年小学一年级班主任工作总结
2015/05/21 职场文书
Go 自定义package包设置与导入操作
2021/05/06 Golang
MySQL中distinct与group by之间的性能进行比较
2021/05/26 MySQL
Java 超详细讲解设计模式之中的抽象工厂模式
2022/03/25 Java/Android