在这里插入图片描述

💡 核心理念:Diagram as Code

Diagrams 的核心思想是让你像写代码一样定义架构图 。它的主要优势在于:

  • 快速原型设计:无需使用复杂的图形设计工具,即可快速勾勒新系统的架构 。
  • 版本控制友好:架构图的定义变成了文本文件,可以像管理代码一样,用 Git 等工具追踪每一次修改 。
  • 图标丰富:内置了 AWSAzureGCPKubernetes阿里云 等主流云服务商的官方图标集,也支持 On-Premise(本地部署)、SaaS 和主流编程框架的节点 。

请注意:Diagrams 仅用于绘制架构图,它不会操作任何真实的云资源,也不会生成 CloudFormation 或 Terraform 代码 。

🔧 安装与配置

安装 Diagrams 分为两步,需要确保环境满足要求。

步骤 操作 说明
1. 环境检查 python --version 需要 Python 3.7 或更高版本 。
2. 安装 Graphviz macOS: brew install graphviz
Ubuntu/Debian: sudo apt-get install graphviz
Windows: 从 官网 下载安装,或使用包管理工具如 choco install graphviz
Graphviz 是底层的渲染引擎,必须安装 。
3. 安装 Diagrams pip install diagrams 使用 pip 安装 Python 库。

🚀 基础用法:绘制第一张图

创建一个 Python 文件(例如 web_service.py),写入以下代码 :

from diagrams import Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB

# 使用 with 语句创建一个图上下文
# show=False 表示不自动打开图片,outformat 可以指定输出格式
with Diagram("简单Web服务", show=False, outformat="png"):
    # 使用 >> 操作符定义节点流向:负载均衡 -> 应用服务器 -> 数据库
    ELB("入口") >> EC2("应用") >> RDS("数据库")

在终端运行 python web_service.py,即可在当前目录生成 simple_web_service.png 文件。

🔗 核心概念与高级特性

掌握基础后,可以通过这些核心概念构建更复杂的架构图。

1. 节点 (Nodes) 与连接
  • 节点:图的组成部分,通过 提供商.服务类型.节点名 的方式导入,如 from diagrams.aws.compute import EC2
  • 连接操作符
    • >>:从左到右连接。
    • <<:从右到左连接。
    • -:连接,不表示方向。
  • 节点组:可以将多个节点放入一个 Python 列表 [] 中,实现一对多的连接,例如 ELB("lb") >> [EC2("web1"), EC2("web2")]
2. 集群 (Clusters)
  • 使用 Cluster 可以将逻辑上相关的节点圈在一起,形成视觉上的分组,非常适合表示服务集群或子网 。
  • 集群支持无限嵌套,可以构建复杂的层次结构 。

示例:带集群的架构

from diagrams import Cluster, Diagram
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS
from diagrams.aws.network import ELB

with Diagram("集群示例", show=False):
    lb = ELB("负载均衡")

    with Cluster("应用层集群"):  # 定义一个集群
        web集群 = [EC2("web1"), EC2("web2")]

    with Cluster("数据层"):
        db主 = RDS("主数据库")
        db从 = RDS("从数据库")
        db主 >> db从  # 主从关系

    lb >> web集群 >> db主
3. 边 (Edges) 与样式定制

你可以通过 Edge 对象或直接在连接时传递参数,来定制连线的颜色、样式和标签 。

from diagrams import Diagram, Edge
from diagrams.aws.compute import EC2
from diagrams.aws.database import RDS

with Diagram("样式定制", show=False):
    EC2("应用") >> Edge(color="firebrick", style="dashed", label="数据流") >> RDS("数据库")

此外,你还可以在 Diagram 初始化时,通过 graph_attrnode_attredge_attr 参数,传递 Graphviz 的 DOT 属性,实现全局样式自定义,例如设置透明背景、字体等 。

4. 布局方向 (Direction)

通过 direction 参数可以控制图的整体流向 :

  • TB:从上到下 (Top to Bottom)
  • BT:从下到上
  • LR:从左到右 (Left to Right,默认)
  • RL:从右到左

💡 最佳实践与常见问题

为了让你的架构图更专业,可以参考以下建议:

  • 节点命名:使用 功能-环境-角色 的格式,如 EC2("用户认证服务-prod"),提高可读性 。
  • 集群嵌套:嵌套深度建议不超过 3 层,避免图表过于复杂 。
  • 中文显示问题:如果节点名称为中文且显示为乱码,需要在 graph_attr 中指定一个支持中文的字体,例如 "SimHei""Microsoft YaHei"
    graph_attr = {"fontname": "SimHei"}
    with Diagram("中文标题", graph_attr=graph_attr, show=False):
        EC2("应用服务器") # 节点名也能正常显示中文
    
  • 版本控制:记得将 .py 源文件纳入 Git 管理,实现架构即代码 。

🌍 谁在用 Diagrams?

Diagrams 已经被一些知名的开源项目采用,证明了它的实用性 :

  • Apache Airflow:在其文档中用于生成架构图。
  • Cloudiscovery:帮助用户分析云上资源,并基于 Diagrams 绘制出云基础设施的拓扑图。
  • Airflow Diagrams:一个 Airflow 插件,用于可视化 DAG 所依赖的云服务。

📚 扩展学习

  • 官方文档:可以访问 diagrams.mingrammer.com 查看完整的节点列表和更多示例。
  • 其他语言:如果你是 Go 语言开发者,可以试试 go-diagrams
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