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 相关文章推荐
pytyon 带有重复的全排列
Aug 13 Python
python插入排序算法实例分析
Jul 03 Python
qpython3 读取安卓lastpass Cookies
Jun 19 Python
解决Shell执行python文件,传参空格引起的问题
Oct 30 Python
利用arcgis的python读取要素的X,Y方法
Dec 22 Python
利用python实现短信和电话提醒功能的例子
Aug 08 Python
关于PyTorch源码解读之torchvision.models
Aug 17 Python
python logging 日志的级别调整方式
Feb 21 Python
Keras自定义IOU方式
Jun 10 Python
详细分析Python垃圾回收机制
Jul 01 Python
Keras 数据增强ImageDataGenerator多输入多输出实例
Jul 03 Python
简单了解如何封装自己的Python包
Jul 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实现的验证码文件类实例
2015/06/18 PHP
PHP 9 大缓存技术总结
2015/09/17 PHP
php操作路径的经典方法(必看篇)
2016/10/04 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
jQuery 行背景颜色的交替显示(隔行变色)实现代码
2009/12/13 Javascript
原生javascript和jquery判断浏览器版本等信息
2013/07/04 Javascript
Egret引擎开发指南之创建项目
2014/09/03 Javascript
JavaScript中this详解
2015/09/01 Javascript
Node.js环境下编写爬虫爬取维基百科内容的实例分享
2016/06/12 Javascript
JS获取鼠标相对位置的方法
2016/09/20 Javascript
原生js仿jquery实现对Ajax的封装
2016/10/04 Javascript
BootStrap 标题设置跨行无效的解决方法
2017/10/25 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
2019/04/26 Javascript
layui2.0使用table+laypage实现真分页
2019/07/27 Javascript
vue - vue.config.js中devServer配置方式
2019/10/30 Javascript
vue学习笔记之过滤器的基本使用方法实例分析
2020/02/01 Javascript
用python实现批量重命名文件的代码
2012/05/25 Python
Python的Flask框架中的Jinja2模板引擎学习教程
2016/06/30 Python
python字符串str和字节数组相互转化方法
2017/03/18 Python
python调用API实现智能回复机器人
2018/04/10 Python
基于Django URL传参 FORM表单传数据 get post的用法实例
2018/05/28 Python
Python logging模块用法示例
2018/08/28 Python
python爬取网易云音乐评论
2018/11/16 Python
centos7之Python3.74安装教程
2019/08/15 Python
Django视图、传参和forms验证操作
2020/07/15 Python
Python获取浏览器窗口句柄过程解析
2020/07/25 Python
英国著名的化妆品折扣网站:Allbeauty.com
2016/07/21 全球购物
微软俄罗斯官方网站:Microsoft俄罗斯
2016/09/18 全球购物
信息专业个人的自我评价
2013/12/27 职场文书
国际贸易个人求职信范文
2014/01/04 职场文书
中学清明节活动总结
2014/07/04 职场文书
创业计划书之外语培训班
2019/11/02 职场文书
Oracle 死锁的检测查询及处理
2021/09/25 Oracle
MySQL连接控制插件介绍
2021/09/25 MySQL
配置Kubernetes外网访问集群
2022/03/31 Servers
Linux、ubuntu系统下查看显卡型号、显卡信息详解
2022/04/07 Servers