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程序的执行原理
Apr 11 Python
Python中表示字符串的三种方法
Sep 06 Python
Python实现生成随机数据插入mysql数据库的方法
Dec 25 Python
Python3中的json模块使用详解
May 05 Python
Python格式化输出%s和%d
May 07 Python
在python环境下运用kafka对数据进行实时传输的方法
Dec 27 Python
Python3标准库总结
Feb 19 Python
python flask框架实现重定向功能示例
Jul 02 Python
python selenium操作cookie的实现
Mar 18 Python
Python用来做Web开发的优势有哪些
Aug 05 Python
Python 2.6.6升级到Python2.7.15的详细步骤
Dec 14 Python
Pyqt5将多个类组合在一个界面显示的完整示例
Sep 04 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 冒泡排序算法的实现代码
2010/08/08 PHP
PHP实现邮件群发的源码
2013/06/18 PHP
二进制交叉权限微型php类分享
2014/02/07 PHP
php实现数组纵向转横向并过滤重复值的方法分析
2017/05/29 PHP
如何做到打开一个页面,过几分钟自动转到另一页面
2007/04/20 Javascript
jQuery遍历Table应用示例
2014/04/09 Javascript
jQuery判断多个input file 都不能为空的例子
2015/06/23 Javascript
JavaScript中var关键字的使用详解
2015/08/14 Javascript
jquery Easyui快速开发总结
2015/08/20 Javascript
18个非常棒的jQuery代码片段
2015/11/02 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
2016/09/05 Javascript
jQuery实现弹窗居中效果类似alert()
2017/02/27 Javascript
Webpack性能优化 DLL 用法详解
2017/08/10 Javascript
vue基于两个计算属性实现选中和全选功能示例
2019/02/08 Javascript
微信小程序-form表单提交代码实例
2019/04/29 Javascript
swiper实现异形轮播效果
2019/11/28 Javascript
[43:53]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.22
2019/09/05 DOTA
[58:11]守擂赛第二周擂主赛 DeMonsTer vs Leopard
2020/04/28 DOTA
python进阶教程之词典、字典、dict
2014/08/29 Python
Python 自动补全(vim)
2014/11/30 Python
Python3里的super()和__class__使用介绍
2015/04/23 Python
python3中获取文件当前绝对路径的两种方法
2018/04/26 Python
解决pycharm回车之后不能换行或不能缩进的问题
2019/01/16 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
2019/05/28 Python
python+logging+yaml实现日志分割
2019/07/22 Python
Python网页解析器使用实例详解
2020/05/30 Python
pytorch 中forward 的用法与解释说明
2021/02/26 Python
计算s=f(f(-1.4))的值
2014/05/06 面试题
Prototype如何更新局部页面
2013/03/03 面试题
学校校庆演讲稿
2014/05/22 职场文书
2015年学校安全管理工作总结
2015/05/11 职场文书
答谢酒会主持词
2015/07/02 职场文书
军训新闻稿范文
2015/07/17 职场文书
教师培训学习心得体会
2016/01/21 职场文书
创业计划书之物流运送
2019/09/17 职场文书
victoriaMetrics库布隆过滤器初始化及使用详解
2022/04/05 Golang