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函数学习笔记
Oct 07 Python
python抓取并保存html页面时乱码问题的解决方法
Jul 01 Python
利用Python爬虫给孩子起个好名字
Feb 14 Python
python 实现数组list 添加、修改、删除的方法
Apr 04 Python
Python生成器的使用方法和示例代码
Mar 04 Python
Python中的引用知识点总结
May 20 Python
python实现桌面气泡提示功能
Jul 29 Python
详解Python3定时器任务代码
Sep 23 Python
详解Python绘图Turtle库
Oct 12 Python
tensorflow 重置/清除计算图的实现
Jan 19 Python
Django 多对多字段的更新和插入数据实例
Mar 31 Python
基于Tensorflow读取MNIST数据集时网络超时的解决方式
Jun 22 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原理之变量分离/引用(Variables Separation)
2013/08/09 PHP
百度实时推送api接口应用示例
2014/10/21 PHP
PHP一个简单的无需刷新爬虫
2019/01/05 PHP
PHP实现的数据对象映射模式详解
2019/03/20 PHP
在IE6下发生Internet Explorer cannot open the Internet site错误
2010/06/21 Javascript
jQuery实现的网页换肤效果示例
2016/09/20 Javascript
在vue-cli脚手架中配置一个vue-router前端路由
2017/07/03 Javascript
vue-router实现tab标签页(单页面)详解
2017/10/17 Javascript
vue实现文章内容过长点击阅读全文功能的实例
2017/12/28 Javascript
jQuery实现手机号正则验证输入及自动填充空格功能
2018/01/02 jQuery
JS运动改变单物体透明度的方法分析
2018/01/23 Javascript
Vue 配合eiement动态路由,权限验证的方法
2018/09/26 Javascript
js中call()和apply()改变指针问题的讲解
2019/01/17 Javascript
Nuxt.js实现一个SSR的前端博客的示例代码
2019/09/06 Javascript
javascript的惯性运动实现代码实例
2019/09/07 Javascript
[40:55]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#4Newbee VS Fnatic
2016/03/03 DOTA
python类定义的讲解
2013/11/01 Python
介绍Python的Urllib库的一些高级用法
2015/04/30 Python
python3 破解 geetest(极验)的滑块验证码功能
2018/02/24 Python
python2.x实现人民币转大写人民币
2018/06/20 Python
解析Python的缩进规则的使用
2019/01/16 Python
python如何读取bin文件并下发串口
2019/07/05 Python
PyQt 图解Qt Designer工具的使用方法
2019/08/06 Python
python selenium自动化测试框架搭建的方法步骤
2020/06/14 Python
python:HDF和CSV存储优劣对比分析
2020/06/08 Python
python 实时调取摄像头的示例代码
2020/11/25 Python
Python3中对json格式数据的分析处理
2021/01/28 Python
美国在线健康和美容市场:Pharmapacks
2018/12/05 全球购物
抗洪抢险事迹材料
2014/05/06 职场文书
学雷锋的心得体会
2014/09/04 职场文书
建设幸福中国演讲稿
2014/09/11 职场文书
2015入党自传格式范文
2015/06/26 职场文书
2015年国庆晚会主持词
2015/07/01 职场文书
thinkphp 获取控制器及控制器方法
2021/04/16 PHP
nginx rewrite功能使用场景分析
2022/05/30 Servers
python缺失值填充方法示例代码
2022/12/24 Python