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 相关文章推荐
vc6编写python扩展的方法分享
Jan 17 Python
使用C++扩展Python的功能详解
Jan 12 Python
详解Python中的动态属性和特性
Apr 07 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
Apr 27 Python
Python实现将通信达.day文件读取为DataFrame
Dec 22 Python
python、Matlab求定积分的实现
Nov 20 Python
python实现二分类的卡方分箱示例
Nov 22 Python
matplotlib 曲线图 和 折线图 plt.plot()实例
Apr 17 Python
python 实现一个简单的线性回归案例
Dec 17 Python
Python修改DBF文件指定列
Dec 19 Python
如何编写python的daemon程序
Jan 07 Python
Python爬虫自动化获取华图和粉笔网站的错题(推荐)
Jan 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高手需要要掌握的知识点
2014/08/21 PHP
PHP MYSQL简易交互式站点开发
2016/12/27 PHP
php面向对象程序设计入门教程
2019/06/22 PHP
jquery自定义滚动条插件示例分享
2014/02/21 Javascript
轻松创建nodejs服务器(5):事件处理程序
2014/12/18 NodeJs
JavaScript中日期的相关操作方法总结
2015/10/24 Javascript
详解基于Bootstrap扁平化的后台框架Ace
2015/11/27 Javascript
javascript实现网站加入收藏功能
2015/12/16 Javascript
JS Ajax请求如何防止重复提交
2016/06/13 Javascript
JS 获取HTML标签内的子节点的方法
2016/09/21 Javascript
在Vue中如何使用Cookie操作实例
2017/07/27 Javascript
Vue2.0+ElementUI实现表格翻页的实例
2017/10/23 Javascript
Vue添加请求拦截器及vue-resource 拦截器使用
2017/11/23 Javascript
关于redux-saga中take使用方法详解
2018/02/27 Javascript
使用vue-aplayer插件时出现的问题的解决
2018/03/02 Javascript
基于ionic实现下拉刷新功能
2018/05/10 Javascript
JS通过位运算实现权限加解密
2018/08/14 Javascript
详解SPA中前端路由基本原理与实现方式
2018/09/12 Javascript
Node.js 进程平滑离场剖析小结
2019/01/24 Javascript
vue增加强缓存和版本号的实现方法
2019/05/01 Javascript
Vue中的this.$options.data()和this.$data用法说明
2020/07/26 Javascript
Django入门使用示例
2017/12/12 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
2019/05/07 Python
Flask框架钩子函数功能与用法分析
2019/08/02 Python
Atom Python 配置Python3 解释器的方法
2019/08/28 Python
Pytorch Tensor基本数学运算详解
2019/12/30 Python
通过实例解析python描述符原理作用
2020/01/22 Python
详解使用HTML5 Canvas创建动态粒子网格动画
2016/12/14 HTML / CSS
微软瑞士官方网站:Microsoft瑞士
2018/04/20 全球购物
改变生活的男士内衣:SAXX Underwear
2019/08/28 全球购物
什么是Connection-oriented Protocol/Connectionless Protocol面向连接的协议/无连接协议
2012/09/06 面试题
自荐书封面下载
2013/11/29 职场文书
圣诞节活动策划方案
2014/06/09 职场文书
组工干部演讲稿
2014/09/02 职场文书
python机器学习Github已达8.9Kstars模型解释器LIME
2021/11/23 Python
剑指Offer之Java算法习题精讲二叉树专项训练
2022/03/21 Java/Android