Python的Diagrams库允许通过简单的Python代码绘制云系统架构,实现对新的系统架构进行原型设计。Diagrams的官方仓库地址见:diagrams。Diagrams的官方文档和使用示例见:diagrams-doc

0 安装

Diagrams库依赖于开源的图可视化工具Graphviz。Python下的Graphviz使用见python模块graphviz使用入门。Graphviz在windows下的安装见Graphviz安装配置教程。在linux下的安装,命令行输入以下指令即可:

sudo apt-get install graphviz

sudo apt-get install graphviz graphviz-doc

Diagrams库需要在Python3.6及以上环境运行,安装graphviz后,输入以下指令安装diagrams库:

pip install -U diagrams

安装完成后,以下代码成功输出结果表示Diagrams库安装成功。

# 代码示例
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")
# 展示图片
# from IPython.display import Image
# Image(url= "web_service.png") # 使用Pillow库
from PIL import Image image = Image.open("web_service.png")
image.show()

1 模块说明

1.1 Diagrams

Diagrams是绘制图像的主要模块,Diagrams用于设置全局图上下文。

Diagram构造函数的第一个参数将设置图片名称,如果没有设置输出图片文件名,将用图片名称做为输出图片的文件名。

from diagrams import Diagram
from diagrams.aws.compute import EC2 # 输出文件图片名会自动将大写字母转为小写,空格转为下划线,并默认输出png格式图片
with Diagram("SIMPLE IMAGE",show=False):
EC2("web")
# 展示图片
image = Image.open("simple_image.png")
image.show()

可以通过设置outformat和filename来设置输出图片的格式和文件名。

from diagrams import Diagram
from diagrams.aws.compute import EC2 with Diagram("Simple Diagram", outformat="jpg", filename="MY Diagram",show=False):
EC2("web")
# 展示图片
image = Image.open("MY Diagram.jpg")
image.show()

此外还可以设置Graphviz中的graph_attr, node_attr和edge_attr属性来控制图形参数,这些属性具体介绍含义见Graphviz_Attributes

from diagrams import Diagram
from diagrams.aws.compute import EC2 graph_attr = {
"fontsize": "24",
"bgcolor": "transparent",
"fontcolor": "red"
} with Diagram("Simple Diagram", show=False, graph_attr=graph_attr):
EC2("web")
# 展示图片
image = Image.open("simple_diagram.png")
image.show()

1.2 Nodes

节点是图表的基本组成部分。一个节点对象由三部分组成:提供者、资源类型和节点名称。

例如下面的示例,aws表示提供者,compute表示资源类型,EC2表示节点名称。可以查看官方文档,看看不同节点的使用。比如Azure、Alibaba、IBM提供的节点。

from diagrams import Diagram
from diagrams.aws.compute import EC2 with Diagram("Simple Diagram"):
EC2("web")

通过使用以下运算符连接节点来表示数据流:

>> : 从左到右连接节点。
<< : 从右到左连接节点。
- :无方向连接节点。无向的。
from diagrams import Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB
from diagrams.aws.storage import S3 # 先声明的数据流后渲染
with Diagram("Web Services", show=False):
ELB("lb") >> EC2("web") >> RDS("userdb") >> S3("store")
ELB("lb") >> EC2("web") >> RDS("userdb") << EC2("stat")
(ELB("lb") >> EC2("web")) - EC2("web") >> RDS("userdb")
# 展示图片
image = Image.open("web_services.png")
image.show()

通过设置Diagram的direction参数,可以设置图表数据流的方向,默认从左到右(LR),参数如下:

  • TB,从上往下
  • BT,从下往上
  • LR,从左往右
  • RL,从右往左
from diagrams import Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB with Diagram("Workers", show=False, direction="BT"):
lb = ELB("lb")
db = RDS("events")
lb >> EC2("worker1") >> db
lb >> EC2("worker2") >> db
lb >> EC2("worker3") >> db
lb >> EC2("worker4") >> db
lb >> EC2("worker5") >> db # 展示图片
image = Image.open("workers.png")
image.show()

