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求crc32值的方法
Oct 05 Python
Python实现的数据结构与算法之基本搜索详解
Apr 22 Python
合并百度影音的离线数据( with python 2.3)
Aug 04 Python
Python入门_浅谈for循环、while循环
May 16 Python
Windows下PyCharm安装图文教程
Aug 27 Python
Python爬虫学习之翻译小程序
Jul 30 Python
Python3简单爬虫抓取网页图片代码实例
Aug 26 Python
python实现ftp文件传输系统(案例分析)
Mar 20 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
Apr 07 Python
Django+Celery实现动态配置定时任务的方法示例
May 26 Python
python pyg2plot的原理知识点总结
Feb 28 Python
Python OpenCV 图像平移的实现示例
Jun 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
什么是MVC,好东西啊
2007/05/03 PHP
PHP+MySQL 手工注入语句大全 推荐
2009/10/30 PHP
php中日期加减法运算实现代码
2011/12/08 PHP
PHP gbk环境下json_dencode传送来的汉字
2012/11/13 PHP
PHP常用编译参数中文说明
2014/09/27 PHP
PHP中实现crontab代码分享
2015/03/26 PHP
从性能方面考虑PHP下载远程文件的3种方法
2015/12/29 PHP
LAMP环境使用Composer安装Laravel的方法
2017/03/25 PHP
用javascript实现分割提取页面所需内容
2007/05/09 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(四)用地图块拼成大地图
2013/01/23 Javascript
node.js中RPC(远程过程调用)的实现原理介绍
2014/12/05 Javascript
javascript实现动态改变层大小的方法
2015/05/14 Javascript
javascript中闭包(Closure)详解
2016/01/06 Javascript
jQuery表格插件datatables用法汇总
2016/03/29 Javascript
javascript实现下雪效果【实例代码】
2016/05/03 Javascript
jQuery基本过滤选择器用法示例
2016/09/09 Javascript
利用纯Vue.js构建Bootstrap组件
2016/11/03 Javascript
使用jQuery.Pin垂直滚动时固定导航
2017/05/24 jQuery
NodeJs中express框架的send()方法简介
2017/06/20 NodeJs
使用JavaScript实现点击循环切换图片效果
2017/09/03 Javascript
vue+iview+less 实现换肤功能
2018/08/17 Javascript
微信小程序 函数防抖 解决重复点击消耗性能问题实现代码
2019/09/12 Javascript
vue实现在线翻译功能
2019/09/27 Javascript
vue vant Area组件使用详解
2019/12/09 Javascript
浅谈Python中带_的变量或函数命名
2017/12/04 Python
教你使用python画一朵花送女朋友
2018/03/29 Python
Python全局锁中如何合理运用多线程(多进程)
2019/11/06 Python
Python通过4种方式实现进程数据通信
2020/03/12 Python
Html5应用程序缓存(Cache manifest)
2018/06/04 HTML / CSS
社区庆八一活动方案
2014/02/02 职场文书
小学生常见病防治方案
2014/06/06 职场文书
不同意离婚答辩状
2015/05/22 职场文书
周一早安温馨问候祝福语!
2019/07/15 职场文书
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
2022/02/12 Redis
Python+OpenCV实现在图像上绘制矩形
2022/03/21 Python
JavaScript中的LHS和RHS分析详情
2022/04/06 Javascript