当然也可以将多个节点表示为一组,即将多个节点放入一个python列表中,但是不支持列表与列表之间进行直接连接。

from diagrams import Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB with Diagram("Grouped Workers", show=False, direction="TB"):
ELB("lb") >> [EC2("worker1"),
EC2("worker2"),
EC2("worker3"),
EC2("worker4"),
EC2("worker5")] >> RDS("events") # 展示图片
image = Image.open("grouped_workers.png")
image.show()

1.3 Clusters

通过创建Cluster部件,可以将部分节点进行聚合,并与其他节点隔离开来。

from diagrams import Cluster, Diagram
from diagrams.aws.compute import ECS
from diagrams.aws.database import RDS
from diagrams.aws.network import Route53 with Diagram("Simple Cluster", show=False):
dns = Route53("dns")
web = ECS("service") # 设置集群,第一值为集群名
with Cluster("DB Cluster"):
db_primary = RDS("primary")
db_primary - [RDS("replica1"),
RDS("replica2")]
# 设置数据流方向
dns >> web >> db_primary # 展示图片
image = Image.open("simple_cluster.png")
image.show()

同时也支持创建嵌套节点,嵌套节点中也可以创建多个cluster。

from diagrams import Cluster, Diagram
from diagrams.aws.compute import ECS, EKS, Lambda
from diagrams.aws.database import Redshift
from diagrams.aws.integration import SQS
from diagrams.aws.storage import S3 with Diagram("Event Processing", show=False):
source = EKS("k8s source") with Cluster("Event Flows"):
with Cluster("Event Workers"):
workers = [ECS("worker1"),
ECS("worker2"),
ECS("worker3")] queue = SQS("event queue") with Cluster("Processing"):
handlers = [Lambda("proc1"),
Lambda("proc2"),
Lambda("proc3")] store = S3("events store")
dw = Redshift("analytics") # 设置数据流方向
source >> workers >> queue >> handlers
handlers >> store
handlers >> dw # 展示图片
image = Image.open("event_processing.png")
image.show()

1.4 Edges

edge用于设置节点间连接线的属性。包含三个属性:标签label、颜色color和样式style,它们对应于Graphviz的edge属性设置。

from diagrams import Cluster, Diagram, Edge
from diagrams.alibabacloud.compute import ElasticSearch
from diagrams.alibabacloud.compute import FunctionCompute
from diagrams.alibabacloud.compute import ContainerService with Diagram(name="Web Service", show=False):
# 设置三个节点
service = ContainerService("service")
compute = FunctionCompute("compute")
search = ElasticSearch("search")
# 设置连接方式
service >> Edge(color="firebrick", style="dashed") >> compute
# 设置连接方式
compute - Edge(color="orange", label="link") >> search
service >> search # 展示图片
image = Image.open("web_service.png")
image.show()

2 参考

[python] 基于diagrams库绘制系统架构图的更多相关文章

  1. [python] 基于wordcloud库绘制词云图

    词云Wordcloud是文本数据的一种可视化表示方式.它通过设置不同的字体大小或颜色来表现每个术语的重要性.词云在社交媒体中被广泛使用,因为它能够让读者快速感知最突出的术语.然而,词云的输出结果没有统 ...

  2. 五分钟!用python绘制漂亮的系统架构图

    Diagrams 是一个基于Python绘制云系统架构的模块,它能够通过非常简单的描述就能可视化架构,并支持以下6个云产品的图标: AWS.Azure.GCP.K8s.阿里云 和 Oracle 云 基 ...

  3. android系统架构图

    android的系统架构和其操作系统一样,采用了分层的架构.从架构图看,android分为四个层,从高层到低层分别是应用程序层.应用程序框架层.系统运行库层和Linux核心层. 1.应用程序 Andr ...

  4. 画了一张基于Spring Cloud的微服务系统架构图

  5. python使用turtle库绘制奥运五环

    效果图: #奥运五环 import turtle turtle.setup(1.0,1.0) #设置窗口大小 turtle.title("奥运五环") #蓝圆 turtle.pen ...

  6. [python] 基于blind-watermark库添加图片盲水印

    blind-watermark是一个能够给图片添加/解析基于频域的数字盲水印的Python库.图像水印image watermark是指在图片里添加文本或图形,以标记图片的来源.但是图像水印会破坏原图 ...

  7. hbase 学习(十六)系统架构图

    HBase 系统架构图 组成部件说明 Client: 使用HBase RPC机制与HMaster和HRegionServer进行通信 Client与HMaster进行通信进行管理类操作 Client与 ...

  8. [python] 基于paramiko库操作远程服务器

    SSH(Secure Shell)是一种网络安全协议,能够使两台计算机安全地通信和共享数据.目前,SSH协议已在世界各地广泛使用,大多数设备都支持SSH功能.SSH的进一步说明见:深入了解SSH.SS ...

  9. python 利用turtle库绘制七段数码管的方式,绘制当前事件(时分秒00:00:00)

    # coding:utf-8# 绘制七段数码管,显示当前时间import timeimport turtle as tt # 绘制间隔def drawGap(): tt.penup() tt.fd(3 ...

随机推荐

  1. UML类中的6种关系

    最近现看Java设计模式,但是越看越不明白,一直搞不明白类与类之前的关系有哪些,通过几天的学习与整理通过代码实现的UML画图的方式理解类之间的相互关系. 一.类与类6大关系: 泛化(generaliz ...

  2. 第一个java程序进行总结

    1.java程序编写-编译-运行的过程 编写:我们将编写的java代码保存在以".java"结尾的源文件中 编译:使用javac.exe命令编译我们的java源文件.格式:java ...

  3. go-zero docker-compose 搭建课件服务(五):完善user服务

    0.转载 go-zero docker-compose 搭建课件服务(五):完善user服务 0.1源码地址 https://github.com/liuyuede123/go-zero-course ...

  4. OpenStack云计算平台框架

    概:  OpenStack是包含很多独立组件的一个云计算平台框架.在安装组件前,需要先将框架搭建出来,才能向其中放置组件. 搭建open stack云计算平台框架 一.安装open stack云计算平 ...

  5. 40.TokenAuthentication认证

    TokenAuthentication认证介绍 TokenAuthentication是一种简单的基于令牌的HTTP认证 适用于CS架构,例如普通的桌面应用程序或移动客户端   TokenAuthen ...

  6. Windows7下驱动开发与调试体系构建——5.实战反调试标记位(NtGlobalFlag)

    目录/参考资料:https://www.cnblogs.com/railgunRG/p/14412321.html <加密与解密>P670中,介绍了检查程序是否被调试的第二种方法:查看进程 ...

  7. day08-XML

    XML 官方文档:https://www.w3school.com.cn/xml/index.asp 1.为什么需要xml? 需求1:两个程序间进行数据通信? 需求2:给一台服务器,做一个配置文件,当 ...

  8. 如何使用ModelBox快速提升AI应用性能?

    摘要:在开发初期开发者往往聚焦在模型的精度上,性能关注较少,但随着业务量不断增加,AI应用的性能往往成为瓶颈,此时对于没有性能优化经验的开发者来说往往需要耗费大量精力做优化性能,本文为开发者介绍一些常 ...

  9. iOS逆向之某多多App抓包

    阅读此文档的过程中遇到任何问题,请关注公众号[移动端Android和iOS开发技术分享]或加QQ群[309580013] 1.目标 由于某多多App现使用longlink进行数据传输,使用charle ...

  10. xshell调整字体大小

    1. 进入设置 %default%:默认对全部终端生效 如果想对单一终端单独设置,可先进入会话管理,针对单一会话单独调整 2. 点击外观配置,修改字体大小